~openstack-ubuntu-testing/charms/precise/keystone/trunk

« back to all changes in this revision

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

  • Committer: James Page
  • Date: 2014-04-01 14:45:26 UTC
  • mfrom: (12.40.22 keystone)
  • Revision ID: james.page@canonical.com-20140401144526-vd8mrq450p5i5ns5
MergeĀ icehouseĀ branch

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']).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']).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
    }
 
119
    # NOTE: patch in ml2 plugin for icehouse onwards
 
120
    if release >= 'icehouse':
 
121
        plugins['ovs']['config'] = '/etc/neutron/plugins/ml2/ml2_conf.ini'
 
122
        plugins['ovs']['driver'] = 'neutron.plugins.ml2.plugin.Ml2Plugin'
 
123
        plugins['ovs']['server_packages'] = ['neutron-server',
 
124
                                             'neutron-plugin-ml2']
 
125
    return plugins
 
126
 
 
127
 
 
128
def neutron_plugin_attribute(plugin, attr, net_manager=None):
 
129
    manager = net_manager or network_manager()
 
130
    if manager == 'quantum':
 
131
        plugins = quantum_plugins()
 
132
    elif manager == 'neutron':
 
133
        plugins = neutron_plugins()
 
134
    else:
 
135
        log('Error: Network manager does not support plugins.')
 
136
        raise Exception
 
137
 
 
138
    try:
 
139
        _plugin = plugins[plugin]
 
140
    except KeyError:
 
141
        log('Unrecognised plugin for %s: %s' % (manager, plugin), level=ERROR)
 
142
        raise Exception
 
143
 
 
144
    try:
 
145
        return _plugin[attr]
 
146
    except KeyError:
 
147
        return None
 
148
 
 
149
 
 
150
def network_manager():
 
151
    '''
 
152
    Deals with the renaming of Quantum to Neutron in H and any situations
 
153
    that require compatability (eg, deploying H with network-manager=quantum,
 
154
    upgrading from G).
 
155
    '''
 
156
    release = os_release('nova-common')
 
157
    manager = config('network-manager').lower()
 
158
 
 
159
    if manager not in ['quantum', 'neutron']:
 
160
        return manager
 
161
 
 
162
    if release in ['essex']:
 
163
        # E does not support neutron
 
164
        log('Neutron networking not supported in Essex.', level=ERROR)
 
165
        raise Exception
 
166
    elif release in ['folsom', 'grizzly']:
 
167
        # neutron is named quantum in F and G
 
168
        return 'quantum'
 
169
    else:
 
170
        # ensure accurate naming for all releases post-H
 
171
        return 'neutron'