[bbaqar,r=james-page] Add support for PLUMgrid SDN
This commit is contained in:
commit
e8f981f68a
14
config.yaml
14
config.yaml
@ -368,6 +368,20 @@ options:
|
|||||||
description: |
|
description: |
|
||||||
A comma-separated list of nagios servicegroups.
|
A comma-separated list of nagios servicegroups.
|
||||||
If left empty, the nagios_context will be used as the servicegroup
|
If left empty, the nagios_context will be used as the servicegroup
|
||||||
|
# PLUMgrid Plugin configuration
|
||||||
|
plumgrid-username:
|
||||||
|
default: plumgrid
|
||||||
|
type: string
|
||||||
|
description: Username to access PLUMgrid Director
|
||||||
|
plumgrid-password:
|
||||||
|
default: plumgrid
|
||||||
|
type: string
|
||||||
|
description: Password to access PLUMgrid Director
|
||||||
|
plumgrid-virtual-ip:
|
||||||
|
default:
|
||||||
|
type: string
|
||||||
|
description: IP address of PLUMgrid Director
|
||||||
|
# end of PLUMgrid configuration
|
||||||
manage-neutron-plugin-legacy-mode:
|
manage-neutron-plugin-legacy-mode:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: True
|
default: True
|
||||||
|
@ -435,7 +435,11 @@ def get_hostname(address, fqdn=True):
|
|||||||
|
|
||||||
rev = dns.reversename.from_address(address)
|
rev = dns.reversename.from_address(address)
|
||||||
result = ns_query(rev)
|
result = ns_query(rev)
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
|
try:
|
||||||
|
result = socket.gethostbyaddr(address)[0]
|
||||||
|
except:
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
result = address
|
result = address
|
||||||
|
@ -895,6 +895,18 @@ class NeutronContext(OSContextGenerator):
|
|||||||
'neutron_url': '%s://%s:%s' % (proto, host, '9696')}
|
'neutron_url': '%s://%s:%s' % (proto, host, '9696')}
|
||||||
return ctxt
|
return ctxt
|
||||||
|
|
||||||
|
def pg_ctxt(self):
|
||||||
|
driver = neutron_plugin_attribute(self.plugin, 'driver',
|
||||||
|
self.network_manager)
|
||||||
|
config = neutron_plugin_attribute(self.plugin, 'config',
|
||||||
|
self.network_manager)
|
||||||
|
ovs_ctxt = {'core_plugin': driver,
|
||||||
|
'neutron_plugin': 'plumgrid',
|
||||||
|
'neutron_security_groups': self.neutron_security_groups,
|
||||||
|
'local_ip': unit_private_ip(),
|
||||||
|
'config': config}
|
||||||
|
return ovs_ctxt
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
if self.network_manager not in ['quantum', 'neutron']:
|
if self.network_manager not in ['quantum', 'neutron']:
|
||||||
return {}
|
return {}
|
||||||
@ -914,6 +926,8 @@ class NeutronContext(OSContextGenerator):
|
|||||||
ctxt.update(self.calico_ctxt())
|
ctxt.update(self.calico_ctxt())
|
||||||
elif self.plugin == 'vsp':
|
elif self.plugin == 'vsp':
|
||||||
ctxt.update(self.nuage_ctxt())
|
ctxt.update(self.nuage_ctxt())
|
||||||
|
elif self.plugin == 'plumgrid':
|
||||||
|
ctxt.update(self.pg_ctxt())
|
||||||
|
|
||||||
alchemy_flags = config('neutron-alchemy-flags')
|
alchemy_flags = config('neutron-alchemy-flags')
|
||||||
if alchemy_flags:
|
if alchemy_flags:
|
||||||
|
@ -195,6 +195,20 @@ def neutron_plugins():
|
|||||||
'packages': [],
|
'packages': [],
|
||||||
'server_packages': ['neutron-server', 'neutron-plugin-nuage'],
|
'server_packages': ['neutron-server', 'neutron-plugin-nuage'],
|
||||||
'server_services': ['neutron-server']
|
'server_services': ['neutron-server']
|
||||||
|
},
|
||||||
|
'plumgrid': {
|
||||||
|
'config': '/etc/neutron/plugins/plumgrid/plumgrid.ini',
|
||||||
|
'driver': 'neutron.plugins.plumgrid.plumgrid_plugin.plumgrid_plugin.NeutronPluginPLUMgridV2',
|
||||||
|
'contexts': [
|
||||||
|
context.SharedDBContext(user=config('database-user'),
|
||||||
|
database=config('database'),
|
||||||
|
ssl_dir=NEUTRON_CONF_DIR)],
|
||||||
|
'services': [],
|
||||||
|
'packages': [['plumgrid-lxc'],
|
||||||
|
['iovisor-dkms']],
|
||||||
|
'server_packages': ['neutron-server',
|
||||||
|
'neutron-plugin-plumgrid'],
|
||||||
|
'server_services': ['neutron-server']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if release >= 'icehouse':
|
if release >= 'icehouse':
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
# Copyright 2014-2015 Canonical Limited.
|
# Copyright 2014-2015 Canonical Limited.
|
||||||
#
|
#
|
||||||
# This file is part of charm-helpers.
|
# This file is part of charm-helpers.
|
||||||
@ -195,9 +193,9 @@ def get_os_codename_version(vers):
|
|||||||
error_out(e)
|
error_out(e)
|
||||||
|
|
||||||
|
|
||||||
def get_os_version_codename(codename):
|
def get_os_version_codename(codename, version_map=OPENSTACK_CODENAMES):
|
||||||
'''Determine OpenStack version number from codename.'''
|
'''Determine OpenStack version number from codename.'''
|
||||||
for k, v in six.iteritems(OPENSTACK_CODENAMES):
|
for k, v in six.iteritems(version_map):
|
||||||
if v == codename:
|
if v == codename:
|
||||||
return k
|
return k
|
||||||
e = 'Could not derive OpenStack version for '\
|
e = 'Could not derive OpenStack version for '\
|
||||||
@ -429,6 +427,10 @@ def openstack_upgrade_available(package):
|
|||||||
import apt_pkg as apt
|
import apt_pkg as apt
|
||||||
src = config('openstack-origin')
|
src = config('openstack-origin')
|
||||||
cur_vers = get_os_version_package(package)
|
cur_vers = get_os_version_package(package)
|
||||||
|
if "swift" in package:
|
||||||
|
codename = get_os_codename_install_source(src)
|
||||||
|
available_vers = get_os_version_codename(codename, SWIFT_CODENAMES)
|
||||||
|
else:
|
||||||
available_vers = get_os_version_install_source(src)
|
available_vers = get_os_version_install_source(src)
|
||||||
apt.init()
|
apt.init()
|
||||||
return apt.version_compare(available_vers, cur_vers) == 1
|
return apt.version_compare(available_vers, cur_vers) == 1
|
||||||
|
@ -767,21 +767,23 @@ def status_set(workload_state, message):
|
|||||||
|
|
||||||
|
|
||||||
def status_get():
|
def status_get():
|
||||||
"""Retrieve the previously set juju workload state
|
"""Retrieve the previously set juju workload state and message
|
||||||
|
|
||||||
|
If the status-get command is not found then assume this is juju < 1.23 and
|
||||||
|
return 'unknown', ""
|
||||||
|
|
||||||
If the status-set command is not found then assume this is juju < 1.23 and
|
|
||||||
return 'unknown'
|
|
||||||
"""
|
"""
|
||||||
cmd = ['status-get']
|
cmd = ['status-get', "--format=json", "--include-data"]
|
||||||
try:
|
try:
|
||||||
raw_status = subprocess.check_output(cmd, universal_newlines=True)
|
raw_status = subprocess.check_output(cmd)
|
||||||
status = raw_status.rstrip()
|
|
||||||
return status
|
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
if e.errno == errno.ENOENT:
|
if e.errno == errno.ENOENT:
|
||||||
return 'unknown'
|
return ('unknown', "")
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
else:
|
||||||
|
status = json.loads(raw_status.decode("UTF-8"))
|
||||||
|
return (status["status"], status["message"])
|
||||||
|
|
||||||
|
|
||||||
def translate_exc(from_exc, to_exc):
|
def translate_exc(from_exc, to_exc):
|
||||||
|
@ -162,6 +162,10 @@ class NeutronCCContext(context.NeutronContext):
|
|||||||
','.join(config('nsx-controllers').split())
|
','.join(config('nsx-controllers').split())
|
||||||
ctxt['nsx_controllers_list'] = \
|
ctxt['nsx_controllers_list'] = \
|
||||||
config('nsx-controllers').split()
|
config('nsx-controllers').split()
|
||||||
|
if config('neutron-plugin') == 'plumgrid':
|
||||||
|
ctxt['pg_username'] = config('plumgrid-username')
|
||||||
|
ctxt['pg_password'] = config('plumgrid-password')
|
||||||
|
ctxt['virtual_ip'] = config('plumgrid-virtual-ip')
|
||||||
ctxt['l2_population'] = self.neutron_l2_population
|
ctxt['l2_population'] = self.neutron_l2_population
|
||||||
ctxt['enable_dvr'] = self.neutron_dvr
|
ctxt['enable_dvr'] = self.neutron_dvr
|
||||||
ctxt['l3_ha'] = self.neutron_l3ha
|
ctxt['l3_ha'] = self.neutron_l3ha
|
||||||
|
20
templates/icehouse/plumgrid.ini
Normal file
20
templates/icehouse/plumgrid.ini
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# icehouse
|
||||||
|
###############################################################################
|
||||||
|
# [ WARNING ]
|
||||||
|
# Configuration file maintained by Juju. Local changes may be overwritten.
|
||||||
|
###############################################################################
|
||||||
|
[plumgriddirector]
|
||||||
|
# This line should be pointing to the PLUMgrid Director,
|
||||||
|
# for the PLUMgrid platform.
|
||||||
|
director_server={{ virtual_ip }}
|
||||||
|
director_server_port=443
|
||||||
|
# Authentification parameters for the Director.
|
||||||
|
# These are the admin credentials to manage and control
|
||||||
|
# the PLUMgrid Director server.
|
||||||
|
username={{ pg_username }}
|
||||||
|
password={{ pg_password }}
|
||||||
|
servertimeout=70
|
||||||
|
|
||||||
|
{% if database_host -%}
|
||||||
|
connection = {{ database_type }}://{{ database_user }}:{{ database_password }}@{{ database_host }}/{{ database }}{% if database_ssl_ca %}?ssl_ca={{ database_ssl_ca }}{% if database_ssl_cert %}&ssl_cert={{ database_ssl_cert }}&ssl_key={{ database_ssl_key }}{% endif %}{% endif %}
|
||||||
|
{% endif -%}
|
@ -272,6 +272,9 @@ class NeutronCCContextTest(CharmTestCase):
|
|||||||
self.test_config.set('nsx-tz-uuid', 'tzuuid')
|
self.test_config.set('nsx-tz-uuid', 'tzuuid')
|
||||||
self.test_config.set('nsx-l3-uuid', 'l3uuid')
|
self.test_config.set('nsx-l3-uuid', 'l3uuid')
|
||||||
self.test_config.set('nsx-controllers', 'ctrl1 ctrl2')
|
self.test_config.set('nsx-controllers', 'ctrl1 ctrl2')
|
||||||
|
self.test_config.set('plumgrid-username', 'plumgrid')
|
||||||
|
self.test_config.set('plumgrid-password', 'plumgrid')
|
||||||
|
self.test_config.set('plumgrid-virtual-ip', '192.168.100.250')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
super(NeutronCCContextTest, self).tearDown()
|
super(NeutronCCContextTest, self).tearDown()
|
||||||
|
Loading…
Reference in New Issue
Block a user