コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
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
コード例 #11
0
 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)
コード例 #12
0
 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')
コード例 #13
0
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
コード例 #14
0
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
コード例 #15
0
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
コード例 #16
0
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
コード例 #17
0
 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')
コード例 #18
0
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
コード例 #19
0
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
コード例 #20
0
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
コード例 #21
0
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
コード例 #22
0
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
コード例 #23
0
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
コード例 #24
0
    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')
コード例 #25
0
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
コード例 #26
0
    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')
コード例 #27
0
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
コード例 #28
0
 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)
コード例 #29
0
ファイル: heat_utils.py プロジェクト: ivoks/charm-heat
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
コード例 #30
0
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