summaryrefslogtreecommitdiffstats
path: root/charms/trusty/ceilometer/lib/ceilometer_contexts.py
diff options
context:
space:
mode:
Diffstat (limited to 'charms/trusty/ceilometer/lib/ceilometer_contexts.py')
-rw-r--r--charms/trusty/ceilometer/lib/ceilometer_contexts.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/charms/trusty/ceilometer/lib/ceilometer_contexts.py b/charms/trusty/ceilometer/lib/ceilometer_contexts.py
new file mode 100644
index 0000000..72aea39
--- /dev/null
+++ b/charms/trusty/ceilometer/lib/ceilometer_contexts.py
@@ -0,0 +1,122 @@
+from charmhelpers.core.hookenv import (
+ relation_ids,
+ relation_get,
+ related_units,
+ config
+)
+
+from charmhelpers.contrib.openstack.utils import os_release
+
+from charmhelpers.contrib.openstack.context import (
+ OSContextGenerator,
+ context_complete,
+ ApacheSSLContext as SSLContext,
+)
+
+from charmhelpers.contrib.hahelpers.cluster import (
+ determine_apache_port,
+ determine_api_port
+)
+
+CEILOMETER_DB = 'ceilometer'
+
+
+class LoggingConfigContext(OSContextGenerator):
+ def __call__(self):
+ return {'debug': config('debug'), 'verbose': config('verbose')}
+
+
+class MongoDBContext(OSContextGenerator):
+ interfaces = ['mongodb']
+
+ def __call__(self):
+ mongo_servers = []
+ replset = None
+ use_replset = os_release('ceilometer-api') >= 'icehouse'
+
+ for relid in relation_ids('shared-db'):
+ rel_units = related_units(relid)
+ use_replset = use_replset and (len(rel_units) > 1)
+
+ for unit in rel_units:
+ host = relation_get('hostname', unit, relid)
+ port = relation_get('port', unit, relid)
+
+ conf = {
+ "db_host": host,
+ "db_port": port,
+ "db_name": CEILOMETER_DB
+ }
+
+ if not context_complete(conf):
+ continue
+
+ if not use_replset:
+ return conf
+
+ if replset is None:
+ replset = relation_get('replset', unit, relid)
+
+ mongo_servers.append('{}:{}'.format(host, port))
+
+ if mongo_servers:
+ return {
+ 'db_mongo_servers': ','.join(mongo_servers),
+ 'db_name': CEILOMETER_DB,
+ 'db_replset': replset
+ }
+
+ return {}
+
+
+CEILOMETER_PORT = 8777
+
+
+class CeilometerContext(OSContextGenerator):
+ def __call__(self):
+ # Lazy-import to avoid a circular dependency in the imports
+ from ceilometer_utils import get_shared_secret
+
+ ctxt = {
+ 'api_workers': config('api-workers'),
+ 'port': CEILOMETER_PORT,
+ 'metering_secret': get_shared_secret()
+ }
+ return ctxt
+
+
+class CeilometerServiceContext(OSContextGenerator):
+ interfaces = ['ceilometer-service']
+
+ def __call__(self):
+ for relid in relation_ids('ceilometer-service'):
+ for unit in related_units(relid):
+ conf = relation_get(unit=unit, rid=relid)
+ if context_complete(conf):
+ return conf
+ return {}
+
+
+class HAProxyContext(OSContextGenerator):
+ interfaces = ['ceilometer-haproxy']
+
+ def __call__(self):
+ '''Extends the main charmhelpers HAProxyContext with a port mapping
+ specific to this charm.
+ '''
+ haproxy_port = CEILOMETER_PORT
+ api_port = determine_api_port(CEILOMETER_PORT, singlenode_mode=True)
+ apache_port = determine_apache_port(CEILOMETER_PORT,
+ singlenode_mode=True)
+
+ ctxt = {
+ 'service_ports': {'ceilometer_api': [haproxy_port, apache_port]},
+ 'port': api_port
+ }
+ return ctxt
+
+
+class ApacheSSLContext(SSLContext):
+
+ external_ports = [CEILOMETER_PORT]
+ service_namespace = "ceilometer"