140 lines
5.4 KiB
Python
Executable File
140 lines
5.4 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import sys
|
|
import time
|
|
import os
|
|
import utils
|
|
import ceilometer_utils
|
|
|
|
def install():
|
|
utils.configure_source()
|
|
packages = ['python-ceilometer', 'ceilometer-common', 'ceilometer-agent-central', 'ceilometer-collector', 'ceilometer-api']
|
|
utils.install(*packages)
|
|
|
|
def amqp_joined():
|
|
utils.relation_set(username=ceilometer_utils.RABBIT_USER, vhost=ceilometer_utils.RABBIT_VHOST)
|
|
|
|
def get_rabbit_conf():
|
|
for relid in utils.relation_ids('amqp'):
|
|
for unit in utils.relation_list(relid):
|
|
conf = {
|
|
"rabbit_host": utils.relation_get('private-address',
|
|
unit, relid),
|
|
"rabbit_virtual_host": ceilometer_utils.RABBIT_VHOST,
|
|
"rabbit_userid": ceilometer_utils.RABBIT_USER,
|
|
"rabbit_password": utils.relation_get('password',
|
|
unit, relid)
|
|
}
|
|
if None not in conf.itervalues():
|
|
return conf
|
|
return None
|
|
|
|
def get_db_conf():
|
|
for relid in utils.relation_ids('shared-db'):
|
|
for unit in utils.relation_list(relid):
|
|
conf = {
|
|
"db_host": utils.relation_get('hostname', unit, relid),
|
|
"db_port": utils.relation_get('port', unit, relid),
|
|
"db_name": ceilometer_utils.CEILOMETER_DB
|
|
}
|
|
if None not in conf.itervalues():
|
|
return conf
|
|
return None
|
|
|
|
def get_keystone_conf():
|
|
for relid in utils.relation_ids('identity-service'):
|
|
for unit in utils.relation_list(relid):
|
|
keystone_username = utils.relation_get('service_username', unit, relid)
|
|
keystone_port = utils.relation_get('service_port', unit, relid)
|
|
keystone_host = utils.relation_get('service_host', unit, relid)
|
|
keystone_password = utils.relation_get('service_password', unit, relid)
|
|
keystone_tenant = utils.relation_get('service_tenant', unit, relid)
|
|
|
|
conf = {
|
|
"keystone_os_username": keystone_username,
|
|
"keystone_os_password": keystone_password,
|
|
"keystone_os_tenant": keystone_tenant,
|
|
"keystone_host": keystone_host,
|
|
"keystone_port": keystone_port
|
|
}
|
|
if None not in conf.itervalues():
|
|
return conf
|
|
return None
|
|
|
|
def render_ceilometer_conf():
|
|
context = get_rabbit_conf()
|
|
contextdb = get_db_conf()
|
|
contextkeystone = get_keystone_conf()
|
|
|
|
if (context and contextdb and contextkeystone and os.path.exists(ceilometer_utils.CEILOMETER_CONF)):
|
|
# merge contexts
|
|
context.update(contextkeystone)
|
|
context['metering_secret'] = ceilometer_utils.get_shared_secret()
|
|
context['service_port'] = utils.config_get('service-port')
|
|
context['db_connection'] = "mongodb://"+contextdb["db_host"]+":"+contextdb["db_port"]+"/"+contextdb["db_name"]
|
|
|
|
with open(ceilometer_utils.CEILOMETER_CONF, "w") as conf:
|
|
conf.write(utils.render_template(os.path.basename(ceilometer_utils.CEILOMETER_CONF), context))
|
|
|
|
return True
|
|
return False
|
|
|
|
def amqp_changed():
|
|
if render_ceilometer_conf():
|
|
utils.restart(*ceilometer_utils.CEILOMETER_SERVICES)
|
|
|
|
def db_joined():
|
|
utils.relation_set(ceilometer_database=ceilometer_utils.CEILOMETER_DB)
|
|
|
|
def db_changed():
|
|
if render_ceilometer_conf():
|
|
utils.restart(*ceilometer_utils.CEILOMETER_SERVICES)
|
|
|
|
def config_changed():
|
|
utils.update_ports()
|
|
render_ceilometer_conf()
|
|
|
|
def keystone_joined():
|
|
port = utils.config_get("service-port")
|
|
url = "http://"+utils.get_host_ip()+":"+port
|
|
region = utils.config_get("region")
|
|
utils.relation_set(service=ceilometer_utils.CEILOMETER_SERVICE, public_url=url, admin_url=url, internal_url=url, region=region)
|
|
|
|
def keystone_changed():
|
|
if render_ceilometer_conf():
|
|
utils.restart(*ceilometer_utils.CEILOMETER_SERVICES)
|
|
|
|
def ceilometer_joined():
|
|
pass
|
|
|
|
def ceilometer_changed():
|
|
# check if we have rabbit and keystone already set
|
|
context = get_rabbit_conf()
|
|
contextkeystone = get_keystone_conf()
|
|
|
|
if context and contextkeystone:
|
|
context.update(contextkeystone)
|
|
context['metering_secret'] = ceilometer_utils.get_shared_secret()
|
|
|
|
utils.relation_set(metering_secret=context['metering_secret'])
|
|
utils.relation_set(rabbit_host=context['rabbit_host'], rabbit_virtual_host=context['rabbit_virtual_host'], rabbit_userid=context['rabbit_userid'], rabbit_password=context['rabbit_password'])
|
|
utils.relation_set(keystone_os_username=context['keystone_os_username'], keystone_os_password=context['keystone_os_password'], keystone_os_tenant=context['keystone_os_tenant'],
|
|
keystone_host=context['keystone_host'], keystone_port=context['keystone_port'])
|
|
else:
|
|
# still waiting
|
|
utils.juju_log("INFO", "ceilometer: rabbit and keystone credentials not yet received from peer.")
|
|
|
|
utils.do_hooks({
|
|
"install": install,
|
|
"amqp-relation-joined": amqp_joined,
|
|
"amqp-relation-changed": amqp_changed,
|
|
"shared-db-relation-joined": db_joined,
|
|
"shared-db-relation-changed": db_changed,
|
|
"config-changed": config_changed,
|
|
"identity-service-relation-joined": keystone_joined,
|
|
"identity-service-relation-changed": keystone_changed,
|
|
"ceilometer-service-relation-joined": ceilometer_joined,
|
|
"ceilometer-service-relation-changed": ceilometer_changed
|
|
})
|
|
sys.exit(0)
|