Add NRPE checks for services
Adds the nrpe-external-master layer and checks for services managed by this charm. func-test-pr: https://github.com/openstack-charmers/zaza-openstack-tests/pull/433 Change-Id: I8f45a612cf4e6df7618edcd8930f2bb199fa69fd Closes-Bug: #1896674
This commit is contained in:
parent
71dd75c4cd
commit
bf00c7c3a3
@ -30,3 +30,17 @@ options:
|
|||||||
|
|
||||||
The Open vSwitch ovsdb-server default of 5 seconds may not be sufficient
|
The Open vSwitch ovsdb-server default of 5 seconds may not be sufficient
|
||||||
depending on type and load of the CMS you want to connect to OVN.
|
depending on type and load of the CMS you want to connect to OVN.
|
||||||
|
nagios_context:
|
||||||
|
default: "juju"
|
||||||
|
type: string
|
||||||
|
description: |
|
||||||
|
A string that will be prepended to instance name to set the host name
|
||||||
|
in nagios. So for instance the hostname would be something like:
|
||||||
|
juju-myservice-0
|
||||||
|
If you're running multiple environments with the same services in them
|
||||||
|
this allows you to differentiate between them.
|
||||||
|
nagios_servicegroups:
|
||||||
|
default: ""
|
||||||
|
type: string
|
||||||
|
description: |
|
||||||
|
Comma separated list of nagios servicegroups for the service checks.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
includes:
|
includes:
|
||||||
- layer:openstack
|
- layer:openstack
|
||||||
- layer:leadership
|
- layer:leadership
|
||||||
|
- interface:nrpe-external-master
|
||||||
- interface:ovsdb
|
- interface:ovsdb
|
||||||
- interface:ovsdb-cluster
|
- interface:ovsdb-cluster
|
||||||
- interface:ovsdb-cms
|
- interface:ovsdb-cms
|
||||||
|
@ -17,6 +17,7 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import charmhelpers.core as ch_core
|
import charmhelpers.core as ch_core
|
||||||
|
import charmhelpers.contrib.charmsupport.nrpe as nrpe
|
||||||
import charmhelpers.contrib.network.ovs.ovn as ch_ovn
|
import charmhelpers.contrib.network.ovs.ovn as ch_ovn
|
||||||
import charmhelpers.contrib.network.ovs.ovsdb as ch_ovsdb
|
import charmhelpers.contrib.network.ovs.ovsdb as ch_ovsdb
|
||||||
from charmhelpers.contrib.network import ufw as ch_ufw
|
from charmhelpers.contrib.network import ufw as ch_ufw
|
||||||
@ -65,6 +66,7 @@ class BaseOVNCentralCharm(charms_openstack.charm.OpenStackCharm):
|
|||||||
name = 'ovn-central'
|
name = 'ovn-central'
|
||||||
packages = ['ovn-central']
|
packages = ['ovn-central']
|
||||||
services = ['ovn-central']
|
services = ['ovn-central']
|
||||||
|
nrpe_check_services = []
|
||||||
release_pkg = 'ovn-central'
|
release_pkg = 'ovn-central'
|
||||||
configuration_class = OVNCentralConfigurationAdapter
|
configuration_class = OVNCentralConfigurationAdapter
|
||||||
required_relations = [PEER_RELATION, CERT_RELATION]
|
required_relations = [PEER_RELATION, CERT_RELATION]
|
||||||
@ -471,6 +473,15 @@ class BaseOVNCentralCharm(charms_openstack.charm.OpenStackCharm):
|
|||||||
for rule in sorted(delete_rules, reverse=True):
|
for rule in sorted(delete_rules, reverse=True):
|
||||||
ch_ufw.modify_access(None, dst=None, action='delete', index=rule)
|
ch_ufw.modify_access(None, dst=None, action='delete', index=rule)
|
||||||
|
|
||||||
|
def render_nrpe(self):
|
||||||
|
"""Configure Nagios NRPE checks."""
|
||||||
|
hostname = nrpe.get_nagios_hostname()
|
||||||
|
current_unit = nrpe.get_nagios_unit_name()
|
||||||
|
charm_nrpe = nrpe.NRPE(hostname=hostname)
|
||||||
|
nrpe.add_init_service_checks(
|
||||||
|
charm_nrpe, self.nrpe_check_services, current_unit)
|
||||||
|
charm_nrpe.write()
|
||||||
|
|
||||||
|
|
||||||
class TrainOVNCentralCharm(BaseOVNCentralCharm):
|
class TrainOVNCentralCharm(BaseOVNCentralCharm):
|
||||||
# OpenvSwitch and OVN is distributed as part of the Ubuntu Cloud Archive
|
# OpenvSwitch and OVN is distributed as part of the Ubuntu Cloud Archive
|
||||||
@ -507,6 +518,11 @@ class TrainOVNCentralCharm(BaseOVNCentralCharm):
|
|||||||
'/lib/systemd/system/ovn-nb-ovsdb.service': [],
|
'/lib/systemd/system/ovn-nb-ovsdb.service': [],
|
||||||
'/lib/systemd/system/ovn-sb-ovsdb.service': [],
|
'/lib/systemd/system/ovn-sb-ovsdb.service': [],
|
||||||
})
|
})
|
||||||
|
self.nrpe_check_services = [
|
||||||
|
'ovn-northd',
|
||||||
|
'ovn-nb-ovsdb',
|
||||||
|
'ovn-sb-ovsdb',
|
||||||
|
]
|
||||||
|
|
||||||
def install(self):
|
def install(self):
|
||||||
"""Override charm install method.
|
"""Override charm install method.
|
||||||
@ -546,6 +562,11 @@ class UssuriOVNCentralCharm(BaseOVNCentralCharm):
|
|||||||
'ovn-ovsdb-server-nb',
|
'ovn-ovsdb-server-nb',
|
||||||
'ovn-ovsdb-server-sb',
|
'ovn-ovsdb-server-sb',
|
||||||
])
|
])
|
||||||
|
self.nrpe_check_services = [
|
||||||
|
'ovn-northd',
|
||||||
|
'ovn-ovsdb-server-nb',
|
||||||
|
'ovn-ovsdb-server-sb',
|
||||||
|
]
|
||||||
|
|
||||||
def install(self):
|
def install(self):
|
||||||
"""Override charm install method."""
|
"""Override charm install method."""
|
||||||
|
@ -35,6 +35,9 @@ provides:
|
|||||||
interface: ovsdb-cms
|
interface: ovsdb-cms
|
||||||
ovsdb-server:
|
ovsdb-server:
|
||||||
interface: ovsdb-cluster
|
interface: ovsdb-cluster
|
||||||
|
nrpe-external-master:
|
||||||
|
interface: nrpe-external-master
|
||||||
|
scope: container
|
||||||
peers:
|
peers:
|
||||||
ovsdb-peer:
|
ovsdb-peer:
|
||||||
interface: ovsdb-cluster
|
interface: ovsdb-cluster
|
||||||
|
@ -198,3 +198,15 @@ def render():
|
|||||||
ovsdb_peer.db_sb_admin_port)
|
ovsdb_peer.db_sb_admin_port)
|
||||||
reactive.set_flag('config.rendered')
|
reactive.set_flag('config.rendered')
|
||||||
ovn_charm.assess_status()
|
ovn_charm.assess_status()
|
||||||
|
|
||||||
|
|
||||||
|
@reactive.when_none('charm.paused', 'is-update-status-hook')
|
||||||
|
@reactive.when('config.rendered')
|
||||||
|
@reactive.when_any('config.changed.nagios_context',
|
||||||
|
'config.changed.nagios_servicegroups',
|
||||||
|
'endpoint.nrpe-external-master.changed',
|
||||||
|
'nrpe-external-master.available')
|
||||||
|
def configure_nrpe():
|
||||||
|
"""Handle config-changed for NRPE options."""
|
||||||
|
with charm.provide_charm_instance() as charm_instance:
|
||||||
|
charm_instance.render_nrpe()
|
||||||
|
@ -4,6 +4,8 @@ relations:
|
|||||||
- mysql:shared-db
|
- mysql:shared-db
|
||||||
- - ovn-central:certificates
|
- - ovn-central:certificates
|
||||||
- vault:certificates
|
- vault:certificates
|
||||||
|
- - 'nrpe:nrpe-external-master'
|
||||||
|
- 'ovn-central:nrpe-external-master'
|
||||||
applications:
|
applications:
|
||||||
mysql:
|
mysql:
|
||||||
charm: cs:~openstack-charmers-next/percona-cluster
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
@ -17,3 +19,5 @@ applications:
|
|||||||
num_units: 3
|
num_units: 3
|
||||||
options:
|
options:
|
||||||
source: cloud:bionic-train
|
source: cloud:bionic-train
|
||||||
|
nrpe:
|
||||||
|
charm: cs:nrpe
|
||||||
|
@ -4,6 +4,8 @@ relations:
|
|||||||
- mysql:shared-db
|
- mysql:shared-db
|
||||||
- - ovn-central:certificates
|
- - ovn-central:certificates
|
||||||
- vault:certificates
|
- vault:certificates
|
||||||
|
- - 'nrpe:nrpe-external-master'
|
||||||
|
- 'ovn-central:nrpe-external-master'
|
||||||
applications:
|
applications:
|
||||||
mysql:
|
mysql:
|
||||||
charm: cs:~openstack-charmers-next/percona-cluster
|
charm: cs:~openstack-charmers-next/percona-cluster
|
||||||
@ -17,3 +19,5 @@ applications:
|
|||||||
num_units: 3
|
num_units: 3
|
||||||
options:
|
options:
|
||||||
source: cloud:bionic-ussuri/proposed
|
source: cloud:bionic-ussuri/proposed
|
||||||
|
nrpe:
|
||||||
|
charm: cs:nrpe
|
||||||
|
@ -48,6 +48,10 @@ applications:
|
|||||||
- '5'
|
- '5'
|
||||||
- '6'
|
- '6'
|
||||||
|
|
||||||
|
nrpe:
|
||||||
|
charm: cs:nrpe
|
||||||
|
|
||||||
|
|
||||||
relations:
|
relations:
|
||||||
|
|
||||||
- - 'vault:shared-db'
|
- - 'vault:shared-db'
|
||||||
@ -57,3 +61,5 @@ relations:
|
|||||||
|
|
||||||
- - 'ovn-central:certificates'
|
- - 'ovn-central:certificates'
|
||||||
- 'vault:certificates'
|
- 'vault:certificates'
|
||||||
|
- - 'nrpe:nrpe-external-master'
|
||||||
|
- 'ovn-central:nrpe-external-master'
|
||||||
|
@ -48,6 +48,9 @@ applications:
|
|||||||
- '5'
|
- '5'
|
||||||
- '6'
|
- '6'
|
||||||
|
|
||||||
|
nrpe:
|
||||||
|
charm: cs:nrpe
|
||||||
|
|
||||||
relations:
|
relations:
|
||||||
|
|
||||||
- - 'vault:shared-db'
|
- - 'vault:shared-db'
|
||||||
@ -57,3 +60,5 @@ relations:
|
|||||||
|
|
||||||
- - 'ovn-central:certificates'
|
- - 'ovn-central:certificates'
|
||||||
- 'vault:certificates'
|
- 'vault:certificates'
|
||||||
|
- - 'nrpe:nrpe-external-master'
|
||||||
|
- 'ovn-central:nrpe-external-master'
|
||||||
|
@ -6,6 +6,8 @@ relations:
|
|||||||
- vault-mysql-router:shared-db
|
- vault-mysql-router:shared-db
|
||||||
- - ovn-central:certificates
|
- - ovn-central:certificates
|
||||||
- vault:certificates
|
- vault:certificates
|
||||||
|
- - 'nrpe:nrpe-external-master'
|
||||||
|
- 'ovn-central:nrpe-external-master'
|
||||||
applications:
|
applications:
|
||||||
mysql-innodb-cluster:
|
mysql-innodb-cluster:
|
||||||
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
charm: cs:~openstack-charmers-next/mysql-innodb-cluster
|
||||||
@ -19,3 +21,5 @@ applications:
|
|||||||
series: groovy
|
series: groovy
|
||||||
charm: cs:~openstack-charmers-next/ovn-central
|
charm: cs:~openstack-charmers-next/ovn-central
|
||||||
num_units: 3
|
num_units: 3
|
||||||
|
nrpe:
|
||||||
|
charm: cs:nrpe
|
||||||
|
@ -15,6 +15,10 @@ target_deploy_status:
|
|||||||
vault:
|
vault:
|
||||||
workload-status: blocked
|
workload-status: blocked
|
||||||
workload-status-message: Vault needs to be initialized
|
workload-status-message: Vault needs to be initialized
|
||||||
|
nrpe:
|
||||||
|
workload-status: blocked
|
||||||
|
workload-status-message: "Nagios server not configured or related"
|
||||||
|
|
||||||
# Note that full end to end tests are performed with OVN in the
|
# Note that full end to end tests are performed with OVN in the
|
||||||
# neutron-api-plugin-ovn and octavia charm gates
|
# neutron-api-plugin-ovn and octavia charm gates
|
||||||
configure:
|
configure:
|
||||||
|
@ -36,6 +36,7 @@ class _fake_decorator(object):
|
|||||||
sys.modules['charmhelpers.contrib.network.ovs'] = mock.MagicMock()
|
sys.modules['charmhelpers.contrib.network.ovs'] = mock.MagicMock()
|
||||||
sys.modules['charmhelpers.contrib.network.ovs.ovn'] = mock.MagicMock()
|
sys.modules['charmhelpers.contrib.network.ovs.ovn'] = mock.MagicMock()
|
||||||
sys.modules['charmhelpers.contrib.network.ovs.ovsdb'] = mock.MagicMock()
|
sys.modules['charmhelpers.contrib.network.ovs.ovsdb'] = mock.MagicMock()
|
||||||
|
sys.modules['charmhelpers.contrib.charmsupport.nrpe'] = mock.MagicMock()
|
||||||
charms = mock.MagicMock()
|
charms = mock.MagicMock()
|
||||||
sys.modules['charms'] = charms
|
sys.modules['charms'] = charms
|
||||||
charms.leadership = mock.MagicMock()
|
charms.leadership = mock.MagicMock()
|
||||||
|
@ -410,3 +410,19 @@ class TestOVNCentralCharm(Helper):
|
|||||||
self.ch_ufw.modify_access.assert_has_calls([
|
self.ch_ufw.modify_access.assert_has_calls([
|
||||||
mock.call(None, dst=None, action='delete', index=42)
|
mock.call(None, dst=None, action='delete', index=42)
|
||||||
])
|
])
|
||||||
|
|
||||||
|
def test_render_nrpe(self):
|
||||||
|
self.patch_object(ovn_central.nrpe, 'NRPE')
|
||||||
|
self.patch_object(ovn_central.nrpe, 'add_init_service_checks')
|
||||||
|
self.target.render_nrpe()
|
||||||
|
# Note that this list is valid for Ussuri
|
||||||
|
self.add_init_service_checks.assert_has_calls([
|
||||||
|
mock.call().add_init_service_checks(
|
||||||
|
mock.ANY,
|
||||||
|
['ovn-northd', 'ovn-ovsdb-server-nb', 'ovn-ovsdb-server-sb'],
|
||||||
|
mock.ANY
|
||||||
|
),
|
||||||
|
])
|
||||||
|
self.NRPE.assert_has_calls([
|
||||||
|
mock.call().write(),
|
||||||
|
])
|
||||||
|
@ -45,6 +45,7 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
|
|||||||
'maybe_do_upgrade': ('is-update-status-hook',),
|
'maybe_do_upgrade': ('is-update-status-hook',),
|
||||||
'publish_addr_to_clients': ('is-update-status-hook',),
|
'publish_addr_to_clients': ('is-update-status-hook',),
|
||||||
'render': ('is-update-status-hook',),
|
'render': ('is-update-status-hook',),
|
||||||
|
'configure_nrpe': ('charm.paused', 'is-update-status-hook',),
|
||||||
},
|
},
|
||||||
'when': {
|
'when': {
|
||||||
'announce_leader_ready': ('config.rendered',
|
'announce_leader_ready': ('config.rendered',
|
||||||
@ -71,6 +72,13 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
|
|||||||
'leadership.set.sb_cid',
|
'leadership.set.sb_cid',
|
||||||
'certificates.connected',
|
'certificates.connected',
|
||||||
'certificates.available',),
|
'certificates.available',),
|
||||||
|
'configure_nrpe': ('config.rendered',),
|
||||||
|
},
|
||||||
|
'when_any': {
|
||||||
|
'configure_nrpe': ('config.changed.nagios_context',
|
||||||
|
'config.changed.nagios_servicegroups',
|
||||||
|
'endpoint.nrpe-external-master.changed',
|
||||||
|
'nrpe-external-master.available',),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
# test that the hooks were registered via the
|
# test that the hooks were registered via the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user