121 lines
3.6 KiB
Python
Raw Normal View History

2014-06-05 11:59:23 +01:00
from charmhelpers.contrib.openstack.neutron import neutron_plugin_attribute
from copy import deepcopy
from charmhelpers.contrib.openstack import context, templating
2014-06-05 11:59:23 +01:00
from collections import OrderedDict
from charmhelpers.contrib.openstack.utils import (
2014-06-19 10:56:25 +01:00
os_release,
2014-06-05 11:59:23 +01:00
)
import neutron_ovs_context
from charmhelpers.contrib.network.ovs import (
add_bridge,
add_bridge_port,
)
2014-06-05 11:59:23 +01:00
NOVA_CONF_DIR = "/etc/nova"
NEUTRON_CONF_DIR = "/etc/neutron"
NEUTRON_CONF = '%s/neutron.conf' % NEUTRON_CONF_DIR
NEUTRON_DEFAULT = '/etc/default/neutron-server'
2015-02-02 13:31:39 +00:00
NEUTRON_L3_AGENT_CONF = "/etc/neutron/l3_agent.ini"
NEUTRON_FWAAS_CONF = "/etc/neutron/fwaas_driver.ini"
ML2_CONF = '%s/plugins/ml2/ml2_conf.ini' % NEUTRON_CONF_DIR
EXT_PORT_CONF = '/etc/init/ext-port.conf'
NEUTRON_METADATA_AGENT_CONF = "/etc/neutron/metadata_agent.ini"
2015-03-02 14:56:11 +00:00
DVR_PACKAGES = ['neutron-vpn-agent']
2014-06-05 11:59:23 +01:00
BASE_RESOURCE_MAP = OrderedDict([
(NEUTRON_CONF, {
'services': ['neutron-plugin-openvswitch-agent'],
'contexts': [neutron_ovs_context.OVSPluginContext(),
2015-01-28 09:44:49 +00:00
context.AMQPContext(ssl_dir=NEUTRON_CONF_DIR)],
}),
2014-06-05 11:59:23 +01:00
(ML2_CONF, {
2015-02-05 09:57:47 +00:00
'services': ['neutron-plugin-openvswitch-agent'],
2014-06-05 11:59:23 +01:00
'contexts': [neutron_ovs_context.OVSPluginContext()],
}),
])
2015-02-19 15:55:06 +00:00
DVR_RESOURCE_MAP = OrderedDict([
2015-02-02 13:31:39 +00:00
(NEUTRON_L3_AGENT_CONF, {
'services': ['neutron-vpn-agent'],
'contexts': [neutron_ovs_context.L3AgentContext()],
}),
(NEUTRON_FWAAS_CONF, {
'services': ['neutron-vpn-agent'],
'contexts': [neutron_ovs_context.L3AgentContext()],
}),
(EXT_PORT_CONF, {
2015-02-05 09:57:47 +00:00
'services': ['neutron-vpn-agent'],
2015-02-25 07:54:14 +00:00
'contexts': [context.ExternalPortContext()],
}),
(NEUTRON_METADATA_AGENT_CONF, {
'services': ['neutron-metadata-agent'],
'contexts': [neutron_ovs_context.DVRSharedSecretContext(),
neutron_ovs_context.NetworkServiceContext()],
}),
2014-06-05 11:59:23 +01:00
])
TEMPLATES = 'templates/'
INT_BRIDGE = "br-int"
EXT_BRIDGE = "br-ex"
DATA_BRIDGE = 'br-data'
2014-06-19 10:56:25 +01:00
2015-02-02 13:31:39 +00:00
def determine_dvr_packages():
2015-03-02 14:56:11 +00:00
if use_dvr():
return DVR_PACKAGES
return []
2015-02-02 13:31:39 +00:00
2014-06-05 11:59:23 +01:00
def determine_packages():
2015-02-02 13:31:39 +00:00
pkgs = neutron_plugin_attribute('ovs', 'packages', 'neutron')
pkgs.extend(determine_dvr_packages())
return pkgs
2014-06-05 11:59:23 +01:00
2014-06-19 10:56:25 +01:00
2014-06-05 11:59:23 +01:00
def register_configs(release=None):
release = release or os_release('neutron-common', base='icehouse')
2014-06-05 11:59:23 +01:00
configs = templating.OSConfigRenderer(templates_dir=TEMPLATES,
openstack_release=release)
for cfg, rscs in resource_map().iteritems():
configs.register(cfg, rscs['contexts'])
return configs
2014-06-19 10:56:25 +01:00
2014-06-05 11:59:23 +01:00
def resource_map():
'''
Dynamically generate a map of resources that will be managed for a single
hook execution.
'''
resource_map = deepcopy(BASE_RESOURCE_MAP)
2015-03-02 14:56:11 +00:00
if use_dvr():
2015-02-19 15:55:06 +00:00
resource_map.update(DVR_RESOURCE_MAP)
dvr_services = ['neutron-metadata-agent', 'neutron-vpn-agent']
resource_map[NEUTRON_CONF]['services'] += dvr_services
2014-06-05 11:59:23 +01:00
return resource_map
2014-06-19 10:56:25 +01:00
2014-06-05 11:59:23 +01:00
def restart_map():
'''
Constructs a restart map based on charm config settings and relation
state.
'''
return {k: v['services'] for k, v in resource_map().iteritems()}
def configure_ovs():
add_bridge(INT_BRIDGE)
add_bridge(EXT_BRIDGE)
2015-02-25 08:15:08 +00:00
ext_port_ctx = context.ExternalPortContext()()
if ext_port_ctx and ext_port_ctx['ext_port']:
add_bridge_port(EXT_BRIDGE, ext_port_ctx['ext_port'])
add_bridge(DATA_BRIDGE)
def get_shared_secret():
ctxt = neutron_ovs_context.DVRSharedSecretContext()()
if 'shared_secret' in ctxt:
return ctxt['shared_secret']
2015-03-02 14:56:11 +00:00
def use_dvr():
return neutron_ovs_context.use_dvr()