Add optional OpenStack metadata support
This commit is contained in:
@@ -3,28 +3,13 @@ import subprocess
|
||||
|
||||
import charmhelpers.core as ch_core
|
||||
|
||||
import charms_openstack.adapters
|
||||
import charms_openstack.charm
|
||||
|
||||
|
||||
OVS_ETCDIR = '/etc/openvswitch'
|
||||
|
||||
|
||||
@charms_openstack.adapters.config_property
|
||||
def cluster_local_addr(cls):
|
||||
"""Address the ``ovsdb-server`` processes should be bound to.
|
||||
|
||||
:param cls: charms_openstack.adapters.ConfigurationAdapter derived class
|
||||
instance. Charm class instance is at cls.charm_instance.
|
||||
:type: cls: charms_openstack.adapters.ConfiguartionAdapter
|
||||
:returns: IP address selected for cluster communication on local unit.
|
||||
:rtype: str
|
||||
"""
|
||||
# XXX this should probably be made space aware
|
||||
# for addr in cls.charm_instance.get_local_addresses():
|
||||
# return addr
|
||||
return ch_core.hookenv.unit_get('private-address')
|
||||
|
||||
|
||||
@charms_openstack.adapters.config_property
|
||||
def ovn_key(cls):
|
||||
return os.path.join(OVS_ETCDIR, 'key_host')
|
||||
@@ -41,16 +26,67 @@ def ovn_ca_cert(cls):
|
||||
'{}.crt'.format(cls.charm_instance.name))
|
||||
|
||||
|
||||
class OVNControllerCharm(charms_openstack.charm.OpenStackCharm):
|
||||
class NeutronPluginRelationAdapter(
|
||||
charms_openstack.adapters.OpenStackRelationAdapter):
|
||||
|
||||
@property
|
||||
def metadata_shared_secret(self):
|
||||
return self.relation.get_or_create_shared_secret()
|
||||
|
||||
|
||||
class OVNChassisCharmRelationAdapters(
|
||||
charms_openstack.adapters.OpenStackRelationAdapters):
|
||||
relation_adapters = {
|
||||
'nova_compute': NeutronPluginRelationAdapter,
|
||||
}
|
||||
|
||||
|
||||
class OVNChassisCharm(charms_openstack.charm.OpenStackCharm):
|
||||
release = 'stein'
|
||||
name = 'ovn-controller'
|
||||
name = 'ovn-chassis'
|
||||
packages = ['ovn-host']
|
||||
services = ['ovn-host']
|
||||
adapters_class = OVNChassisCharmRelationAdapters
|
||||
required_relations = ['certificates', 'ovsdb']
|
||||
restart_map = {
|
||||
'/etc/default/ovn-host': 'ovn-host',
|
||||
'/etc/default/ovn-host': ['ovn-host'],
|
||||
}
|
||||
python_version = 3
|
||||
# Name of unitdata key with information on whether to enable metadata
|
||||
metadata_kv_key = 'ovn-chassis-enable-metadata'
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
enable_metadata = ch_core.unitdata.kv().get(
|
||||
self.metadata_kv_key, False)
|
||||
print(enable_metadata)
|
||||
if enable_metadata:
|
||||
# XXX for Train onwards, we should use the
|
||||
# ``networking-ovn-metadata-agent`` package
|
||||
metadata_agent = 'networking-ovn-metadata-agent'
|
||||
self.packages.extend(['python3-networking-ovn', 'haproxy'])
|
||||
self.services.append(metadata_agent)
|
||||
self.restart_map.update({
|
||||
'/etc/neutron/'
|
||||
'networking_ovn_metadata_agent.ini': [metadata_agent],
|
||||
'/etc/init.d/''networking-ovn-metadata-agent': [
|
||||
metadata_agent],
|
||||
'/lib/systemd/system/networking-ovn-metadata-agent.service': (
|
||||
[metadata_agent]),
|
||||
})
|
||||
self.permission_override_map = {
|
||||
'/etc/init.d/networking-ovn-metadata-agent': 0o755,
|
||||
}
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def disable_metadata(self):
|
||||
db = ch_core.unitdata.kv()
|
||||
db.unset(self.metadata_kv_key)
|
||||
db.flush()
|
||||
|
||||
def enable_metadata(self):
|
||||
db = ch_core.unitdata.kv()
|
||||
db.set(self.metadata_kv_key, True)
|
||||
db.flush()
|
||||
|
||||
def run(self, *args):
|
||||
cp = subprocess.run(
|
||||
@@ -61,7 +97,7 @@ class OVNControllerCharm(charms_openstack.charm.OpenStackCharm):
|
||||
def configure_tls(self, certificates_interface=None):
|
||||
"""Override default handler prepare certs per OVNs taste."""
|
||||
# The default handler in ``OpenStackCharm`` class does the CA only
|
||||
tls_objects = super().configure_tls(
|
||||
tls_objects = self.get_certs_and_keys(
|
||||
certificates_interface=certificates_interface)
|
||||
|
||||
for tls_object in tls_objects:
|
||||
@@ -92,5 +128,5 @@ class OVNControllerCharm(charms_openstack.charm.OpenStackCharm):
|
||||
'external-ids:ovn-encap-type=geneve')
|
||||
self.run('ovs-vsctl', 'set', 'open', '.',
|
||||
'external-ids:ovn-encap-ip={}'
|
||||
.format(cluster_local_addr(None)))
|
||||
.format(ovsdb_interface.cluster_local_addr))
|
||||
self.restart_all()
|
||||
Reference in New Issue
Block a user