~nottrobin/charms/trusty/wsgi-app/trunk

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/contrib/openstack/neutron.py

  • Committer: Robin Winslow
  • Date: 2014-12-02 22:54:40 UTC
  • Revision ID: robin@robinwinslow.co.uk-20141202225440-ruuctvfe7pdh1dd8
Try reverting most of charmhelpers to the old version

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Various utilies for dealing with Neutron and the renaming from Quantum.
2
 
 
3
 
from subprocess import check_output
4
 
 
5
 
from charmhelpers.core.hookenv import (
6
 
    config,
7
 
    log,
8
 
    ERROR,
9
 
)
10
 
 
11
 
from charmhelpers.contrib.openstack.utils import os_release
12
 
 
13
 
 
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
19
 
 
20
 
QUANTUM_CONF_DIR = '/etc/quantum'
21
 
 
22
 
 
23
 
def kernel_version():
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]))
28
 
 
29
 
 
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):
34
 
        return []
35
 
    else:
36
 
        return ['openvswitch-datapath-dkms']
37
 
 
38
 
 
39
 
# legacy
40
 
 
41
 
 
42
 
def quantum_plugins():
43
 
    from charmhelpers.contrib.openstack import context
44
 
    return {
45
 
        'ovs': {
46
 
            'config': '/etc/quantum/plugins/openvswitch/'
47
 
                      'ovs_quantum_plugin.ini',
48
 
            'driver': 'quantum.plugins.openvswitch.ovs_quantum_plugin.'
49
 
                      'OVSQuantumPluginV2',
50
 
            'contexts': [
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']
61
 
        },
62
 
        'nvp': {
63
 
            'config': '/etc/quantum/plugins/nicira/nvp.ini',
64
 
            'driver': 'quantum.plugins.nicira.nicira_nvp_plugin.'
65
 
                      'QuantumPlugin.NvpPluginV2',
66
 
            'contexts': [
67
 
                context.SharedDBContext(user=config('neutron-database-user'),
68
 
                                        database=config('neutron-database'),
69
 
                                        relation_prefix='neutron',
70
 
                                        ssl_dir=QUANTUM_CONF_DIR)],
71
 
            'services': [],
72
 
            'packages': [],
73
 
            'server_packages': ['quantum-server',
74
 
                                'quantum-plugin-nicira'],
75
 
            'server_services': ['quantum-server']
76
 
        }
77
 
    }
78
 
 
79
 
NEUTRON_CONF_DIR = '/etc/neutron'
80
 
 
81
 
 
82
 
def neutron_plugins():
83
 
    from charmhelpers.contrib.openstack import context
84
 
    release = os_release('nova-common')
85
 
    plugins = {
86
 
        'ovs': {
87
 
            'config': '/etc/neutron/plugins/openvswitch/'
88
 
                      'ovs_neutron_plugin.ini',
89
 
            'driver': 'neutron.plugins.openvswitch.ovs_neutron_plugin.'
90
 
                      'OVSNeutronPluginV2',
91
 
            'contexts': [
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']
102
 
        },
103
 
        'nvp': {
104
 
            'config': '/etc/neutron/plugins/nicira/nvp.ini',
105
 
            'driver': 'neutron.plugins.nicira.nicira_nvp_plugin.'
106
 
                      'NeutronPlugin.NvpPluginV2',
107
 
            'contexts': [
108
 
                context.SharedDBContext(user=config('neutron-database-user'),
109
 
                                        database=config('neutron-database'),
110
 
                                        relation_prefix='neutron',
111
 
                                        ssl_dir=NEUTRON_CONF_DIR)],
112
 
            'services': [],
113
 
            'packages': [],
114
 
            'server_packages': ['neutron-server',
115
 
                                'neutron-plugin-nicira'],
116
 
            'server_services': ['neutron-server']
117
 
        },
118
 
        'nsx': {
119
 
            'config': '/etc/neutron/plugins/vmware/nsx.ini',
120
 
            'driver': 'vmware',
121
 
            'contexts': [
122
 
                context.SharedDBContext(user=config('neutron-database-user'),
123
 
                                        database=config('neutron-database'),
124
 
                                        relation_prefix='neutron',
125
 
                                        ssl_dir=NEUTRON_CONF_DIR)],
126
 
            'services': [],
127
 
            'packages': [],
128
 
            'server_packages': ['neutron-server',
129
 
                                'neutron-plugin-vmware'],
130
 
            'server_services': ['neutron-server']
131
 
        },
132
 
        'n1kv': {
133
 
            'config': '/etc/neutron/plugins/cisco/cisco_plugins.ini',
134
 
            'driver': 'neutron.plugins.cisco.network_plugin.PluginV2',
135
 
            'contexts': [
136
 
                context.SharedDBContext(user=config('neutron-database-user'),
137
 
                                        database=config('neutron-database'),
138
 
                                        relation_prefix='neutron',
139
 
                                        ssl_dir=NEUTRON_CONF_DIR)],
140
 
            'services': [],
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']
146
 
        },
147
 
        'Calico': {
148
 
            'config': '/etc/neutron/plugins/ml2/ml2_conf.ini',
149
 
            'driver': 'neutron.plugins.ml2.plugin.Ml2Plugin',
150
 
            'contexts': [
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']
160
 
        }
161
 
    }
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']
170
 
    return plugins
171
 
 
172
 
 
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()
179
 
    else:
180
 
        log("Network manager '%s' does not support plugins." % (manager),
181
 
            level=ERROR)
182
 
        raise Exception
183
 
 
184
 
    try:
185
 
        _plugin = plugins[plugin]
186
 
    except KeyError:
187
 
        log('Unrecognised plugin for %s: %s' % (manager, plugin), level=ERROR)
188
 
        raise Exception
189
 
 
190
 
    try:
191
 
        return _plugin[attr]
192
 
    except KeyError:
193
 
        return None
194
 
 
195
 
 
196
 
def network_manager():
197
 
    '''
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,
200
 
    upgrading from G).
201
 
    '''
202
 
    release = os_release('nova-common')
203
 
    manager = config('network-manager').lower()
204
 
 
205
 
    if manager not in ['quantum', 'neutron']:
206
 
        return manager
207
 
 
208
 
    if release in ['essex']:
209
 
        # E does not support neutron
210
 
        log('Neutron networking not supported in Essex.', level=ERROR)
211
 
        raise Exception
212
 
    elif release in ['folsom', 'grizzly']:
213
 
        # neutron is named quantum in F and G
214
 
        return 'quantum'
215
 
    else:
216
 
        # ensure accurate naming for all releases post-H
217
 
        return 'neutron'