Local metadata

This commit is contained in:
Liam Young 2015-09-08 13:24:57 +01:00
commit d9d06ecefe
5 changed files with 49 additions and 10 deletions

View File

@ -98,4 +98,6 @@ options:
traffic to the external public network. Valid values are either MAC
addresses (in which case only MAC addresses for interfaces without an IP
address already assigned will be used), or interfaces (eth0)
enable-local-dhcp-and-metadata:
type: boolean
default: false

View File

@ -108,10 +108,10 @@ def get_shared_secret():
return secret
class DVRSharedSecretContext(OSContextGenerator):
class SharedSecretContext(OSContextGenerator):
def __call__(self):
if NeutronAPIContext()()['enable_dvr']:
if NeutronAPIContext()()['enable_dvr'] or config('enable-metadata'):
ctxt = {
'shared_secret': get_shared_secret(),
'local_ip': resolve_address(),

View File

@ -39,6 +39,7 @@ from neutron_ovs_utils import (
register_configs,
restart_map,
use_dvr,
enable_metadata,
)
hooks = Hooks()
@ -71,6 +72,8 @@ def config_changed():
CONFIGS.write_all()
for rid in relation_ids('zeromq-configuration'):
zeromq_configuration_relation_joined(rid)
for rid in relation_ids('neutron-plugin'):
neutron_plugin_joined(relation_id=rid)
@hooks.hook('neutron-plugin-api-relation-changed')
@ -90,10 +93,14 @@ def neutron_plugin_api_changed():
@hooks.hook('neutron-plugin-relation-joined')
def neutron_plugin_joined(relation_id=None):
secret = get_shared_secret() if use_dvr() else None
print "Enable metadata: {}".format(enable_metadata())
if config('enable-local-dhcp-and-metadata'):
apt_install(['neutron-metadata-agent', 'neutron-dhcp-agent'] fatal=True)
secret = get_shared_secret() if enable_metadata() else None
rel_data = {
'metadata-shared-secret': secret,
}
print rel_data
relation_set(relation_id=relation_id, **rel_data)

View File

@ -66,6 +66,7 @@ GIT_PACKAGE_BLACKLIST = [
]
NOVA_CONF_DIR = "/etc/nova"
NEUTRON_DHCP_AGENT_CONF = "/etc/neutron/dhcp_agent.ini"
NEUTRON_CONF_DIR = "/etc/neutron"
NEUTRON_CONF = '%s/neutron.conf' % NEUTRON_CONF_DIR
NEUTRON_DEFAULT = '/etc/default/neutron-server'
@ -95,6 +96,17 @@ BASE_RESOURCE_MAP = OrderedDict([
'contexts': [context.PhyNICMTUContext()],
}),
])
METADATA_RESOURCE_MAP = OrderedDict([
(NEUTRON_METADATA_AGENT_CONF, {
'services': ['neutron-metadata-agent'],
'contexts': [neutron_ovs_context.SharedSecretContext(),
neutron_ovs_context.APIIdentityServiceContext()],
}),
(NEUTRON_DHCP_AGENT_CONF, {
'services': ['neutron-dhcp-agent'],
'contexts': [],
}),
])
DVR_RESOURCE_MAP = OrderedDict([
(NEUTRON_L3_AGENT_CONF, {
'services': ['neutron-l3-agent'],
@ -108,11 +120,6 @@ DVR_RESOURCE_MAP = OrderedDict([
'services': ['neutron-l3-agent'],
'contexts': [context.ExternalPortContext()],
}),
(NEUTRON_METADATA_AGENT_CONF, {
'services': ['neutron-metadata-agent'],
'contexts': [neutron_ovs_context.DVRSharedSecretContext(),
neutron_ovs_context.APIIdentityServiceContext()],
}),
])
TEMPLATES = 'templates/'
INT_BRIDGE = "br-int"
@ -158,8 +165,13 @@ def resource_map():
resource_map = deepcopy(BASE_RESOURCE_MAP)
if use_dvr():
resource_map.update(DVR_RESOURCE_MAP)
resource_map.update(METADATA_RESOURCE_MAP)
dvr_services = ['neutron-metadata-agent', 'neutron-l3-agent']
resource_map[NEUTRON_CONF]['services'] += dvr_services
if enable_metadata():
resource_map.update(METADATA_RESOURCE_MAP)
metadata_services = ['neutron-metadata-agent']
resource_map[NEUTRON_CONF]['services'] += metadata_services
return resource_map
@ -209,7 +221,7 @@ def configure_ovs():
def get_shared_secret():
ctxt = neutron_ovs_context.DVRSharedSecretContext()()
ctxt = neutron_ovs_context.SharedSecretContext()()
if 'shared_secret' in ctxt:
return ctxt['shared_secret']
@ -218,6 +230,10 @@ def use_dvr():
return context.NeutronAPIContext()()['enable_dvr']
def enable_metadata():
return use_dvr() or config('enable-local-dhcp-and-metadata')
def git_install(projects_yaml):
"""Perform setup, and install git repos specified in yaml parameter."""
if git_install_requested():

View File

@ -0,0 +1,14 @@
###############################################################################
# [ WARNING ]
# Configuration file maintained by Juju. Local changes may be overwritten.
###############################################################################
[DEFAULT]
state_path = /var/lib/neutron
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
enable_metadata_network = True
enable_isolated_metadata = True
ovs_use_veth = True