Account for ssl port monitoring.
Ensure usage of upstream ceilometer-agent-central ocf (monitors amqp port). Note: previous versions unintentionally used a modified version of the ocf resource file which monitored keystone connections.
This commit is contained in:
parent
b598b97fab
commit
8c0fe96cb9
|
@ -13,6 +13,7 @@ from charmhelpers.core.hookenv import (
|
|||
relation_get,
|
||||
relation_set,
|
||||
relation_ids,
|
||||
related_units,
|
||||
config,
|
||||
Hooks, UnregisteredHookError,
|
||||
log,
|
||||
|
@ -166,6 +167,16 @@ def ha_joined():
|
|||
'res_ceilometer_agent_central': 'op monitor interval="30s"'
|
||||
}
|
||||
|
||||
amqp_ssl_port = None
|
||||
for rel_id in relation_ids('amqp'):
|
||||
for unit in related_units(rel_id):
|
||||
amqp_ssl_port = relation_get('ssl_port', unit, rel_id)
|
||||
|
||||
if amqp_ssl_port:
|
||||
params = ('params amqp_server_port="%s" op monitor interval="30s"' %
|
||||
(amqp_ssl_port))
|
||||
resource_params['res_ceilometer_agent_central'] = params
|
||||
|
||||
vip_group = []
|
||||
for vip in cluster_config['vip'].split():
|
||||
res_ceilometer_vip = 'ocf:heartbeat:IPaddr2'
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
# OCF_RESKEY_user
|
||||
# OCF_RESKEY_pid
|
||||
# OCF_RESKEY_monitor_binary
|
||||
# OCF_RESKEY_keystone_server_port
|
||||
# OCF_RESKEY_amqp_server_port
|
||||
# OCF_RESKEY_additional_parameters
|
||||
#######################################################################
|
||||
# Initialization:
|
||||
|
@ -36,13 +36,13 @@ OCF_RESKEY_binary_default="ceilometer-agent-central"
|
|||
OCF_RESKEY_config_default="/etc/ceilometer/ceilometer.conf"
|
||||
OCF_RESKEY_user_default="ceilometer"
|
||||
OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid"
|
||||
OCF_RESKEY_keystone_server_port_default="5000"
|
||||
OCF_RESKEY_amqp_server_port_default="5672"
|
||||
|
||||
: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}}
|
||||
: ${OCF_RESKEY_config=${OCF_RESKEY_config_default}}
|
||||
: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}}
|
||||
: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}}
|
||||
: ${OCF_RESKEY_keystone_server_port=${OCF_RESKEY_keystone_server_port_default}}
|
||||
: ${OCF_RESKEY_amqp_server_port=${OCF_RESKEY_amqp_server_port_default}}
|
||||
|
||||
#######################################################################
|
||||
|
||||
|
@ -109,12 +109,12 @@ The pid file to use for this OpenStack Ceilometer Central Agent Service (ceilome
|
|||
<content type="string" default="${OCF_RESKEY_pid_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="keystone_server_port" unique="0" required="0">
|
||||
<parameter name="amqp_server_port" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
The listening port number of the keystone server. Use for monitoring purposes
|
||||
The listening port number of the AMQP server. Use for monitoring purposes
|
||||
</longdesc>
|
||||
<shortdesc lang="en">keystone listening port</shortdesc>
|
||||
<content type="integer" default="${OCF_RESKEY_keystone_server_port_default}" />
|
||||
<shortdesc lang="en">AMQP listening port</shortdesc>
|
||||
<content type="integer" default="${OCF_RESKEY_amqp_server_port_default}" />
|
||||
</parameter>
|
||||
|
||||
|
||||
|
@ -167,7 +167,7 @@ ceilometer_agent_central_validate() {
|
|||
|
||||
check_binary $OCF_RESKEY_binary
|
||||
check_binary netstat
|
||||
ceilometer_agent_central_check_port $OCF_RESKEY_keystone_server_port
|
||||
ceilometer_agent_central_check_port $OCF_RESKEY_amqp_server_port
|
||||
|
||||
# A config file on shared storage that is not available
|
||||
# during probes is OK.
|
||||
|
@ -213,7 +213,7 @@ ceilometer_agent_central_status() {
|
|||
ceilometer_agent_central_monitor() {
|
||||
local rc
|
||||
local pid
|
||||
local scheduler_keystone_check
|
||||
local scheduler_amqp_check
|
||||
|
||||
ceilometer_agent_central_status
|
||||
rc=$?
|
||||
|
@ -225,13 +225,13 @@ ceilometer_agent_central_monitor() {
|
|||
|
||||
# Check the connections according to the PID.
|
||||
# We are sure to hit the scheduler process and not other Cinder process with the same connection behavior (for example cinder-api)
|
||||
pid=`cat $OCF_RESKEY_pid`
|
||||
scheduler_keystone_check=`netstat -punt | grep -s "$OCF_RESKEY_keystone_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"`
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
ocf_log err "Central Agent is not connected to the Keystone server : $rc"
|
||||
pid=`cat $OCF_RESKEY_pid`
|
||||
scheduler_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"`
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
ocf_log err "Central Agent is not connected to the AMQP server : $rc"
|
||||
return $OCF_NOT_RUNNING
|
||||
fi
|
||||
fi
|
||||
|
||||
ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) monitor succeeded"
|
||||
return $OCF_SUCCESS
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[nosetests]
|
||||
verbosity=1
|
||||
verbosity=2
|
||||
with-coverage=1
|
||||
cover-erase=1
|
||||
cover-package=hooks
|
||||
|
|
|
@ -228,6 +228,76 @@ class CeilometerHooksTest(CharmTestCase):
|
|||
hooks.hooks.execute(['hooks/ha-relation-joined'])
|
||||
self.assertEquals(self.relation_set.call_count, 2)
|
||||
|
||||
exp_resources = {
|
||||
'res_ceilometer_haproxy': 'lsb:haproxy',
|
||||
'res_ceilometer_agent_central': ('ocf:openstack:'
|
||||
'ceilometer-agent-central'),
|
||||
'res_ceilometer_eth0_vip': 'ocf:heartbeat:IPaddr2'
|
||||
}
|
||||
exp_resource_params = {
|
||||
'res_ceilometer_haproxy': 'op monitor interval="5s"',
|
||||
'res_ceilometer_agent_central': 'op monitor interval="30s"',
|
||||
'res_ceilometer_eth0_vip': ('params ip="10.0.5.100" '
|
||||
'cidr_netmask="255.255.255.10" '
|
||||
'nic="eth0"')
|
||||
}
|
||||
exp_clones = {'cl_ceilometer_haproxy': 'res_ceilometer_haproxy'}
|
||||
call1 = call(groups={'grp_ceilometer_vips': 'res_ceilometer_eth0_vip'})
|
||||
call2 = call(init_services={'res_ceilometer_haproxy': 'haproxy'},
|
||||
corosync_bindiface='bnd0',
|
||||
corosync_mcastport=5802,
|
||||
resources=exp_resources,
|
||||
resource_params=exp_resource_params,
|
||||
clones=exp_clones)
|
||||
self.relation_set.assert_has_calls([call1, call2], any_order=False)
|
||||
|
||||
@patch('charmhelpers.core.hookenv.config')
|
||||
@patch.object(hooks, 'get_netmask_for_address')
|
||||
@patch.object(hooks, 'get_hacluster_config')
|
||||
@patch.object(hooks, 'get_iface_for_address')
|
||||
@patch.object(hooks, 'relation_ids')
|
||||
@patch.object(hooks, 'related_units')
|
||||
@patch.object(hooks, 'relation_get')
|
||||
def test_ha_joined_ssl(self, mock_rel_get, mock_rel_units, mock_rel_ids,
|
||||
mock_iface, mock_cluster_config, mock_netmask,
|
||||
mock_config):
|
||||
mock_rel_ids.return_value = 'amqp:0'
|
||||
mock_rel_units.return_value = 'rabbitmq-server/0'
|
||||
mock_rel_get.return_value = '5671'
|
||||
|
||||
mock_iface.return_value = 'eth0'
|
||||
mock_netmask.return_value = '255.255.255.10'
|
||||
mock_cluster_config.return_value = {'vip': '10.0.5.100',
|
||||
'ha-bindiface': 'bnd0',
|
||||
'ha-mcastport': 5802}
|
||||
|
||||
hooks.hooks.execute(['hooks/ha-relation-joined'])
|
||||
self.assertEquals(self.relation_set.call_count, 2)
|
||||
|
||||
exp_resources = {
|
||||
'res_ceilometer_haproxy': 'lsb:haproxy',
|
||||
'res_ceilometer_agent_central': ('ocf:openstack:'
|
||||
'ceilometer-agent-central'),
|
||||
'res_ceilometer_eth0_vip': 'ocf:heartbeat:IPaddr2'
|
||||
}
|
||||
exp_resource_params = {
|
||||
'res_ceilometer_haproxy': 'op monitor interval="5s"',
|
||||
'res_ceilometer_agent_central': ('params amqp_server_port="5671" '
|
||||
'op monitor interval="30s"'),
|
||||
'res_ceilometer_eth0_vip': ('params ip="10.0.5.100" '
|
||||
'cidr_netmask="255.255.255.10" '
|
||||
'nic="eth0"')
|
||||
}
|
||||
exp_clones = {'cl_ceilometer_haproxy': 'res_ceilometer_haproxy'}
|
||||
call1 = call(groups={'grp_ceilometer_vips': 'res_ceilometer_eth0_vip'})
|
||||
call2 = call(init_services={'res_ceilometer_haproxy': 'haproxy'},
|
||||
corosync_bindiface='bnd0',
|
||||
corosync_mcastport=5802,
|
||||
resources=exp_resources,
|
||||
resource_params=exp_resource_params,
|
||||
clones=exp_clones)
|
||||
self.relation_set.assert_has_calls([call1, call2], any_order=False)
|
||||
|
||||
@patch('charmhelpers.core.hookenv.config')
|
||||
@patch.object(hooks, 'keystone_joined')
|
||||
def test_ha_changed_not_clustered(self, mock_keystone_joined, mock_config):
|
||||
|
|
Loading…
Reference in New Issue