From d8c27a360054bfce1c1aec9858daccff8d258d85 Mon Sep 17 00:00:00 2001 From: Liam Young Date: Thu, 28 Jan 2016 16:24:51 +0000 Subject: [PATCH] Updated charm class --- lib/charm/openstack/charm.py | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/lib/charm/openstack/charm.py b/lib/charm/openstack/charm.py index 1840626..98a50da 100644 --- a/lib/charm/openstack/charm.py +++ b/lib/charm/openstack/charm.py @@ -1,5 +1,6 @@ """Classes to support writing re-usable charms in the reactive framework""" +import subprocess import os from charmhelpers.contrib.openstack.utils import ( configure_installation_source, @@ -17,6 +18,7 @@ from contextlib import contextmanager from collections import OrderedDict from charmhelpers.contrib.openstack.templating import get_loader from charmhelpers.core.templating import render +from charmhelpers.core.hookenv import leader_get, leader_set class OpenStackCharm(object): @@ -41,11 +43,16 @@ class OpenStackCharm(object): """Default service for the charm""" restart_map = {} + sync_cmd = [] + services = [] + adapters_class = None - def __init__(self): + def __init__(self, interfaces=None): self.config = config() # XXX It's not always liberty! self.release = 'liberty' + if interfaces and self.adapters_class: + self.adapter_instance = self.adapters_class(interfaces) def install(self): """ @@ -106,21 +113,30 @@ class OpenStackCharm(object): for service_name in services_list: service_restart(service_name) - def render_all_configs(self, adapters): - self.render_configs(adapters, self.restart_map.keys()) + def render_all_configs(self): + self.render_configs(self.adapters, self.restart_map.keys()) - def render_configs(self, adapters, configs): + def render_configs(self, configs): with self.restart_on_change(): - for conf in self.restart_map.keys(): + for conf in configs: render(source=os.path.basename(conf), template_loader=get_loader('templates/', self.release), target=conf, - context=adapters) + context=self.adapter_instance) def restart_all(self): - for svc in self.restart_map.keys(): + for svc in self.services: service_restart(svc) + def db_sync(self): + sync_done = leader_get(attribute='db-sync-done') + if not sync_done: + subprocess.check_call(self.sync_cmd) + leader_set({'db-sync-done': True}) + # Restart services immediatly after db sync as + # render_domain_config needs a working system + self.restart_all() + class OpenStackCharmFactory(object): @@ -136,12 +152,12 @@ class OpenStackCharmFactory(object): """ @classmethod - def charm(cls, release=None): + def charm(cls, release=None, interfaces=None): """ Get an instance of the right charm for the configured OpenStack series """ if release and release in cls.releases: - return cls.releases[release]() + return cls.releases[release](interfaces=interfaces) else: - return cls.releases[cls.first_release]() + return cls.releases[cls.first_release](interfaces=interfaces)