1
# Various utilies for dealing with Neutron and the renaming from Quantum.
3
from subprocess import check_output
5
from charmhelpers.core.hookenv import (
11
from charmhelpers.contrib.openstack.utils import os_release
14
def headers_package():
15
"""Ensures correct linux-headers for running kernel are installed,
16
for building DKMS package"""
17
kver = check_output(['uname', '-r']).decode('UTF-8').strip()
18
return 'linux-headers-%s' % kver
20
QUANTUM_CONF_DIR = '/etc/quantum'
24
""" Retrieve the current major kernel version as a tuple e.g. (3, 13) """
25
kver = check_output(['uname', '-r']).decode('UTF-8').strip()
26
kver = kver.split('.')
27
return (int(kver[0]), int(kver[1]))
30
def determine_dkms_package():
31
""" Determine which DKMS package should be used based on kernel version """
32
# NOTE: 3.13 kernels have support for GRE and VXLAN native
33
if kernel_version() >= (3, 13):
36
return ['openvswitch-datapath-dkms']
42
def quantum_plugins():
43
from charmhelpers.contrib.openstack import context
46
'config': '/etc/quantum/plugins/openvswitch/'
47
'ovs_quantum_plugin.ini',
48
'driver': 'quantum.plugins.openvswitch.ovs_quantum_plugin.'
51
context.SharedDBContext(user=config('neutron-database-user'),
52
database=config('neutron-database'),
53
relation_prefix='neutron',
54
ssl_dir=QUANTUM_CONF_DIR)],
55
'services': ['quantum-plugin-openvswitch-agent'],
56
'packages': [[headers_package()] + determine_dkms_package(),
57
['quantum-plugin-openvswitch-agent']],
58
'server_packages': ['quantum-server',
59
'quantum-plugin-openvswitch'],
60
'server_services': ['quantum-server']
63
'config': '/etc/quantum/plugins/nicira/nvp.ini',
64
'driver': 'quantum.plugins.nicira.nicira_nvp_plugin.'
65
'QuantumPlugin.NvpPluginV2',
67
context.SharedDBContext(user=config('neutron-database-user'),
68
database=config('neutron-database'),
69
relation_prefix='neutron',
70
ssl_dir=QUANTUM_CONF_DIR)],
73
'server_packages': ['quantum-server',
74
'quantum-plugin-nicira'],
75
'server_services': ['quantum-server']
79
NEUTRON_CONF_DIR = '/etc/neutron'
82
def neutron_plugins():
83
from charmhelpers.contrib.openstack import context
84
release = os_release('nova-common')
87
'config': '/etc/neutron/plugins/openvswitch/'
88
'ovs_neutron_plugin.ini',
89
'driver': 'neutron.plugins.openvswitch.ovs_neutron_plugin.'
92
context.SharedDBContext(user=config('neutron-database-user'),
93
database=config('neutron-database'),
94
relation_prefix='neutron',
95
ssl_dir=NEUTRON_CONF_DIR)],
96
'services': ['neutron-plugin-openvswitch-agent'],
97
'packages': [[headers_package()] + determine_dkms_package(),
98
['neutron-plugin-openvswitch-agent']],
99
'server_packages': ['neutron-server',
100
'neutron-plugin-openvswitch'],
101
'server_services': ['neutron-server']
104
'config': '/etc/neutron/plugins/nicira/nvp.ini',
105
'driver': 'neutron.plugins.nicira.nicira_nvp_plugin.'
106
'NeutronPlugin.NvpPluginV2',
108
context.SharedDBContext(user=config('neutron-database-user'),
109
database=config('neutron-database'),
110
relation_prefix='neutron',
111
ssl_dir=NEUTRON_CONF_DIR)],
114
'server_packages': ['neutron-server',
115
'neutron-plugin-nicira'],
116
'server_services': ['neutron-server']
119
'config': '/etc/neutron/plugins/vmware/nsx.ini',
122
context.SharedDBContext(user=config('neutron-database-user'),
123
database=config('neutron-database'),
124
relation_prefix='neutron',
125
ssl_dir=NEUTRON_CONF_DIR)],
128
'server_packages': ['neutron-server',
129
'neutron-plugin-vmware'],
130
'server_services': ['neutron-server']
133
'config': '/etc/neutron/plugins/cisco/cisco_plugins.ini',
134
'driver': 'neutron.plugins.cisco.network_plugin.PluginV2',
136
context.SharedDBContext(user=config('neutron-database-user'),
137
database=config('neutron-database'),
138
relation_prefix='neutron',
139
ssl_dir=NEUTRON_CONF_DIR)],
141
'packages': [[headers_package()] + determine_dkms_package(),
142
['neutron-plugin-cisco']],
143
'server_packages': ['neutron-server',
144
'neutron-plugin-cisco'],
145
'server_services': ['neutron-server']
148
'config': '/etc/neutron/plugins/ml2/ml2_conf.ini',
149
'driver': 'neutron.plugins.ml2.plugin.Ml2Plugin',
151
context.SharedDBContext(user=config('neutron-database-user'),
152
database=config('neutron-database'),
153
relation_prefix='neutron',
154
ssl_dir=NEUTRON_CONF_DIR)],
155
'services': ['calico-compute', 'bird', 'neutron-dhcp-agent'],
156
'packages': [[headers_package()] + determine_dkms_package(),
157
['calico-compute', 'bird', 'neutron-dhcp-agent']],
158
'server_packages': ['neutron-server', 'calico-control'],
159
'server_services': ['neutron-server']
162
if release >= 'icehouse':
163
# NOTE: patch in ml2 plugin for icehouse onwards
164
plugins['ovs']['config'] = '/etc/neutron/plugins/ml2/ml2_conf.ini'
165
plugins['ovs']['driver'] = 'neutron.plugins.ml2.plugin.Ml2Plugin'
166
plugins['ovs']['server_packages'] = ['neutron-server',
167
'neutron-plugin-ml2']
168
# NOTE: patch in vmware renames nvp->nsx for icehouse onwards
169
plugins['nvp'] = plugins['nsx']
173
def neutron_plugin_attribute(plugin, attr, net_manager=None):
174
manager = net_manager or network_manager()
175
if manager == 'quantum':
176
plugins = quantum_plugins()
177
elif manager == 'neutron':
178
plugins = neutron_plugins()
180
log("Network manager '%s' does not support plugins." % (manager),
185
_plugin = plugins[plugin]
187
log('Unrecognised plugin for %s: %s' % (manager, plugin), level=ERROR)
196
def network_manager():
198
Deals with the renaming of Quantum to Neutron in H and any situations
199
that require compatability (eg, deploying H with network-manager=quantum,
202
release = os_release('nova-common')
203
manager = config('network-manager').lower()
205
if manager not in ['quantum', 'neutron']:
208
if release in ['essex']:
209
# E does not support neutron
210
log('Neutron networking not supported in Essex.', level=ERROR)
212
elif release in ['folsom', 'grizzly']:
213
# neutron is named quantum in F and G
216
# ensure accurate naming for all releases post-H