refactor: Drop unsupported configurations and code
Includes dropping support for quantum, nvp plugin (renamed nsx long ago) and generally refactoring the unit tests around no longer having to deal with neutron and quantum in the same codebase. Drop support for database connections - these are no longer required as all DB access is now via RPC to nova-conductor or neutron-server. Roll-up configuration file templates < icehouse, remove any that are no longer required. Refactor basic_deployment a bit as it was using the shared-db relation to retrieve the n-gateway units private-address. Change-Id: I22957c0e21c4dd49e5aa74795173b4fc8f043f55
This commit is contained in:
parent
fce66caefa
commit
00f0edc70d
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,4 +3,5 @@ bin
|
||||
tags
|
||||
.tox
|
||||
.testrepository
|
||||
*.pyc
|
||||
*.sw[nop]
|
||||
|
@ -9,7 +9,7 @@ from charmhelpers.contrib.openstack.utils import (
|
||||
|
||||
from neutron_utils import (
|
||||
do_openstack_upgrade,
|
||||
get_common_package,
|
||||
NEUTRON_COMMON,
|
||||
)
|
||||
|
||||
from neutron_hooks import (
|
||||
@ -26,7 +26,7 @@ def openstack_upgrade():
|
||||
code to run, otherwise a full service level upgrade will fire
|
||||
on config-changed."""
|
||||
|
||||
if do_action_openstack_upgrade(get_common_package(),
|
||||
if do_action_openstack_upgrade(NEUTRON_COMMON,
|
||||
do_openstack_upgrade,
|
||||
CONFIGS):
|
||||
config_changed()
|
||||
|
17
config.yaml
17
config.yaml
@ -33,7 +33,8 @@ options:
|
||||
For series=Trusty we support cloud archives for openstack-release:
|
||||
* juno
|
||||
* kilo
|
||||
* ...
|
||||
* liberty
|
||||
* mitaka
|
||||
|
||||
NOTE: updating this setting to a source that is known to provide
|
||||
a later version of OpenStack will trigger a software upgrade.
|
||||
@ -60,10 +61,10 @@ options:
|
||||
Network configuration plugin to use for quantum.
|
||||
Supported values include:
|
||||
|
||||
ovs - Open vSwitch
|
||||
nvp|nsx - Nicira NVP/VMware NSX
|
||||
ovs - ML2 + Open vSwitch
|
||||
nsx - VMware NSX
|
||||
n1kv - Cisco N1kv
|
||||
ovs-odl - Open vSwitch with OpenDayLight Controller
|
||||
ovs-odl - ML2 + Open vSwitch with OpenDayLight Controller
|
||||
ext-port:
|
||||
type: string
|
||||
default:
|
||||
@ -140,14 +141,6 @@ options:
|
||||
description: |
|
||||
Optional configuration to support use of linux router
|
||||
Note that this is used only for Cisco n1kv plugin.
|
||||
database-user:
|
||||
default: nova
|
||||
type: string
|
||||
description: Username for database access
|
||||
database:
|
||||
default: nova
|
||||
type: string
|
||||
description: Database name
|
||||
nagios_context:
|
||||
default: "juju"
|
||||
type: string
|
||||
|
@ -15,9 +15,6 @@ from charmhelpers.contrib.openstack.context import (
|
||||
NeutronAPIContext,
|
||||
config_flags_parser
|
||||
)
|
||||
from charmhelpers.contrib.openstack.utils import (
|
||||
get_os_codename_install_source
|
||||
)
|
||||
from charmhelpers.contrib.hahelpers.cluster import(
|
||||
eligible_leader
|
||||
)
|
||||
@ -25,75 +22,29 @@ from charmhelpers.contrib.network.ip import (
|
||||
get_address_in_network,
|
||||
)
|
||||
|
||||
DB_USER = "quantum"
|
||||
QUANTUM_DB = "quantum"
|
||||
NOVA_DB_USER = "nova"
|
||||
NOVA_DB = "nova"
|
||||
|
||||
QUANTUM_OVS_PLUGIN = \
|
||||
"quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2"
|
||||
QUANTUM_NVP_PLUGIN = \
|
||||
"quantum.plugins.nicira.nicira_nvp_plugin.QuantumPlugin.NvpPluginV2"
|
||||
NEUTRON_OVS_PLUGIN = \
|
||||
"neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2"
|
||||
NEUTRON_ML2_PLUGIN = \
|
||||
"neutron.plugins.ml2.plugin.Ml2Plugin"
|
||||
NEUTRON_NVP_PLUGIN = \
|
||||
"neutron.plugins.nicira.nicira_nvp_plugin.NeutronPlugin.NvpPluginV2"
|
||||
NEUTRON_ML2_PLUGIN = "ml2"
|
||||
NEUTRON_N1KV_PLUGIN = \
|
||||
"neutron.plugins.cisco.n1kv.n1kv_neutron_plugin.N1kvNeutronPluginV2"
|
||||
NEUTRON_NSX_PLUGIN = "vmware"
|
||||
NEUTRON_OVS_ODL_PLUGIN = "ml2"
|
||||
|
||||
NEUTRON = 'neutron'
|
||||
QUANTUM = 'quantum'
|
||||
|
||||
|
||||
def networking_name():
|
||||
''' Determine whether neutron or quantum should be used for name '''
|
||||
if get_os_codename_install_source(config('openstack-origin')) >= 'havana':
|
||||
return NEUTRON
|
||||
else:
|
||||
return QUANTUM
|
||||
|
||||
OVS = 'ovs'
|
||||
NVP = 'nvp'
|
||||
N1KV = 'n1kv'
|
||||
NSX = 'nsx'
|
||||
OVS_ODL = 'ovs-odl'
|
||||
|
||||
NEUTRON = 'neutron'
|
||||
|
||||
CORE_PLUGIN = {
|
||||
QUANTUM: {
|
||||
OVS: QUANTUM_OVS_PLUGIN,
|
||||
NVP: QUANTUM_NVP_PLUGIN,
|
||||
},
|
||||
NEUTRON: {
|
||||
OVS: NEUTRON_OVS_PLUGIN,
|
||||
NVP: NEUTRON_NVP_PLUGIN,
|
||||
N1KV: NEUTRON_N1KV_PLUGIN,
|
||||
NSX: NEUTRON_NSX_PLUGIN,
|
||||
OVS_ODL: NEUTRON_OVS_ODL_PLUGIN,
|
||||
},
|
||||
OVS: NEUTRON_ML2_PLUGIN,
|
||||
N1KV: NEUTRON_N1KV_PLUGIN,
|
||||
NSX: NEUTRON_NSX_PLUGIN,
|
||||
OVS_ODL: NEUTRON_OVS_ODL_PLUGIN,
|
||||
}
|
||||
|
||||
|
||||
def remap_plugin(plugin):
|
||||
''' Remaps plugin name for renames/switches in packaging '''
|
||||
release = get_os_codename_install_source(config('openstack-origin'))
|
||||
if plugin == 'nvp' and release >= 'icehouse':
|
||||
plugin = 'nsx'
|
||||
elif plugin == 'nsx' and release < 'icehouse':
|
||||
plugin = 'nvp'
|
||||
return plugin
|
||||
|
||||
|
||||
def core_plugin():
|
||||
plugin = remap_plugin(config('plugin'))
|
||||
if (get_os_codename_install_source(config('openstack-origin')) >=
|
||||
'icehouse' and plugin == OVS):
|
||||
return NEUTRON_ML2_PLUGIN
|
||||
else:
|
||||
return CORE_PLUGIN[networking_name()][plugin]
|
||||
return CORE_PLUGIN[config('plugin')]
|
||||
|
||||
|
||||
class L3AgentContext(OSContextGenerator):
|
||||
@ -189,7 +140,7 @@ SHARED_SECRET = "/etc/{}/secret.txt"
|
||||
|
||||
def get_shared_secret():
|
||||
secret = None
|
||||
_path = SHARED_SECRET.format(networking_name())
|
||||
_path = SHARED_SECRET.format(NEUTRON)
|
||||
if not os.path.exists(_path):
|
||||
secret = str(uuid.uuid4())
|
||||
with open(_path, 'w') as secret_file:
|
||||
|
@ -5,11 +5,9 @@ from base64 import b64decode
|
||||
from charmhelpers.core.hookenv import (
|
||||
log, ERROR, WARNING,
|
||||
config,
|
||||
is_relation_made,
|
||||
relation_get,
|
||||
relation_set,
|
||||
relation_ids,
|
||||
unit_get,
|
||||
Hooks,
|
||||
UnregisteredHookError,
|
||||
status_set,
|
||||
@ -52,7 +50,6 @@ from neutron_utils import (
|
||||
do_openstack_upgrade,
|
||||
get_packages,
|
||||
get_early_packages,
|
||||
get_common_package,
|
||||
get_topics,
|
||||
git_install,
|
||||
git_install_requested,
|
||||
@ -69,6 +66,7 @@ from neutron_utils import (
|
||||
use_l3ha,
|
||||
REQUIRED_INTERFACES,
|
||||
check_optional_relations,
|
||||
NEUTRON_COMMON,
|
||||
)
|
||||
|
||||
hooks = Hooks()
|
||||
@ -82,7 +80,7 @@ def install():
|
||||
src = config('openstack-origin')
|
||||
if (lsb_release()['DISTRIB_CODENAME'] == 'precise' and
|
||||
src == 'distro'):
|
||||
src = 'cloud:precise-folsom'
|
||||
src = 'cloud:precise-icehouse'
|
||||
configure_installation_source(src)
|
||||
status_set('maintenance', 'Installing apt packages')
|
||||
apt_update(fatal=True)
|
||||
@ -115,7 +113,7 @@ def config_changed():
|
||||
CONFIGS.write_all()
|
||||
|
||||
elif not config('action-managed-upgrade'):
|
||||
if openstack_upgrade_available(get_common_package()):
|
||||
if openstack_upgrade_available(NEUTRON_COMMON):
|
||||
status_set('maintenance', 'Running openstack upgrade')
|
||||
do_openstack_upgrade(CONFIGS)
|
||||
|
||||
@ -126,10 +124,6 @@ def config_changed():
|
||||
create_sysctl(sysctl_dict, '/etc/sysctl.d/50-quantum-gateway.conf')
|
||||
|
||||
# Re-run joined hooks as config might have changed
|
||||
for r_id in relation_ids('shared-db'):
|
||||
db_joined(relation_id=r_id)
|
||||
for r_id in relation_ids('pgsql-db'):
|
||||
pgsql_db_joined(relation_id=r_id)
|
||||
for r_id in relation_ids('amqp'):
|
||||
amqp_joined(relation_id=r_id)
|
||||
for r_id in relation_ids('amqp-nova'):
|
||||
@ -163,32 +157,6 @@ def upgrade_charm():
|
||||
update_legacy_ha_files(force=True)
|
||||
|
||||
|
||||
@hooks.hook('shared-db-relation-joined')
|
||||
def db_joined(relation_id=None):
|
||||
if is_relation_made('pgsql-db'):
|
||||
# raise error
|
||||
e = ('Attempting to associate a mysql database when there is already '
|
||||
'associated a postgresql one')
|
||||
log(e, level=ERROR)
|
||||
raise Exception(e)
|
||||
relation_set(username=config('database-user'),
|
||||
database=config('database'),
|
||||
hostname=unit_get('private-address'),
|
||||
relation_id=relation_id)
|
||||
|
||||
|
||||
@hooks.hook('pgsql-db-relation-joined')
|
||||
def pgsql_db_joined(relation_id=None):
|
||||
if is_relation_made('shared-db'):
|
||||
# raise error
|
||||
e = ('Attempting to associate a postgresql database when there'
|
||||
' is already associated a mysql one')
|
||||
log(e, level=ERROR)
|
||||
raise Exception(e)
|
||||
relation_set(database=config('database'),
|
||||
relation_id=relation_id)
|
||||
|
||||
|
||||
@hooks.hook('amqp-nova-relation-joined')
|
||||
def amqp_nova_joined(relation_id=None):
|
||||
relation_set(relation_id=relation_id,
|
||||
@ -222,13 +190,11 @@ def amqp_departed():
|
||||
CONFIGS.write_all()
|
||||
|
||||
|
||||
@hooks.hook('shared-db-relation-changed',
|
||||
'pgsql-db-relation-changed',
|
||||
'amqp-relation-changed',
|
||||
@hooks.hook('amqp-relation-changed',
|
||||
'cluster-relation-changed',
|
||||
'cluster-relation-joined')
|
||||
@restart_on_change(restart_map())
|
||||
def db_amqp_changed():
|
||||
def amqp_changed():
|
||||
CONFIGS.write_all()
|
||||
|
||||
|
||||
@ -280,7 +246,7 @@ def stop():
|
||||
|
||||
|
||||
@hooks.hook('zeromq-configuration-relation-joined')
|
||||
@os_requires_version('kilo', 'neutron-common')
|
||||
@os_requires_version('kilo', NEUTRON_COMMON)
|
||||
def zeromq_configuration_relation_joined(relid=None):
|
||||
relation_set(relation_id=relid,
|
||||
topics=" ".join(get_topics()),
|
||||
|
@ -43,7 +43,6 @@ from charmhelpers.contrib.hahelpers.cluster import (
|
||||
from charmhelpers.contrib.openstack.utils import (
|
||||
configure_installation_source,
|
||||
get_os_codename_install_source,
|
||||
get_os_codename_package,
|
||||
git_install_requested,
|
||||
git_clone_and_install,
|
||||
git_src_dir,
|
||||
@ -68,12 +67,9 @@ from charmhelpers.contrib.openstack.context import (
|
||||
import charmhelpers.contrib.openstack.templating as templating
|
||||
from charmhelpers.contrib.openstack.neutron import headers_package
|
||||
from neutron_contexts import (
|
||||
CORE_PLUGIN, OVS, NVP, NSX, N1KV, OVS_ODL,
|
||||
NEUTRON, QUANTUM,
|
||||
networking_name,
|
||||
CORE_PLUGIN, OVS, NSX, N1KV, OVS_ODL,
|
||||
NeutronGatewayContext,
|
||||
L3AgentContext,
|
||||
remap_plugin,
|
||||
)
|
||||
from charmhelpers.contrib.openstack.neutron import (
|
||||
parse_bridge_mappings,
|
||||
@ -83,23 +79,12 @@ from copy import deepcopy
|
||||
|
||||
|
||||
def valid_plugin():
|
||||
return config('plugin') in CORE_PLUGIN[networking_name()]
|
||||
return config('plugin') in CORE_PLUGIN
|
||||
|
||||
QUANTUM_CONF_DIR = '/etc/quantum'
|
||||
|
||||
QUANTUM_OVS_PLUGIN_CONF = \
|
||||
"/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini"
|
||||
QUANTUM_NVP_PLUGIN_CONF = \
|
||||
"/etc/quantum/plugins/nicira/nvp.ini"
|
||||
QUANTUM_PLUGIN_CONF = {
|
||||
OVS: QUANTUM_OVS_PLUGIN_CONF,
|
||||
NVP: QUANTUM_NVP_PLUGIN_CONF,
|
||||
}
|
||||
NEUTRON_COMMON = 'neutron-common'
|
||||
|
||||
NEUTRON_CONF_DIR = '/etc/neutron'
|
||||
|
||||
NEUTRON_OVS_PLUGIN_CONF = \
|
||||
"/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini"
|
||||
NEUTRON_ML2_PLUGIN_CONF = \
|
||||
"/etc/neutron/plugins/ml2/ml2_conf.ini"
|
||||
NEUTRON_OVS_AGENT_CONF = \
|
||||
@ -110,30 +95,11 @@ NEUTRON_NSX_PLUGIN_CONF = \
|
||||
"/etc/neutron/plugins/vmware/nsx.ini"
|
||||
|
||||
NEUTRON_PLUGIN_CONF = {
|
||||
OVS: NEUTRON_OVS_PLUGIN_CONF,
|
||||
NVP: NEUTRON_NVP_PLUGIN_CONF,
|
||||
OVS: NEUTRON_ML2_PLUGIN_CONF,
|
||||
NSX: NEUTRON_NSX_PLUGIN_CONF,
|
||||
}
|
||||
|
||||
QUANTUM_GATEWAY_PKGS = {
|
||||
OVS: [
|
||||
"quantum-plugin-openvswitch-agent",
|
||||
"quantum-l3-agent",
|
||||
"quantum-dhcp-agent",
|
||||
'python-mysqldb',
|
||||
'python-psycopg2',
|
||||
"nova-api-metadata"
|
||||
],
|
||||
NVP: [
|
||||
"openvswitch-switch",
|
||||
"quantum-dhcp-agent",
|
||||
'python-mysqldb',
|
||||
'python-psycopg2',
|
||||
"nova-api-metadata"
|
||||
]
|
||||
}
|
||||
|
||||
NEUTRON_GATEWAY_PKGS = {
|
||||
GATEWAY_PKGS = {
|
||||
OVS: [
|
||||
"neutron-plugin-openvswitch-agent",
|
||||
"openvswitch-switch",
|
||||
@ -146,7 +112,7 @@ NEUTRON_GATEWAY_PKGS = {
|
||||
"neutron-plugin-metering-agent",
|
||||
"neutron-lbaas-agent",
|
||||
],
|
||||
NVP: [
|
||||
NSX: [
|
||||
"neutron-dhcp-agent",
|
||||
'python-mysqldb',
|
||||
'python-psycopg2',
|
||||
@ -171,16 +137,10 @@ NEUTRON_GATEWAY_PKGS = {
|
||||
"neutron-lbaas-agent",
|
||||
],
|
||||
}
|
||||
NEUTRON_GATEWAY_PKGS[NSX] = NEUTRON_GATEWAY_PKGS[NVP]
|
||||
|
||||
GATEWAY_PKGS = {
|
||||
QUANTUM: QUANTUM_GATEWAY_PKGS,
|
||||
NEUTRON: NEUTRON_GATEWAY_PKGS,
|
||||
}
|
||||
|
||||
EARLY_PACKAGES = {
|
||||
OVS: ['openvswitch-datapath-dkms'],
|
||||
NVP: [],
|
||||
NSX: [],
|
||||
N1KV: [],
|
||||
OVS_ODL: [],
|
||||
}
|
||||
@ -261,8 +221,8 @@ def get_early_packages():
|
||||
|
||||
def get_packages():
|
||||
'''Return a list of packages for install based on the configured plugin'''
|
||||
plugin = remap_plugin(config('plugin'))
|
||||
packages = deepcopy(GATEWAY_PKGS[networking_name()][plugin])
|
||||
plugin = config('plugin')
|
||||
packages = deepcopy(GATEWAY_PKGS[plugin])
|
||||
source = get_os_codename_install_source(config('openstack-origin'))
|
||||
if plugin == 'ovs':
|
||||
if (source >= 'icehouse' and
|
||||
@ -304,13 +264,6 @@ def determine_l3ha_packages():
|
||||
return []
|
||||
|
||||
|
||||
def get_common_package():
|
||||
if get_os_codename_package('quantum-common', fatal=False) is not None:
|
||||
return 'quantum-common'
|
||||
else:
|
||||
return 'neutron-common'
|
||||
|
||||
|
||||
def use_l3ha():
|
||||
return NeutronAPIContext()()['enable_l3ha']
|
||||
|
||||
@ -347,19 +300,6 @@ NOVA_CONFIG_FILES = {
|
||||
},
|
||||
}
|
||||
|
||||
QUANTUM_SHARED_CONFIG_FILES = {
|
||||
QUANTUM_DHCP_AGENT_CONF: {
|
||||
'hook_contexts': [NeutronGatewayContext()],
|
||||
'services': ['quantum-dhcp-agent']
|
||||
},
|
||||
QUANTUM_METADATA_AGENT_CONF: {
|
||||
'hook_contexts': [NetworkServiceContext(),
|
||||
NeutronGatewayContext()],
|
||||
'services': ['quantum-metadata-agent']
|
||||
},
|
||||
}
|
||||
QUANTUM_SHARED_CONFIG_FILES.update(NOVA_CONFIG_FILES)
|
||||
|
||||
NEUTRON_SHARED_CONFIG_FILES = {
|
||||
NEUTRON_DHCP_AGENT_CONF: {
|
||||
'hook_contexts': [NeutronGatewayContext()],
|
||||
@ -377,38 +317,6 @@ NEUTRON_SHARED_CONFIG_FILES = {
|
||||
}
|
||||
NEUTRON_SHARED_CONFIG_FILES.update(NOVA_CONFIG_FILES)
|
||||
|
||||
QUANTUM_OVS_CONFIG_FILES = {
|
||||
QUANTUM_CONF: {
|
||||
'hook_contexts': [context.AMQPContext(ssl_dir=QUANTUM_CONF_DIR),
|
||||
NeutronGatewayContext(),
|
||||
SyslogContext(),
|
||||
context.ZeroMQContext(),
|
||||
context.NotificationDriverContext()],
|
||||
'services': ['quantum-l3-agent',
|
||||
'quantum-dhcp-agent',
|
||||
'quantum-metadata-agent',
|
||||
'quantum-plugin-openvswitch-agent']
|
||||
},
|
||||
QUANTUM_L3_AGENT_CONF: {
|
||||
'hook_contexts': [NetworkServiceContext(),
|
||||
NeutronGatewayContext()],
|
||||
'services': ['quantum-l3-agent']
|
||||
},
|
||||
QUANTUM_OVS_PLUGIN_CONF: {
|
||||
'hook_contexts': [NeutronGatewayContext()],
|
||||
'services': ['quantum-plugin-openvswitch-agent']
|
||||
},
|
||||
EXT_PORT_CONF: {
|
||||
'hook_contexts': [ExternalPortContext()],
|
||||
'services': ['ext-port']
|
||||
},
|
||||
PHY_NIC_MTU_CONF: {
|
||||
'hook_contexts': [PhyNICMTUContext()],
|
||||
'services': ['os-charm-phy-nic-mtu']
|
||||
}
|
||||
}
|
||||
QUANTUM_OVS_CONFIG_FILES.update(QUANTUM_SHARED_CONFIG_FILES)
|
||||
|
||||
NEUTRON_OVS_CONFIG_FILES = {
|
||||
NEUTRON_CONF: {
|
||||
'hook_contexts': [context.AMQPContext(ssl_dir=NEUTRON_CONF_DIR),
|
||||
@ -450,7 +358,7 @@ NEUTRON_OVS_CONFIG_FILES = {
|
||||
'hook_contexts': [NeutronGatewayContext()],
|
||||
'services': ['neutron-l3-agent', 'neutron-vpn-agent']
|
||||
},
|
||||
NEUTRON_OVS_PLUGIN_CONF: {
|
||||
NEUTRON_ML2_PLUGIN_CONF: {
|
||||
'hook_contexts': [NeutronGatewayContext()],
|
||||
'services': ['neutron-plugin-openvswitch-agent']
|
||||
},
|
||||
@ -524,18 +432,7 @@ NEUTRON_OVS_ODL_CONFIG_FILES = {
|
||||
}
|
||||
NEUTRON_OVS_ODL_CONFIG_FILES.update(NEUTRON_SHARED_CONFIG_FILES)
|
||||
|
||||
|
||||
QUANTUM_NVP_CONFIG_FILES = {
|
||||
QUANTUM_CONF: {
|
||||
'hook_contexts': [context.AMQPContext(ssl_dir=QUANTUM_CONF_DIR),
|
||||
NeutronGatewayContext(),
|
||||
SyslogContext()],
|
||||
'services': ['quantum-dhcp-agent', 'quantum-metadata-agent']
|
||||
},
|
||||
}
|
||||
QUANTUM_NVP_CONFIG_FILES.update(QUANTUM_SHARED_CONFIG_FILES)
|
||||
|
||||
NEUTRON_NVP_CONFIG_FILES = {
|
||||
NEUTRON_NSX_CONFIG_FILES = {
|
||||
NEUTRON_CONF: {
|
||||
'hook_contexts': [context.AMQPContext(ssl_dir=NEUTRON_CONF_DIR),
|
||||
NeutronGatewayContext(),
|
||||
@ -543,7 +440,7 @@ NEUTRON_NVP_CONFIG_FILES = {
|
||||
'services': ['neutron-dhcp-agent', 'neutron-metadata-agent']
|
||||
},
|
||||
}
|
||||
NEUTRON_NVP_CONFIG_FILES.update(NEUTRON_SHARED_CONFIG_FILES)
|
||||
NEUTRON_NSX_CONFIG_FILES.update(NEUTRON_SHARED_CONFIG_FILES)
|
||||
|
||||
NEUTRON_N1KV_CONFIG_FILES = {
|
||||
NEUTRON_CONF: {
|
||||
@ -564,17 +461,10 @@ NEUTRON_N1KV_CONFIG_FILES = {
|
||||
NEUTRON_N1KV_CONFIG_FILES.update(NEUTRON_SHARED_CONFIG_FILES)
|
||||
|
||||
CONFIG_FILES = {
|
||||
QUANTUM: {
|
||||
NVP: QUANTUM_NVP_CONFIG_FILES,
|
||||
OVS: QUANTUM_OVS_CONFIG_FILES,
|
||||
},
|
||||
NEUTRON: {
|
||||
NSX: NEUTRON_NVP_CONFIG_FILES,
|
||||
NVP: NEUTRON_NVP_CONFIG_FILES,
|
||||
OVS: NEUTRON_OVS_CONFIG_FILES,
|
||||
N1KV: NEUTRON_N1KV_CONFIG_FILES,
|
||||
OVS_ODL: NEUTRON_OVS_ODL_CONFIG_FILES
|
||||
},
|
||||
NSX: NEUTRON_NSX_CONFIG_FILES,
|
||||
OVS: NEUTRON_OVS_CONFIG_FILES,
|
||||
N1KV: NEUTRON_N1KV_CONFIG_FILES,
|
||||
OVS_ODL: NEUTRON_OVS_ODL_CONFIG_FILES
|
||||
}
|
||||
|
||||
SERVICE_RENAMES = {
|
||||
@ -601,33 +491,26 @@ def remap_service(service_name):
|
||||
return service_name
|
||||
|
||||
|
||||
def resolve_config_files(name, plugin, release):
|
||||
def resolve_config_files(plugin, release):
|
||||
'''
|
||||
Resolve configuration files and contexts
|
||||
|
||||
:param name: neutron or quantum
|
||||
:param plugin: shortname of plugin e.g. ovs
|
||||
:param release: openstack release codename
|
||||
:returns: dict of configuration files, contexts
|
||||
and associated services
|
||||
'''
|
||||
config_files = deepcopy(CONFIG_FILES)
|
||||
if plugin == 'ovs':
|
||||
if plugin == OVS:
|
||||
# NOTE: deal with switch to ML2 plugin for >= icehouse
|
||||
drop_config = [NEUTRON_ML2_PLUGIN_CONF,
|
||||
NEUTRON_OVS_AGENT_CONF]
|
||||
if release >= 'icehouse':
|
||||
# ovs -> ml2
|
||||
drop_config = [NEUTRON_OVS_PLUGIN_CONF,
|
||||
NEUTRON_OVS_AGENT_CONF]
|
||||
drop_config = [NEUTRON_OVS_AGENT_CONF]
|
||||
if release >= 'mitaka':
|
||||
# ml2 -> ovs_agent
|
||||
drop_config = [NEUTRON_OVS_PLUGIN_CONF,
|
||||
NEUTRON_ML2_PLUGIN_CONF]
|
||||
drop_config = [NEUTRON_ML2_PLUGIN_CONF]
|
||||
|
||||
for _config in drop_config:
|
||||
if _config in config_files[name][plugin]:
|
||||
config_files[name][plugin].pop(_config)
|
||||
if _config in config_files[plugin]:
|
||||
config_files[plugin].pop(_config)
|
||||
|
||||
if is_relation_made('amqp-nova'):
|
||||
amqp_nova_ctxt = context.AMQPContext(
|
||||
@ -638,7 +521,7 @@ def resolve_config_files(name, plugin, release):
|
||||
amqp_nova_ctxt = context.AMQPContext(
|
||||
ssl_dir=NOVA_CONF_DIR,
|
||||
rel_name='amqp')
|
||||
config_files[name][plugin][NOVA_CONF][
|
||||
config_files[plugin][NOVA_CONF][
|
||||
'hook_contexts'].append(amqp_nova_ctxt)
|
||||
return config_files
|
||||
|
||||
@ -646,24 +529,22 @@ def resolve_config_files(name, plugin, release):
|
||||
def register_configs():
|
||||
''' Register config files with their respective contexts. '''
|
||||
release = get_os_codename_install_source(config('openstack-origin'))
|
||||
plugin = remap_plugin(config('plugin'))
|
||||
name = networking_name()
|
||||
config_files = resolve_config_files(name, plugin, release)
|
||||
plugin = config('plugin')
|
||||
config_files = resolve_config_files(plugin, release)
|
||||
configs = templating.OSConfigRenderer(templates_dir=TEMPLATES,
|
||||
openstack_release=release)
|
||||
for conf in config_files[name][plugin]:
|
||||
for conf in config_files[plugin]:
|
||||
configs.register(conf,
|
||||
config_files[name][plugin][conf]['hook_contexts'])
|
||||
config_files[plugin][conf]['hook_contexts'])
|
||||
return configs
|
||||
|
||||
|
||||
def stop_services():
|
||||
release = get_os_codename_install_source(config('openstack-origin'))
|
||||
plugin = remap_plugin(config('plugin'))
|
||||
name = networking_name()
|
||||
config_files = resolve_config_files(name, plugin, release)
|
||||
plugin = config('plugin')
|
||||
config_files = resolve_config_files(plugin, release)
|
||||
svcs = set()
|
||||
for ctxt in config_files[name][config('plugin')].itervalues():
|
||||
for ctxt in config_files[config('plugin')].itervalues():
|
||||
for svc in ctxt['services']:
|
||||
svcs.add(remap_service(svc))
|
||||
for svc in svcs:
|
||||
@ -679,11 +560,10 @@ def restart_map():
|
||||
that should be restarted when file changes.
|
||||
'''
|
||||
release = get_os_codename_install_source(config('openstack-origin'))
|
||||
plugin = remap_plugin(config('plugin'))
|
||||
name = networking_name()
|
||||
config_files = resolve_config_files(name, plugin, release)
|
||||
plugin = config('plugin')
|
||||
config_files = resolve_config_files(plugin, release)
|
||||
_map = {}
|
||||
for f, ctxt in config_files[name][plugin].iteritems():
|
||||
for f, ctxt in config_files[plugin].iteritems():
|
||||
svcs = set()
|
||||
for svc in ctxt['services']:
|
||||
svcs.add(remap_service(svc))
|
||||
|
@ -1 +0,0 @@
|
||||
neutron_hooks.py
|
@ -1 +0,0 @@
|
||||
neutron_hooks.py
|
@ -1 +0,0 @@
|
||||
neutron_hooks.py
|
@ -1 +0,0 @@
|
||||
neutron_hooks.py
|
@ -22,10 +22,6 @@ provides:
|
||||
quantum-network-service:
|
||||
interface: quantum
|
||||
requires:
|
||||
shared-db:
|
||||
interface: mysql-shared
|
||||
pgsql-db:
|
||||
interface: pgsql
|
||||
amqp:
|
||||
interface: rabbitmq
|
||||
amqp-nova:
|
||||
|
@ -1,10 +0,0 @@
|
||||
[DEFAULT]
|
||||
state_path = /var/lib/quantum
|
||||
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
|
||||
dhcp_driver = quantum.agent.linux.dhcp.Dnsmasq
|
||||
root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
|
||||
{% if plugin == 'nvp' -%}
|
||||
ovs_use_veth = True
|
||||
enable_metadata_network = True
|
||||
enable_isolated_metadata = True
|
||||
{% endif -%}
|
@ -1,8 +0,0 @@
|
||||
[DEFAULT]
|
||||
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
|
||||
auth_url = {{ service_protocol }}://{{ keystone_host }}:{{ service_port }}/v2.0
|
||||
auth_region = {{ region }}
|
||||
admin_tenant_name = {{ service_tenant }}
|
||||
admin_user = {{ service_username }}
|
||||
admin_password = {{ service_password }}
|
||||
root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
|
@ -1,12 +0,0 @@
|
||||
[DEFAULT]
|
||||
auth_url = {{ service_protocol }}://{{ keystone_host }}:{{ service_port }}/v2.0
|
||||
auth_region = {{ region }}
|
||||
admin_tenant_name = {{ service_tenant }}
|
||||
admin_user = {{ service_username }}
|
||||
admin_password = {{ service_password }}
|
||||
root_helper = sudo quantum-rootwrap /etc/quantum/rootwrap.conf
|
||||
state_path = /var/lib/quantum
|
||||
# Gateway runs a metadata API server locally
|
||||
nova_metadata_ip = {{ local_ip }}
|
||||
nova_metadata_port = 8775
|
||||
metadata_proxy_shared_secret = {{ shared_secret }}
|
@ -1,26 +0,0 @@
|
||||
[DEFAULT]
|
||||
logdir=/var/log/nova
|
||||
state_path=/var/lib/nova
|
||||
lock_path=/var/lock/nova
|
||||
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf
|
||||
verbose=True
|
||||
use_syslog = {{ use_syslog }}
|
||||
api_paste_config=/etc/nova/api-paste.ini
|
||||
enabled_apis=metadata
|
||||
multi_host=True
|
||||
{% include "parts/database" %}
|
||||
quantum_metadata_proxy_shared_secret={{ shared_secret }}
|
||||
service_quantum_metadata_proxy=True
|
||||
# Access to message bus
|
||||
rabbit_userid={{ rabbitmq_user }}
|
||||
rabbit_virtual_host={{ rabbitmq_virtual_host }}
|
||||
rabbit_host={{ rabbitmq_host }}
|
||||
rabbit_password={{ rabbitmq_password }}
|
||||
# Access to quantum API services
|
||||
network_api_class=nova.network.quantumv2.api.API
|
||||
quantum_auth_strategy=keystone
|
||||
quantum_url={{ quantum_url }}
|
||||
quantum_admin_tenant_name={{ service_tenant }}
|
||||
quantum_admin_username={{ service_username }}
|
||||
quantum_admin_password={{ service_password }}
|
||||
quantum_admin_auth_url={{ service_protocol }}://{{ keystone_host }}:{{ service_port }}/v2.0
|
@ -1,8 +0,0 @@
|
||||
[OVS]
|
||||
local_ip = {{ local_ip }}
|
||||
tenant_network_type = gre
|
||||
enable_tunneling = True
|
||||
tunnel_id_ranges = 1:1000
|
||||
[AGENT]
|
||||
polling_interval = 10
|
||||
root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
|
@ -1,15 +0,0 @@
|
||||
[DEFAULT]
|
||||
verbose = {{ verbose }}
|
||||
debug = {{ debug }}
|
||||
use_syslog = {{ use_syslog }}
|
||||
lock_path = /var/lock/quantum
|
||||
core_plugin = {{ core_plugin }}
|
||||
rabbit_userid = {{ rabbitmq_user }}
|
||||
rabbit_virtual_host = {{ rabbitmq_virtual_host }}
|
||||
rabbit_host = {{ rabbitmq_host }}
|
||||
rabbit_password = {{ rabbitmq_password }}
|
||||
control_exchange = quantum
|
||||
notification_driver = quantum.openstack.common.notifier.list_notifier
|
||||
list_notifier_drivers = quantum.openstack.common.notifier.rabbit_notifier
|
||||
[AGENT]
|
||||
root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
|
@ -1,22 +0,0 @@
|
||||
[DEFAULT]
|
||||
logdir=/var/log/nova
|
||||
state_path=/var/lib/nova
|
||||
lock_path=/var/lock/nova
|
||||
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf
|
||||
verbose=True
|
||||
api_paste_config=/etc/nova/api-paste.ini
|
||||
enabled_apis=metadata
|
||||
multi_host=True
|
||||
{% include "parts/database" %}
|
||||
quantum_metadata_proxy_shared_secret={{ shared_secret }}
|
||||
service_quantum_metadata_proxy=True
|
||||
# Access to message bus
|
||||
{% include "parts/rabbitmq" %}
|
||||
# Access to quantum API services
|
||||
network_api_class=nova.network.quantumv2.api.API
|
||||
quantum_auth_strategy=keystone
|
||||
quantum_url={{ quantum_url }}
|
||||
quantum_admin_tenant_name={{ service_tenant }}
|
||||
quantum_admin_username={{ service_username }}
|
||||
quantum_admin_password={{ service_password }}
|
||||
quantum_admin_auth_url={{ service_protocol }}://{{ keystone_host }}:{{ service_port }}/v2.0
|
@ -1,11 +0,0 @@
|
||||
[DEFAULT]
|
||||
verbose = {{ verbose }}
|
||||
debug = {{ debug }}
|
||||
lock_path = /var/lock/quantum
|
||||
core_plugin = {{ core_plugin }}
|
||||
{% include "parts/rabbitmq" %}
|
||||
control_exchange = quantum
|
||||
notification_driver = quantum.openstack.common.notifier.list_notifier
|
||||
list_notifier_drivers = quantum.openstack.common.notifier.rabbit_notifier
|
||||
[AGENT]
|
||||
root_helper = sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf
|
@ -1,18 +0,0 @@
|
||||
###############################################################################
|
||||
# [ WARNING ]
|
||||
# Configuration file maintained by Juju. Local changes may be overwritten.
|
||||
###############################################################################
|
||||
# Metadata service seems to cache neutron api url from keystone so trigger
|
||||
# restart if it changes: {{ quantum_url }}
|
||||
[DEFAULT]
|
||||
auth_url = {{ service_protocol }}://{{ keystone_host }}:{{ service_port }}/v2.0
|
||||
auth_region = {{ region }}
|
||||
admin_tenant_name = {{ service_tenant }}
|
||||
admin_user = {{ service_username }}
|
||||
admin_password = {{ service_password }}
|
||||
root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf
|
||||
state_path = /var/lib/neutron
|
||||
# Gateway runs a metadata API server locally
|
||||
nova_metadata_ip = {{ local_ip }}
|
||||
nova_metadata_port = 8775
|
||||
metadata_proxy_shared_secret = {{ shared_secret }}
|
@ -1,16 +0,0 @@
|
||||
###############################################################################
|
||||
# [ WARNING ]
|
||||
# Configuration file maintained by Juju. Local changes may be overwritten.
|
||||
###############################################################################
|
||||
[DEFAULT]
|
||||
verbose = {{ verbose }}
|
||||
debug = {{ debug }}
|
||||
use_syslog = {{ use_syslog }}
|
||||
lock_path = /var/lock/neutron
|
||||
core_plugin = {{ core_plugin }}
|
||||
{% include "parts/rabbitmq" %}
|
||||
control_exchange = neutron
|
||||
notification_driver = neutron.openstack.common.notifier.list_notifier
|
||||
list_notifier_drivers = neutron.openstack.common.notifier.rabbit_notifier
|
||||
[agent]
|
||||
root_helper = sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
|
@ -1,14 +0,0 @@
|
||||
###############################################################################
|
||||
# [ WARNING ]
|
||||
# Configuration file maintained by Juju. Local changes may be overwritten.
|
||||
###############################################################################
|
||||
[ovs]
|
||||
local_ip = {{ local_ip }}
|
||||
tenant_network_type = gre
|
||||
enable_tunneling = True
|
||||
tunnel_id_ranges = 1:1000
|
||||
|
||||
[agent]
|
||||
{% if veth_mtu -%}
|
||||
veth_mtu = {{ veth_mtu }}
|
||||
{% endif %}
|
@ -61,7 +61,6 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
"""Add all of the relations for the services."""
|
||||
relations = {
|
||||
'keystone:shared-db': 'mysql:shared-db',
|
||||
'neutron-gateway:shared-db': 'mysql:shared-db',
|
||||
'neutron-gateway:amqp': 'rabbitmq-server:amqp',
|
||||
'nova-cloud-controller:quantum-network-service':
|
||||
'neutron-gateway:quantum-network-service',
|
||||
@ -173,6 +172,12 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
tenant_name='admin',
|
||||
region_name='RegionOne')
|
||||
|
||||
def get_private_address(self, unit):
|
||||
"""Return the private address of the given sentry unit."""
|
||||
address, retcode = unit.run('unit-get private-address')
|
||||
assert retcode == 0, 'error retrieving unit private address'
|
||||
return address.strip()
|
||||
|
||||
def test_100_services(self):
|
||||
"""Verify the expected services are running on the corresponding
|
||||
service units."""
|
||||
@ -293,39 +298,6 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
if ret:
|
||||
amulet.raise_status(amulet.FAIL, msg=ret)
|
||||
|
||||
def test_200_neutron_gateway_mysql_shared_db_relation(self):
|
||||
"""Verify the neutron-gateway to mysql shared-db relation data"""
|
||||
u.log.debug('Checking neutron-gateway:mysql db relation data...')
|
||||
unit = self.neutron_gateway_sentry
|
||||
relation = ['shared-db', 'mysql:shared-db']
|
||||
expected = {
|
||||
'private-address': u.valid_ip,
|
||||
'database': 'nova',
|
||||
'username': 'nova',
|
||||
'hostname': u.valid_ip
|
||||
}
|
||||
|
||||
ret = u.validate_relation_data(unit, relation, expected)
|
||||
if ret:
|
||||
message = u.relation_error('neutron-gateway shared-db', ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
def test_201_mysql_neutron_gateway_shared_db_relation(self):
|
||||
"""Verify the mysql to neutron-gateway shared-db relation data"""
|
||||
u.log.debug('Checking mysql:neutron-gateway db relation data...')
|
||||
unit = self.mysql_sentry
|
||||
relation = ['shared-db', 'neutron-gateway:shared-db']
|
||||
expected = {
|
||||
'private-address': u.valid_ip,
|
||||
'password': u.not_null,
|
||||
'db_host': u.valid_ip
|
||||
}
|
||||
|
||||
ret = u.validate_relation_data(unit, relation, expected)
|
||||
if ret:
|
||||
message = u.relation_error('mysql shared-db', ret)
|
||||
amulet.raise_status(amulet.FAIL, msg=message)
|
||||
|
||||
def test_202_neutron_gateway_rabbitmq_amqp_relation(self):
|
||||
"""Verify the neutron-gateway to rabbitmq-server amqp relation data"""
|
||||
u.log.debug('Checking neutron-gateway:rmq amqp relation data...')
|
||||
@ -575,7 +547,7 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
'DEFAULT': {
|
||||
'verbose': 'False',
|
||||
'debug': 'False',
|
||||
'core_plugin': 'neutron.plugins.ml2.plugin.Ml2Plugin',
|
||||
'core_plugin': 'ml2',
|
||||
'control_exchange': 'neutron',
|
||||
'notification_driver': 'neutron.openstack.common.notifier.'
|
||||
'list_notifier',
|
||||
@ -624,7 +596,6 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
|
||||
unit = self.neutron_gateway_sentry
|
||||
conf = '/etc/neutron/plugins/ml2/ml2_conf.ini'
|
||||
ng_db_rel = unit.relation('shared-db', 'mysql:shared-db')
|
||||
|
||||
expected = {
|
||||
'ml2': {
|
||||
@ -640,7 +611,7 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
},
|
||||
'ovs': {
|
||||
'enable_tunneling': 'True',
|
||||
'local_ip': ng_db_rel['private-address']
|
||||
'local_ip': self.get_private_address(unit)
|
||||
},
|
||||
'agent': {
|
||||
'tunnel_types': 'gre',
|
||||
@ -787,8 +758,6 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
unit = self.neutron_gateway_sentry
|
||||
ep = self.keystone.service_catalog.url_for(service_type='identity',
|
||||
endpoint_type='publicURL')
|
||||
ng_db_rel = unit.relation('shared-db',
|
||||
'mysql:shared-db')
|
||||
nova_cc_relation = self.nova_cc_sentry.relation(
|
||||
'quantum-network-service',
|
||||
'neutron-gateway:quantum-network-service')
|
||||
@ -802,7 +771,7 @@ class NeutronGatewayBasicDeployment(OpenStackAmuletDeployment):
|
||||
'root_helper': 'sudo neutron-rootwrap '
|
||||
'/etc/neutron/rootwrap.conf',
|
||||
'state_path': '/var/lib/neutron',
|
||||
'nova_metadata_ip': ng_db_rel['private-address'],
|
||||
'nova_metadata_ip': self.get_private_address(unit),
|
||||
'nova_metadata_port': '8775',
|
||||
'cache_url': 'memory://?default_ttl=5'
|
||||
}
|
||||
|
1
tox.ini
1
tox.ini
@ -8,6 +8,7 @@ setenv = VIRTUAL_ENV={envdir}
|
||||
install_command =
|
||||
pip install --allow-unverified python-apt {opts} {packages}
|
||||
commands = ostestr {posargs}
|
||||
sitepackages = True
|
||||
|
||||
[testenv:py27]
|
||||
basepython = python2.7
|
||||
|
@ -14,7 +14,6 @@ with patch('charmhelpers.core.hookenv.status_set'):
|
||||
TO_PATCH = [
|
||||
'do_openstack_upgrade',
|
||||
'config_changed',
|
||||
'get_common_package',
|
||||
]
|
||||
|
||||
|
||||
|
@ -15,7 +15,6 @@ TO_PATCH = [
|
||||
'apt_install',
|
||||
'config',
|
||||
'eligible_leader',
|
||||
'get_os_codename_install_source',
|
||||
'unit_get',
|
||||
]
|
||||
|
||||
@ -132,7 +131,6 @@ class TestNeutronGatewayContext(CharmTestCase):
|
||||
_rids.return_value = ['neutron-plugin-api:0']
|
||||
_runits.return_value = ['neutron-api/0']
|
||||
_rget.side_effect = lambda *args, **kwargs: rdata
|
||||
self.get_os_codename_install_source.return_value = 'folsom'
|
||||
_host_ip.return_value = '10.5.0.1'
|
||||
_secret.return_value = 'testsecret'
|
||||
ctxt = neutron_contexts.NeutronGatewayContext()()
|
||||
@ -142,8 +140,7 @@ class TestNeutronGatewayContext(CharmTestCase):
|
||||
'enable_l3ha': True,
|
||||
'local_ip': '10.5.0.1',
|
||||
'instance_mtu': 1420,
|
||||
'core_plugin': "quantum.plugins.openvswitch.ovs_quantum_plugin."
|
||||
"OVSQuantumPluginV2",
|
||||
'core_plugin': "ml2",
|
||||
'plugin': 'ovs',
|
||||
'debug': False,
|
||||
'verbose': True,
|
||||
@ -177,7 +174,7 @@ class TestSharedSecret(CharmTestCase):
|
||||
self.assertEquals(neutron_contexts.get_shared_secret(),
|
||||
'secret_thing')
|
||||
_open.assert_called_with(
|
||||
neutron_contexts.SHARED_SECRET.format('quantum'), 'w')
|
||||
neutron_contexts.SHARED_SECRET.format('neutron'), 'w')
|
||||
_file.write.assert_called_with('secret_thing')
|
||||
|
||||
@patch('os.path')
|
||||
@ -188,7 +185,7 @@ class TestSharedSecret(CharmTestCase):
|
||||
self.assertEquals(neutron_contexts.get_shared_secret(),
|
||||
'secret_thing')
|
||||
_open.assert_called_with(
|
||||
neutron_contexts.SHARED_SECRET.format('quantum'), 'r')
|
||||
neutron_contexts.SHARED_SECRET.format('neutron'), 'r')
|
||||
|
||||
|
||||
class TestHostIP(CharmTestCase):
|
||||
@ -245,36 +242,7 @@ class TestMisc(CharmTestCase):
|
||||
self).setUp(neutron_contexts,
|
||||
TO_PATCH)
|
||||
|
||||
def test_lt_havana(self):
|
||||
self.get_os_codename_install_source.return_value = 'folsom'
|
||||
self.assertEquals(neutron_contexts.networking_name(), 'quantum')
|
||||
|
||||
def test_ge_havana(self):
|
||||
self.get_os_codename_install_source.return_value = 'havana'
|
||||
self.assertEquals(neutron_contexts.networking_name(), 'neutron')
|
||||
|
||||
def test_remap_plugin(self):
|
||||
self.get_os_codename_install_source.return_value = 'havana'
|
||||
self.assertEquals(neutron_contexts.remap_plugin('nvp'), 'nvp')
|
||||
self.assertEquals(neutron_contexts.remap_plugin('nsx'), 'nvp')
|
||||
|
||||
def test_remap_plugin_icehouse(self):
|
||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||
self.assertEquals(neutron_contexts.remap_plugin('nvp'), 'nsx')
|
||||
self.assertEquals(neutron_contexts.remap_plugin('nsx'), 'nsx')
|
||||
|
||||
def test_remap_plugin_noop(self):
|
||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||
self.assertEquals(neutron_contexts.remap_plugin('ovs'), 'ovs')
|
||||
|
||||
def test_core_plugin(self):
|
||||
self.get_os_codename_install_source.return_value = 'havana'
|
||||
self.config.return_value = 'ovs'
|
||||
self.assertEquals(neutron_contexts.core_plugin(),
|
||||
neutron_contexts.NEUTRON_OVS_PLUGIN)
|
||||
|
||||
def test_core_plugin_ml2(self):
|
||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||
self.config.return_value = 'ovs'
|
||||
self.assertEquals(neutron_contexts.core_plugin(),
|
||||
neutron_contexts.NEUTRON_ML2_PLUGIN)
|
||||
|
@ -35,15 +35,12 @@ TO_PATCH = [
|
||||
'configure_ovs',
|
||||
'relation_set',
|
||||
'relation_ids',
|
||||
'unit_get',
|
||||
'relation_get',
|
||||
'install_ca_cert',
|
||||
'get_common_package',
|
||||
'execd_preinstall',
|
||||
'lsb_release',
|
||||
'stop_services',
|
||||
'b64decode',
|
||||
'is_relation_made',
|
||||
'create_sysctl',
|
||||
'update_nrpe_config',
|
||||
'update_legacy_ha_files',
|
||||
@ -98,7 +95,7 @@ class TestQuantumHooks(CharmTestCase):
|
||||
self.test_config.set('openstack-origin', 'distro')
|
||||
self._call_hook('install')
|
||||
self.configure_installation_source.assert_called_with(
|
||||
'cloud:precise-folsom'
|
||||
'cloud:precise-icehouse'
|
||||
)
|
||||
|
||||
@patch('sys.exit')
|
||||
@ -152,16 +149,12 @@ class TestQuantumHooks(CharmTestCase):
|
||||
self.openstack_upgrade_available.return_value = True
|
||||
self.valid_plugin.return_value = True
|
||||
self.relation_ids.side_effect = mock_relids
|
||||
_db_joined = self.patch('db_joined')
|
||||
_pgsql_db_joined = self.patch('pgsql_db_joined')
|
||||
_amqp_joined = self.patch('amqp_joined')
|
||||
_amqp_nova_joined = self.patch('amqp_nova_joined')
|
||||
_zmq_joined = self.patch('zeromq_configuration_relation_joined')
|
||||
self._call_hook('config-changed')
|
||||
self.assertTrue(self.do_openstack_upgrade.called)
|
||||
self.assertTrue(self.configure_ovs.called)
|
||||
self.assertTrue(_db_joined.called)
|
||||
self.assertTrue(_pgsql_db_joined.called)
|
||||
self.assertTrue(_amqp_joined.called)
|
||||
self.assertTrue(_amqp_nova_joined.called)
|
||||
self.assertTrue(_zmq_joined.called)
|
||||
@ -208,8 +201,6 @@ class TestQuantumHooks(CharmTestCase):
|
||||
self.openstack_upgrade_available.return_value = True
|
||||
self.valid_plugin.return_value = True
|
||||
self.relation_ids.side_effect = mock_relids
|
||||
_db_joined = self.patch('db_joined')
|
||||
_pgsql_db_joined = self.patch('pgsql_db_joined')
|
||||
_amqp_joined = self.patch('amqp_joined')
|
||||
_amqp_nova_joined = self.patch('amqp_nova_joined')
|
||||
_zmq_joined = self.patch('zeromq_configuration_relation_joined')
|
||||
@ -233,8 +224,6 @@ class TestQuantumHooks(CharmTestCase):
|
||||
self.git_install.assert_called_with(projects_yaml)
|
||||
self.assertFalse(self.do_openstack_upgrade.called)
|
||||
self.assertTrue(self.configure_ovs.called)
|
||||
self.assertTrue(_db_joined.called)
|
||||
self.assertTrue(_pgsql_db_joined.called)
|
||||
self.assertTrue(_amqp_joined.called)
|
||||
self.assertTrue(_amqp_nova_joined.called)
|
||||
self.assertTrue(_zmq_joined.called)
|
||||
@ -247,44 +236,6 @@ class TestQuantumHooks(CharmTestCase):
|
||||
self.assertTrue(_install.called)
|
||||
self.assertTrue(_config_changed.called)
|
||||
|
||||
def test_db_joined(self):
|
||||
self.is_relation_made.return_value = False
|
||||
self.unit_get.return_value = 'myhostname'
|
||||
self._call_hook('shared-db-relation-joined')
|
||||
self.relation_set.assert_called_with(
|
||||
username='nova',
|
||||
database='nova',
|
||||
hostname='myhostname',
|
||||
relation_id=None
|
||||
)
|
||||
|
||||
def test_db_joined_with_postgresql(self):
|
||||
self.is_relation_made.return_value = True
|
||||
|
||||
with self.assertRaises(Exception) as context:
|
||||
hooks.db_joined()
|
||||
self.assertEqual(context.exception.message,
|
||||
'Attempting to associate a mysql database when there '
|
||||
'is already associated a postgresql one')
|
||||
|
||||
def test_postgresql_db_joined(self):
|
||||
self.unit_get.return_value = 'myhostname'
|
||||
self.is_relation_made.return_value = False
|
||||
self._call_hook('pgsql-db-relation-joined')
|
||||
self.relation_set.assert_called_with(
|
||||
database='nova',
|
||||
relation_id=None
|
||||
)
|
||||
|
||||
def test_postgresql_joined_with_db(self):
|
||||
self.is_relation_made.return_value = True
|
||||
|
||||
with self.assertRaises(Exception) as context:
|
||||
hooks.pgsql_db_joined()
|
||||
self.assertEqual(context.exception.message,
|
||||
'Attempting to associate a postgresql database when'
|
||||
' there is already associated a mysql one')
|
||||
|
||||
def test_amqp_joined(self):
|
||||
self._call_hook('amqp-relation-joined')
|
||||
self.relation_set.assert_called_with(
|
||||
@ -325,14 +276,6 @@ class TestQuantumHooks(CharmTestCase):
|
||||
self._call_hook('amqp-nova-relation-changed')
|
||||
self.assertTrue(self.CONFIGS.write_all.called)
|
||||
|
||||
def test_shared_db_changed(self):
|
||||
self._call_hook('shared-db-relation-changed')
|
||||
self.assertTrue(self.CONFIGS.write_all.called)
|
||||
|
||||
def test_pgsql_db_changed(self):
|
||||
self._call_hook('pgsql-db-relation-changed')
|
||||
self.assertTrue(self.CONFIGS.write_all.called)
|
||||
|
||||
def test_nm_changed(self):
|
||||
self.relation_get.return_value = "cert"
|
||||
self._call_hook('quantum-network-service-relation-changed')
|
||||
|
@ -22,7 +22,6 @@ import charmhelpers.core.hookenv as hookenv
|
||||
TO_PATCH = [
|
||||
'config',
|
||||
'get_os_codename_install_source',
|
||||
'get_os_codename_package',
|
||||
'apt_update',
|
||||
'apt_upgrade',
|
||||
'apt_install',
|
||||
@ -30,7 +29,6 @@ TO_PATCH = [
|
||||
'log',
|
||||
'add_bridge',
|
||||
'add_bridge_port',
|
||||
'networking_name',
|
||||
'headers_package',
|
||||
'full_restart',
|
||||
'service_running',
|
||||
@ -41,7 +39,6 @@ TO_PATCH = [
|
||||
'service_stop',
|
||||
'determine_dkms_package',
|
||||
'service_restart',
|
||||
'remap_plugin',
|
||||
'is_relation_made',
|
||||
'lsb_release',
|
||||
'mkdir',
|
||||