Frode Nordahl 4f7dba3da8
Extend configurable variables and retrieve config data
Gate ``available`` state on remote end signalling availability.

Depends-On: I9eb5f8a6039b74288a395a584f844507448cdc23
Change-Id: I44a23549e4830d89ba3182250c40dfe395767fb0
2019-09-30 08:21:20 +02:00

3.9 KiB

Overview

This interface is used for a charm to send configuration information to the neutron-api principle charm and request a restart of a service managed by that charm.

Usage

Flags and States

The interface provides the {relation-name}.connected and {relation_name}.available flags and states.

neutron_config_data

The neutron_config_data property allows the charm author to introspect a subset of the principle charm context values prior to applying the context provided by this relation.

This enables the subordinate charm to make informed decisions about how it should configure Neutron based on how the deployment is configured.

@reactive.when('neutron-plugin-api-subordinate.connected')
def configure_principle():
    api_principle = reactive.endpoint_from_flag(
        'neutron-plugin-api-subordinate.connected')
    if 'dns' in api_principle.neutron_config_data['extension_drivers']:
        ...

## configure\_plugin

The configure\_plugin method allows the following to be configured in the
principle charm:

* **neutron\_plugin**: Name of the plugin type eg 'ovs', 'ovn' etc. This is not
                       currently used in the principle but should be set to
                       something representitve of the plugin type.
* **core\_plugin**:    Value of core\_plugin to be set in neutron.conf
* **neutron\_plugin\_config**: File containing plugin config. This config file
                               is appended to the list of configs the neutron
                               services read on startup.
* **service\_plugins**: Value of service\_plugins to be set in neutron.conf
* **subordinate\_configuration**: Config to be inserted into a configuration
                                  file that the principle manages.
* **extension\_drivers**: Value of extension\_drivers to be set in
                          ml2\_conf.ini
* **neutron\_security\_groups**: Toggle whether the Neutron security group
                                 feature should be enabled or not.

Request `foo = bar` is inserted into the `DEFAULT` section of neutron.conf

```python
@reactive.when('neutron-plugin-api-subordinate.connected')
def configure_principle(api_principle):
    ...
    inject_config = {
        "neutron-api": {
            "/etc/neutron/neutron.conf": {
                "sections": {
                    'DEFAULT': [
                        ('foo', 'bar')
                    ],
                }
            }
        }
    }
    service_plugins = ','.join((
        api_principle.neutron_config_data.get('service_plugins', ''),
        'networking_ovn.l3.l3_ovn.OVNL3RouterPlugin'),
    )
    api_principle.configure_plugin(
        neutron_plugin='ovn',
        core_plugin='neutron.plugins.ml2.plugin.Ml2Plugin',
        neutron_plugin_config='/etc/neutron/plugins/ml2/ml2_conf.ini',
        service_plugins=service_plugins,
        subordinate_configuration=inject_config)

request_restart

Requesting a restart of all remote services:

@reactive.when('neutron-plugin-api-subordinate.connected')
def remote_restart(api_principle):
    ...
    api_principle.request_restart()

Requesting a restart of a specific type of remote services:

@reactive.when('neutron-plugin-api-subordinate.connected')
def remote_restart(api_principle):
    ...
    api_principle.request_restart(service_type='neutron')

Metadata

To consume this interface in your charm or layer, add the following to layer.yaml:

includes: ['interface:neutron-plugin-api-subordinate']

and add a provides interface of type neutron-plugin-api-subordinate to your charm or layers metadata.yaml eg:

provides:
  neutron-plugin-api-subordinate:
    interface: neutron-plugin-api-subordinate
    scope: container

Bugs

Please report bugs on Launchpad.

For development questions please refer to the OpenStack Charm Guide.