~lazypower/charms/trusty/keystone/fix_proof

« back to all changes in this revision

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

  • Committer: Ante Karamatic
  • Date: 2014-02-25 11:34:13 UTC
  • Revision ID: ivoks@ubuntu.com-20140225113413-tlm02x1ibc6xb10d
Rewrite charm to get it more in line with other OpenStack charms.

Added support for contexts and templating. Makes use of charm-helpers
instead of relaying on its own tools (probably could use some additional work).

HA is currently non-functional. ETA for fixing: less than 2 days.

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
 
 
21
# legacy
 
22
def quantum_plugins():
 
23
    from charmhelpers.contrib.openstack import context
 
24
    return {
 
25
        'ovs': {
 
26
            'config': '/etc/quantum/plugins/openvswitch/'
 
27
                      'ovs_quantum_plugin.ini',
 
28
            'driver': 'quantum.plugins.openvswitch.ovs_quantum_plugin.'
 
29
                      'OVSQuantumPluginV2',
 
30
            'contexts': [
 
31
                context.SharedDBContext(user=config('neutron-database-user'),
 
32
                                        database=config('neutron-database'),
 
33
                                        relation_prefix='neutron')],
 
34
            'services': ['quantum-plugin-openvswitch-agent'],
 
35
            'packages': [[headers_package(), 'openvswitch-datapath-dkms'],
 
36
                         ['quantum-plugin-openvswitch-agent']],
 
37
            'server_packages': ['quantum-server',
 
38
                                'quantum-plugin-openvswitch'],
 
39
            'server_services': ['quantum-server']
 
40
        },
 
41
        'nvp': {
 
42
            'config': '/etc/quantum/plugins/nicira/nvp.ini',
 
43
            'driver': 'quantum.plugins.nicira.nicira_nvp_plugin.'
 
44
                      'QuantumPlugin.NvpPluginV2',
 
45
            'contexts': [
 
46
                context.SharedDBContext(user=config('neutron-database-user'),
 
47
                                        database=config('neutron-database'),
 
48
                                        relation_prefix='neutron')],
 
49
            'services': [],
 
50
            'packages': [],
 
51
            'server_packages': ['quantum-server',
 
52
                                'quantum-plugin-nicira'],
 
53
            'server_services': ['quantum-server']
 
54
        }
 
55
    }
 
56
 
 
57
 
 
58
def neutron_plugins():
 
59
    from charmhelpers.contrib.openstack import context
 
60
    return {
 
61
        'ovs': {
 
62
            'config': '/etc/neutron/plugins/openvswitch/'
 
63
                      'ovs_neutron_plugin.ini',
 
64
            'driver': 'neutron.plugins.openvswitch.ovs_neutron_plugin.'
 
65
                      'OVSNeutronPluginV2',
 
66
            'contexts': [
 
67
                context.SharedDBContext(user=config('neutron-database-user'),
 
68
                                        database=config('neutron-database'),
 
69
                                        relation_prefix='neutron')],
 
70
            'services': ['neutron-plugin-openvswitch-agent'],
 
71
            'packages': [[headers_package(), 'openvswitch-datapath-dkms'],
 
72
                         ['quantum-plugin-openvswitch-agent']],
 
73
            'server_packages': ['neutron-server',
 
74
                                'neutron-plugin-openvswitch'],
 
75
            'server_services': ['neutron-server']
 
76
        },
 
77
        'nvp': {
 
78
            'config': '/etc/neutron/plugins/nicira/nvp.ini',
 
79
            'driver': 'neutron.plugins.nicira.nicira_nvp_plugin.'
 
80
                      'NeutronPlugin.NvpPluginV2',
 
81
            'contexts': [
 
82
                context.SharedDBContext(user=config('neutron-database-user'),
 
83
                                        database=config('neutron-database'),
 
84
                                        relation_prefix='neutron')],
 
85
            'services': [],
 
86
            'packages': [],
 
87
            'server_packages': ['neutron-server',
 
88
                                'neutron-plugin-nicira'],
 
89
            'server_services': ['neutron-server']
 
90
        }
 
91
    }
 
92
 
 
93
 
 
94
def neutron_plugin_attribute(plugin, attr, net_manager=None):
 
95
    manager = net_manager or network_manager()
 
96
    if manager == 'quantum':
 
97
        plugins = quantum_plugins()
 
98
    elif manager == 'neutron':
 
99
        plugins = neutron_plugins()
 
100
    else:
 
101
        log('Error: Network manager does not support plugins.')
 
102
        raise Exception
 
103
 
 
104
    try:
 
105
        _plugin = plugins[plugin]
 
106
    except KeyError:
 
107
        log('Unrecognised plugin for %s: %s' % (manager, plugin), level=ERROR)
 
108
        raise Exception
 
109
 
 
110
    try:
 
111
        return _plugin[attr]
 
112
    except KeyError:
 
113
        return None
 
114
 
 
115
 
 
116
def network_manager():
 
117
    '''
 
118
    Deals with the renaming of Quantum to Neutron in H and any situations
 
119
    that require compatability (eg, deploying H with network-manager=quantum,
 
120
    upgrading from G).
 
121
    '''
 
122
    release = os_release('nova-common')
 
123
    manager = config('network-manager').lower()
 
124
 
 
125
    if manager not in ['quantum', 'neutron']:
 
126
        return manager
 
127
 
 
128
    if release in ['essex']:
 
129
        # E does not support neutron
 
130
        log('Neutron networking not supported in Essex.', level=ERROR)
 
131
        raise Exception
 
132
    elif release in ['folsom', 'grizzly']:
 
133
        # neutron is named quantum in F and G
 
134
        return 'quantum'
 
135
    else:
 
136
        # ensure accurate naming for all releases post-H
 
137
        return 'neutron'