def register_configs(): ''' Register config files with their respective contexts. ''' release = os_release('openstack-dashboard') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) confs = [LOCAL_SETTINGS, HAPROXY_CONF, PORTS_CONF] if CompareOpenStackReleases(release) >= 'mitaka': configs.register(KEYSTONEV3_POLICY, CONFIG_FILES[KEYSTONEV3_POLICY]['hook_contexts']) CONFIG_FILES[LOCAL_SETTINGS]['hook_contexts'].append( context.SharedDBContext( user=config('database-user'), database=config('database'), ssl_dir=DASHBOARD_CONF_DIR)) for conf in confs: configs.register(conf, CONFIG_FILES[conf]['hook_contexts']) # From Trusty on use Apache 2.4 configs.register(APACHE_24_DEFAULT, CONFIG_FILES[APACHE_24_DEFAULT]['hook_contexts']) configs.register(APACHE_24_CONF, CONFIG_FILES[APACHE_24_CONF]['hook_contexts']) configs.register(APACHE_24_SSL, CONFIG_FILES[APACHE_24_SSL]['hook_contexts']) if os.path.exists(os.path.dirname(ROUTER_SETTING)): configs.register(ROUTER_SETTING, CONFIG_FILES[ROUTER_SETTING]['hook_contexts']) return configs
def register_configs(): ''' Returns an OSTemplateRenderer object with all required configs registered. ''' release = os_release('nova-common') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) if relation_ids('ceph'): # Add charm ceph configuration to resources and # ensure directory actually exists mkdir(os.path.dirname(ceph_config_file())) mkdir(os.path.dirname(CEPH_CONF)) # Install ceph config as an alternative for co-location with # ceph and ceph-osd charms - nova-compute ceph.conf will be # lower priority that both of these but thats OK if not os.path.exists(ceph_config_file()): # touch file for pre-templated generation open(ceph_config_file(), 'w').close() install_alternative(os.path.basename(CEPH_CONF), CEPH_CONF, ceph_config_file()) for cfg, d in resource_map().items(): configs.register(cfg, d['contexts']) return configs
def register_configs(): release = get_os_codename_package('swift', fatal=False) or 'essex' configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) configs.register('/etc/swift/swift.conf', [SwiftStorageContext()]) configs.register('/etc/rsync-juju.d/050-swift-storage.conf', [RsyncContext(), SwiftStorageServerContext()]) # NOTE: add VaultKVContext so interface status can be assessed for server in ['account', 'object', 'container']: contexts = [SwiftStorageServerContext(), context.BindHostContext(), context.WorkerConfigContext()] # if vault deps are not installed it is not yet possible to check the # vault context status since it requires the hvac dependency. if vaultlocker_installed(): contexts.append(vaultlocker.VaultKVContext( vaultlocker.VAULTLOCKER_BACKEND)) configs.register('/etc/swift/%s-server.conf' % server, contexts) if enable_replication(): configs.register( '/etc/swift/{svc}-server/{svc}-server-replicator.conf'.format( svc=server), contexts) return configs
def register_configs(): ''' Register config files with their respective contexts. ''' release = get_os_codename_install_source(config('openstack-origin')) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) plugin = remap_plugin(config('plugin')) name = networking_name() if plugin == 'ovs': # NOTE: deal with switch to ML2 plugin for >= icehouse drop_config = NEUTRON_ML2_PLUGIN_CONF if release >= 'icehouse': drop_config = NEUTRON_OVS_PLUGIN_CONF if drop_config in CONFIG_FILES[name][plugin]: CONFIG_FILES[name][plugin].pop(drop_config) if is_relation_made('amqp-nova'): amqp_nova_ctxt = context.AMQPContext( ssl_dir=NOVA_CONF_DIR, rel_name='amqp-nova', relation_prefix='nova') else: amqp_nova_ctxt = context.AMQPContext( ssl_dir=NOVA_CONF_DIR, rel_name='amqp') CONFIG_FILES[name][plugin][NOVA_CONF][ 'hook_contexts'].append(amqp_nova_ctxt) for conf in CONFIG_FILES[name][plugin]: configs.register(conf, CONFIG_FILES[name][plugin][conf]['hook_contexts']) return configs
def register_configs(): """Register config files with their respective contexts. Registration of some configs may not be required depending on existing of certain relations. """ # if called without anything installed (eg during install hook) # just default to earliest supported release. configs dont get touched # till post-install, anyway. release = get_os_codename_package('swift-proxy', fatal=False) or 'essex' configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) confs = [SWIFT_CONF, SWIFT_PROXY_CONF, HAPROXY_CONF, MEMCACHED_CONF] for conf in confs: configs.register(conf, CONFIG_FILES[conf]['hook_contexts']) if os.path.exists('/etc/apache2/conf-available'): configs.register(SWIFT_RINGS_24_CONF, CONFIG_FILES[SWIFT_RINGS_24_CONF]['hook_contexts']) configs.register(APACHE_SITE_24_CONF, CONFIG_FILES[APACHE_SITE_24_CONF]['hook_contexts']) else: configs.register(SWIFT_RINGS_CONF, CONFIG_FILES[SWIFT_RINGS_CONF]['hook_contexts']) configs.register(APACHE_SITE_CONF, CONFIG_FILES[APACHE_SITE_CONF]['hook_contexts']) return configs
def register_configs(release=None): release = release or os_release('neutron-common', base='icehouse') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resource_map().items(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release=None): resources = METADATA_RESOURCE_MAP release = os_release('neutron-common') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resources.iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(): """ Register config files with their respective contexts. Regstration of some configs may not be required depending on existing of certain relations. """ # if called without anything installed (eg during install hook) # just default to earliest supported release. configs dont get touched # till post-install, anyway. release = get_os_codename_package('ceilometer-common', fatal=False) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) if not release: log("Not installed yet, no way to determine the OS release. " "Skipping register configs", DEBUG) return configs if CompareOpenStackReleases(release) >= 'queens': for conf in QUEENS_CONFIG_FILES: configs.register(conf, QUEENS_CONFIG_FILES[conf]['hook_contexts']) configs.register(PIPELINE_CONF, [RemoteSinksContext()]) else: for conf in (CEILOMETER_CONF, HAPROXY_CONF): configs.register(conf, CONFIG_FILES[conf]['hook_contexts']) if init_is_systemd(): configs.register( CEILOMETER_API_SYSTEMD_CONF, CONFIG_FILES[CEILOMETER_API_SYSTEMD_CONF]['hook_contexts'] ) if os.path.exists('/etc/apache2/conf-available'): configs.register( HTTPS_APACHE_24_CONF, CONFIG_FILES[HTTPS_APACHE_24_CONF]['hook_contexts'] ) else: configs.register( HTTPS_APACHE_CONF, CONFIG_FILES[HTTPS_APACHE_CONF]['hook_contexts'] ) if enable_memcache(release=release): configs.register(MEMCACHED_CONF, [context.MemcacheContext()]) if run_in_apache(): wsgi_script = "/usr/share/ceilometer/app.wsgi" configs.register( WSGI_CEILOMETER_API_CONF, [context.WSGIWorkerConfigContext(name="ceilometer", script=wsgi_script), CeilometerContext(), HAProxyContext()] ) if CompareOpenStackReleases(release) >= 'mitaka': configs.register(PIPELINE_CONF, [RemoteSinksContext()]) return configs
def register_configs(): ''' Register config files with their respective contexts. ''' release = get_os_codename_install_source(config('openstack-origin')) plugin = config('plugin') config_files = resolve_config_files(plugin, release) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for conf in config_files[plugin]: configs.register(conf, config_files[plugin][conf]['hook_contexts']) return configs
def register_configs(): ''' Returns an OSTemplateRenderer object with all required configs registered. ''' release = config('openstack-release') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, d in resource_map().iteritems(): configs.register(cfg, d['contexts']) return configs
def test_render_template_by_basename_first(self): '''It loads a template by basename of config file first''' path = os.path.dirname(__file__) renderer = templating.OSConfigRenderer(templates_dir=path, openstack_release='folsom') renderer._get_template = MagicMock() renderer.register('/etc/nova/nova.conf', contexts=[]) renderer.render('/etc/nova/nova.conf') self.assertEquals(1, len(renderer._get_template.call_args_list)) self.assertEquals([call('nova.conf')], renderer._get_template.call_args_list)
def test_render_template_registered_but_not_found(self): '''It loads a template by basename of config file first''' path = os.path.dirname(__file__) renderer = templating.OSConfigRenderer(templates_dir=path, openstack_release='folsom') e = TemplateNotFound('') renderer._get_template = MagicMock() renderer._get_template.side_effect = e renderer.register('/etc/nova/nova.conf', contexts=[]) self.assertRaises(TemplateNotFound, renderer.render, '/etc/nova/nova.conf')
def register_configs(): configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release='mitaka') confs = [CLOUDKITTY_CONF, HAPROXY_CONF] for conf in confs: configs.register(conf, CONFIG_FILES[conf]['contexts']) configs.register(HTTPS_APACHE_CONF, CONFIG_FILES[HTTPS_APACHE_CONF]['contexts']) return configs
def register_configs(release=None): ''' Returns an object of the Openstack Tempating Class which contains the the context required for all templates of this charm. ''' release = release or os_release('nova-compute', base='kilo') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resource_map().iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release=None): resources = OrderedDict([(KEYSTONE_CONFIG, { 'services': ['keystone'], 'contexts': [cplane_context.CplaneKeystoneContext(set_oracle_host(), DB_SERVICE)] })]) release = os_release('keystone') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resources.iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release='icehouse'): configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) CONFIGS = resource_map() pkg = 'radosgw' if not filter_installed_packages([pkg]) and cmp_pkgrevno(pkg, '0.55') >= 0: # Add keystone configuration if found CONFIGS[CEPH_CONF]['contexts'].append( ceph_radosgw_context.IdentityServiceContext()) for cfg, rscs in CONFIGS.items(): configs.register(cfg, rscs['contexts']) return configs
def test_initializing_a_render_ensures_jinja2_present(self, apt): '''Creatinga new renderer object installs jinja2 if needed''' # temp. undo the patching from setUp templating.FileSystemLoader = None templating.ChoiceLoader = None templating.Environment = None templating.OSConfigRenderer(templates_dir='/tmp', openstack_release='foo') templating.FileSystemLoader = MockFSLoader templating.ChoiceLoader = MockChoiceLoader templating.Environment = MagicMock apt.assert_called_with('python3-jinja2')
def register_configs(release=None): resources = OrderedDict([(ML2_CONFIG, { 'services': ['neutron-server'], 'contexts': [ cplane_context.CplaneMl2Context(), ] })]) release = os_release('neutron-common') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resources.iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release=None): resources = OrderedDict([ ('/etc/neutron/plugins/ml2/ml2_conf.ini', { 'services': [], 'contexts': [], }) ]) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release='liberty') for cfg, rscs in resources.iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release=None): resources = OrderedDict([(HAPROXY_CONF, { 'services': ['haproxy'], 'contexts': [ context.HAProxyContext(singlenode_mode=True), cplane_context.HAProxyContext() ], })]) release = config('openstack-version') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resources.iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release=None): ''' Returns an object of the Openstack Tempating Class which contains the the context required for all templates of this charm. ''' release = release or os_release('neutron-common', base='kilo') if release < 'queens': raise ValueError('OpenStack %s release not supported' % release) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resource_map().iteritems(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(release=None): """Register config files with their respective contexts. Regstration of some configs may not be required depending on existing of certain relations. """ # if called without anything installed (eg during install hook) # just default to earliest supported release. configs dont get touched # till post-install, anyway. release = release or os_release('cinder-common', base='icehouse') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for cfg, rscs in resource_map().items(): configs.register(cfg, rscs['contexts']) return configs
def register_configs(): release = get_os_codename_package('python-swift', fatal=False) or 'essex' configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) configs.register('/etc/swift/swift.conf', [SwiftStorageContext()]) configs.register('/etc/rsync-juju.d/050-swift-storage.conf', [RsyncContext(), SwiftStorageServerContext()]) for server in ['account', 'object', 'container']: configs.register('/etc/swift/%s-server.conf' % server, [SwiftStorageServerContext(), context.BindHostContext(), context.WorkerConfigContext()]), return configs
def setUp(self): path = os.path.dirname(__file__) self.loader = FakeLoader() self.context = FakeContextGenerator() self.addCleanup(patch.object(templating, 'apt_install').start().stop()) self.addCleanup(patch.object(templating, 'log').start().stop()) templating.FileSystemLoader = MockFSLoader templating.ChoiceLoader = MockChoiceLoader templating.Environment = MagicMock self.renderer = templating.OSConfigRenderer(templates_dir=path, openstack_release='folsom')
def register_configs(): # Register config files with their respective contexts. # Regstration of some configs may not be required depending on # existing of certain relations. release = os_release('glance-common') cmp_release = CompareOpenStackReleases(release) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) confs = [GLANCE_REGISTRY_CONF, GLANCE_API_CONF, HAPROXY_CONF] if relation_ids('ceph'): mkdir(os.path.dirname(ceph_config_file())) mkdir(os.path.dirname(CEPH_CONF)) # Install ceph config as an alternative for co-location with # ceph and ceph-osd charms - glance ceph.conf will be # lower priority that both of these but thats OK if not os.path.exists(ceph_config_file()): # touch file for pre-templated generation open(ceph_config_file(), 'w').close() install_alternative(os.path.basename(CEPH_CONF), CEPH_CONF, ceph_config_file()) confs.append(ceph_config_file()) for conf in confs: if cmp_release >= 'stein' and conf == GLANCE_REGISTRY_CONF: continue configs.register(conf, CONFIG_FILES[conf]['hook_contexts']) if os.path.exists('/etc/apache2/conf-available'): configs.register(HTTPS_APACHE_24_CONF, CONFIG_FILES[HTTPS_APACHE_24_CONF]['hook_contexts']) else: configs.register(HTTPS_APACHE_CONF, CONFIG_FILES[HTTPS_APACHE_CONF]['hook_contexts']) if enable_memcache(release=release): configs.register(MEMCACHED_CONF, [context.MemcacheContext()]) if cmp_release >= 'mitaka': configs.register(GLANCE_SWIFT_CONF, CONFIG_FILES[GLANCE_SWIFT_CONF]['hook_contexts']) if cmp_release >= 'ussuri': configs.register(GLANCE_POLICY_YAML, CONFIG_FILES[GLANCE_POLICY_YAML]['hook_contexts']) return configs
def setUp(self): path = os.path.dirname(__file__) self.loader = FakeLoader() self.context = FakeContextGenerator() self.addCleanup(patch.object(templating, 'apt_install').start().stop()) self.addCleanup(patch.object(templating, 'log').start().stop()) templating.FileSystemLoader = MockFSLoader templating.ChoiceLoader = MockChoiceLoader self.config_file = '/etc/confd/extensible.d/drop-in.conf' self.config_template = 'use: {{ fake_key }}' self.renderer = templating.OSConfigRenderer(templates_dir=path, openstack_release='folsom')
def register_configs(release=None): ''' Register config files with their respective contexts. :param release: string containing the openstack release to use over automatic detection based on installed pkgs. ''' release = release or os_release('neutron-common') plugin = config('plugin') config_files = resolve_config_files(plugin, release) configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) for conf in config_files[plugin]: configs.register(conf, config_files[plugin][conf]['hook_contexts']) return configs
def test_render_template_by_munged_full_path_last(self): '''It loads a template by full path of config file second''' path = os.path.dirname(__file__) renderer = templating.OSConfigRenderer(templates_dir=path, openstack_release='folsom') tmp = MagicMock() tmp.render = MagicMock() e = TemplateNotFound('') renderer._get_template = MagicMock() renderer._get_template.side_effect = [e, tmp] renderer.register('/etc/nova/nova.conf', contexts=[]) renderer.render('/etc/nova/nova.conf') self.assertEquals(2, len(renderer._get_template.call_args_list)) self.assertEquals( [call('nova.conf'), call('etc_nova_nova.conf')], renderer._get_template.call_args_list)
def register_configs(): release = os_release('heat-common') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) confs = [HEAT_CONF, HEAT_API_PASTE, HAPROXY_CONF, ADMIN_OPENRC] for conf in confs: configs.register(conf, CONFIG_FILES[conf]['contexts']) if os.path.exists('/etc/apache2/conf-available'): configs.register(HTTPS_APACHE_24_CONF, CONFIG_FILES[HTTPS_APACHE_24_CONF]['contexts']) else: configs.register(HTTPS_APACHE_CONF, CONFIG_FILES[HTTPS_APACHE_CONF]['contexts']) return configs
def register_configs(): ''' Register config files with their respective contexts. ''' release = os_release('openstack-dashboard') configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, openstack_release=release) confs = [LOCAL_SETTINGS, HAPROXY_CONF, PORTS_CONF] if release >= 'mitaka': configs.register(KEYSTONEV3_POLICY, CONFIG_FILES[KEYSTONEV3_POLICY]['hook_contexts']) CONFIG_FILES[LOCAL_SETTINGS]['hook_contexts'].append( context.SharedDBContext(user=config('database-user'), database=config('database'), ssl_dir=DASHBOARD_CONF_DIR)) for conf in confs: configs.register(conf, CONFIG_FILES[conf]['hook_contexts']) if os.path.isdir(APACHE_CONF_DIR) and cmp_pkgrevno('apache2', '2.4') >= 0: for conf in [APACHE_CONF, APACHE_SSL, APACHE_DEFAULT]: if os.path.isfile(conf): log('Removing old config %s' % (conf)) os.remove(conf) configs.register(APACHE_24_DEFAULT, CONFIG_FILES[APACHE_24_DEFAULT]['hook_contexts']) configs.register(APACHE_24_CONF, CONFIG_FILES[APACHE_24_CONF]['hook_contexts']) configs.register(APACHE_24_SSL, CONFIG_FILES[APACHE_24_SSL]['hook_contexts']) else: configs.register(APACHE_DEFAULT, CONFIG_FILES[APACHE_DEFAULT]['hook_contexts']) configs.register(APACHE_CONF, CONFIG_FILES[APACHE_CONF]['hook_contexts']) configs.register(APACHE_SSL, CONFIG_FILES[APACHE_SSL]['hook_contexts']) if os.path.exists(os.path.dirname(ROUTER_SETTING)): configs.register(ROUTER_SETTING, CONFIG_FILES[ROUTER_SETTING]['hook_contexts']) return configs