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:
Billy Olsen 2014-12-17 16:22:18 -07:00
parent b598b97fab
commit 8c0fe96cb9
4 changed files with 97 additions and 16 deletions

View File

@ -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'

View File

@ -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

View File

@ -1,5 +1,5 @@
[nosetests]
verbosity=1
verbosity=2
with-coverage=1
cover-erase=1
cover-package=hooks

View File

@ -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):