Merge "implements: blueprint synchronizer-nagios-get-all"

This commit is contained in:
Jenkins 2016-02-23 15:03:03 +00:00 committed by Gerrit Code Review
commit ba736c9703
4 changed files with 154 additions and 0 deletions

View File

@ -31,4 +31,8 @@ OPTS = [
help='Nagios url for querying the data. Example: '
' http://<ip>/monitoring/nagios/cgi-bin/status.cgi'
),
cfg.StrOpt('nagios_config_file',
default='/etc/vitrage/nagios_conf.yaml',
help='Nagios configuration file'
),
]

View File

@ -0,0 +1,51 @@
# Copyright 2016 - Nokia
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from vitrage.common import file_utils
class NagiosConfig(object):
NAGIOS = 'nagios'
NAGIOS_HOST = 'nagios_host'
HOST = 'host'
TYPE = 'type'
NAME = 'name'
def __init__(self, conf):
self.rules = []
nagios_config = file_utils.load_yaml_file(
conf.synchronizer_plugins.nagios_config_file)
for config in nagios_config[self.NAGIOS]:
self.rules.append(NagiosHostMapping(config[self.NAGIOS_HOST],
config[self.TYPE],
config[self.NAME]))
class NagiosHostMapping(object):
def __init__(self, nagios_host, type, name):
self.nagios_host = nagios_host
self.type = type
self.name = name
def applies(self, service):
"""Check if the rule applies to this service
:param service:
:return: true/false
"""
# TODO(iafek) implement it
pass

View File

@ -0,0 +1,16 @@
nagios:
- nagios_host: compute-1
type: nova.host
name: compute-1
- nagios_host: compute-2
type: nova.host
name: host2
- nagios_host: compute-(.*)
type: nova.host
name: ${nagios_host}
- nagios_host: instance-(.*)
type: nova.instance
name: ${nagios_host}

View File

@ -0,0 +1,83 @@
# Copyright 2016 - Nokia
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_config import cfg
from oslo_log import log as logging
from vitrage.synchronizer.plugins.nagios.config import NagiosConfig
from vitrage.synchronizer.plugins.nagios.config import NagiosHostMapping
from vitrage.tests import base
from vitrage.tests.mocks import utils
LOG = logging.getLogger(__name__)
class TestNagiosConfig(base.BaseTest):
OPTS = [
cfg.StrOpt('nagios_config_file',
default=utils.get_resources_dir() +
'/nagios/nagios_conf.yaml',
help='Nagios configuation file'
),
]
# the rules match the ones in nagios_conf.yaml
RULE_1 = NagiosHostMapping('compute-1', 'nova.host', 'compute-1')
RULE_2 = NagiosHostMapping('compute-2', 'nova.host', 'host2')
RULE_3 = NagiosHostMapping('compute-(.*)', 'nova.host', '${nagios_host}')
RULE_4 = NagiosHostMapping('instance-(.*)',
'nova.instance',
'${nagios_host}')
RULES = [RULE_1, RULE_2, RULE_3, RULE_4]
NON_EXISTING_RULE_1 = NagiosHostMapping('X', 'nova.host', 'compute-1')
NON_EXISTING_RULE_2 = NagiosHostMapping('compute-1', 'X', 'compute-1')
NON_EXISTING_RULE_3 = NagiosHostMapping('compute-1', 'nova.host', 'X')
NON_EXISTING_RULES = [NON_EXISTING_RULE_1,
NON_EXISTING_RULE_2,
NON_EXISTING_RULE_3]
@classmethod
def setUpClass(cls):
cls.conf = cfg.ConfigOpts()
cls.conf.register_opts(cls.OPTS, group='synchronizer_plugins')
def test_nagios_configuration_loading(self):
# Action
nagios_conf = NagiosConfig(self.conf)
# Test assertions
rules = nagios_conf.rules
self.assertIsNotNone(nagios_conf, "no nagios configuration loaded")
self.assertEqual(len(self.RULES), len(rules))
for expected_rule in self.RULES:
self.assertTrue(TestNagiosConfig._check_contains(expected_rule,
rules))
for expected_rule in self.NON_EXISTING_RULES:
self.assertFalse(TestNagiosConfig._check_contains(expected_rule,
rules))
@staticmethod
def _check_contains(expected_rule, rules):
for rule in rules:
if TestNagiosConfig._assert_equals(expected_rule, rule):
return True
return False
@staticmethod
def _assert_equals(rule1, rule2):
return rule1.nagios_host == rule2.nagios_host and \
rule1.type == rule2.type and \
rule1.name == rule2.name