author | Laszlo Peter <laszlo.peter@oracle.com> |
Wed, 07 Sep 2016 14:48:41 -0700 | |
changeset 6848 | 8e252a37ed0d |
parent 6153 | e1758cabe679 |
permissions | -rw-r--r-- |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
1 |
# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
2 |
|
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
3 |
# Copyright 2012 OpenStack Foundation |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
4 |
# All Rights Reserved. |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
5 |
# |
6031
1aaf20a19738
PSARC/2016/251 OpenStack Neutron ML2 framework and OVS mechanism driver
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
5405
diff
changeset
|
6 |
# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
7 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
8 |
# Licensed under the Apache License, Version 2.0 (the "License"); you may |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
9 |
# not use this file except in compliance with the License. You may obtain |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
10 |
# a copy of the License at |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
11 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
12 |
# http://www.apache.org/licenses/LICENSE-2.0 |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
13 |
# |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
14 |
# Unless required by applicable law or agreed to in writing, software |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
15 |
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
16 |
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
17 |
# License for the specific language governing permissions and limitations |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
18 |
# under the License. |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
19 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
20 |
import abc |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
21 |
import netaddr |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
22 |
import os |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
23 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
24 |
from oslo_config import cfg |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
25 |
from oslo_log import log as logging |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
26 |
from oslo_utils import excutils |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
27 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
28 |
from neutron._i18n import _, _LI, _LW, _LE |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
29 |
from neutron.agent.linux import dhcp |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
30 |
from neutron.agent.linux import utils |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
31 |
from neutron.agent.solaris import net_lib |
3524
ad6a9e0880b9
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
32 |
from neutron.common import constants |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
33 |
from neutron.common import exceptions |
4975
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
34 |
from neutron.common import ipv6_utils |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
35 |
|
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
36 |
LOG = logging.getLogger(__name__) |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
37 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
38 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
39 |
class Dnsmasq(dhcp.Dnsmasq): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
40 |
""" Wrapper around Linux implementation of Dnsmasq.""" |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
41 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
42 |
def __init__(self, conf, network, process_monitor, version=None, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
43 |
plugin=None): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
44 |
super(Dnsmasq, self).__init__(conf, network, process_monitor, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
45 |
version, plugin) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
46 |
self.device_manager = DeviceManager(self.conf, plugin) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
47 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
48 |
# overrides method in DhcpLocalProcess due to no namespace support |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
49 |
def _destroy_namespace_and_port(self): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
50 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
51 |
self.device_manager.destroy(self.network, self.interface_name) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
52 |
except RuntimeError: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
53 |
LOG.warning(_LW('Failed trying to delete interface: %s'), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
54 |
self.interface_name) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
55 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
56 |
def _build_cmdline_callback(self, pid_file): |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
57 |
# We ignore local resolv.conf if dns servers are specified |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
58 |
# or if local resolution is explicitly disabled. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
59 |
_no_resolv = ( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
60 |
'--no-resolv' if self.conf.dnsmasq_dns_servers or |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
61 |
not self.conf.dnsmasq_local_resolv else '') |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
62 |
cmd = [ |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
63 |
'/usr/lib/inet/dnsmasq', |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
64 |
'--no-hosts', |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
65 |
_no_resolv, |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
66 |
'--strict-order', |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
67 |
'--bind-interfaces', |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
68 |
'--interface=%s' % self.interface_name, |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
69 |
'--except-interface=lo0', |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
70 |
'--pid-file=%s' % pid_file, |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
71 |
'--dhcp-hostsfile=%s' % self.get_conf_file_name('host'), |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
72 |
'--addn-hosts=%s' % self.get_conf_file_name('addn_hosts'), |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
73 |
'--dhcp-optsfile=%s' % self.get_conf_file_name('opts'), |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
74 |
'--dhcp-leasefile=%s' % self.get_conf_file_name('leases'), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
75 |
'--dhcp-match=set:ipxe,175', |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
76 |
] |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
77 |
|
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
78 |
possible_leases = 0 |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
79 |
for i, subnet in enumerate(self.network.subnets): |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
80 |
mode = None |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
81 |
# if a subnet is specified to have dhcp disabled |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
82 |
if not subnet.enable_dhcp: |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
83 |
continue |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
84 |
if subnet.ip_version == 4: |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
85 |
mode = 'static' |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
86 |
else: |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
87 |
# We need to also set the DUID for the DHCPv6 server to use |
1872
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
88 |
macaddr_cmd = ['/usr/sbin/dladm', 'show-linkprop', |
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
89 |
'-co', 'value', '-p', 'mac-address', |
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
90 |
self.interface_name] |
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
91 |
stdout = utils.execute(macaddr_cmd) |
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
92 |
uid = stdout.splitlines()[0].strip() |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
93 |
# format the MAC address |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
94 |
uid = ':'.join(['%.2x' % w for w in netaddr.EUI(uid).words]) |
1872
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
95 |
# IANA assigned ID for Oracle |
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
96 |
enterprise_id = '111' |
0b81e3d9f3ae
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1760
diff
changeset
|
97 |
cmd.append('--dhcp-duid=%s,%s' % (enterprise_id, uid)) |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
98 |
|
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
99 |
# Note(scollins) If the IPv6 attributes are not set, set it as |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
100 |
# static to preserve previous behavior |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
101 |
addr_mode = getattr(subnet, 'ipv6_address_mode', None) |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
102 |
ra_mode = getattr(subnet, 'ipv6_ra_mode', None) |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
103 |
if (addr_mode in [constants.DHCPV6_STATEFUL, |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
104 |
constants.DHCPV6_STATELESS] or |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
105 |
not addr_mode and not ra_mode): |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
106 |
mode = 'static' |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
107 |
|
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
108 |
cidr = netaddr.IPNetwork(subnet.cidr) |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
109 |
|
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
110 |
if self.conf.dhcp_lease_duration == -1: |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
111 |
lease = 'infinite' |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
112 |
else: |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
113 |
lease = '%ss' % self.conf.dhcp_lease_duration |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
114 |
|
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
115 |
# mode is optional and is not set - skip it |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
116 |
if mode: |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
117 |
if subnet.ip_version == 4: |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
118 |
cmd.append('--dhcp-range=%s%s,%s,%s,%s' % |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
119 |
('set:', self._TAG_PREFIX % i, |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
120 |
cidr.network, mode, lease)) |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
121 |
else: |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
122 |
cmd.append('--dhcp-range=%s%s,%s,%s,%d,%s' % |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
123 |
('set:', self._TAG_PREFIX % i, |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
124 |
cidr.network, mode, |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
125 |
cidr.prefixlen, lease)) |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
126 |
possible_leases += cidr.size |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
127 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
128 |
if cfg.CONF.advertise_mtu: |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
129 |
mtu = getattr(self.network, 'mtu', 0) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
130 |
# Do not advertise unknown mtu |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
131 |
if mtu > 0: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
132 |
cmd.append('--dhcp-option-force=option:mtu,%d' % mtu) |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
133 |
|
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
134 |
# Cap the limit because creating lots of subnets can inflate |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
135 |
# this possible lease cap. |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
136 |
cmd.append('--dhcp-lease-max=%d' % |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
137 |
min(possible_leases, self.conf.dnsmasq_lease_max)) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
138 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
139 |
cmd.append('--conf-file=%s' % self.conf.dnsmasq_config_file) |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
140 |
if self.conf.dnsmasq_dns_servers: |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
141 |
cmd.extend( |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
142 |
'--server=%s' % server |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
143 |
for server in self.conf.dnsmasq_dns_servers) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
144 |
|
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
145 |
if self.conf.dhcp_domain: |
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
146 |
cmd.append('--domain=%s' % self.conf.dhcp_domain) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
147 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
148 |
if self.conf.dhcp_broadcast_reply: |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
149 |
cmd.append('--dhcp-broadcast') |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
150 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
151 |
if self.conf.dnsmasq_base_log_dir: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
152 |
log_dir = os.path.join( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
153 |
self.conf.dnsmasq_base_log_dir, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
154 |
self.network.id) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
155 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
156 |
if not os.path.exists(log_dir): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
157 |
os.makedirs(log_dir) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
158 |
except OSError: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
159 |
LOG.error(_LE('Error while create dnsmasq log dir: %s'), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
160 |
log_dir) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
161 |
else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
162 |
log_filename = os.path.join(log_dir, 'dhcp_dns_log') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
163 |
cmd.append('--log-queries') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
164 |
cmd.append('--log-dhcp') |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
165 |
cmd.append('--log-facility=%s' % log_filename) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
166 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
167 |
return cmd |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
168 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
169 |
def _release_lease(self, mac_address, ip, client_id): |
1987
6fa18b7a0af6
19158668 associating a new floating ip removes existing ipnat rules and re-adds them
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1944
diff
changeset
|
170 |
"""Release a DHCP lease.""" |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
171 |
if netaddr.IPAddress(ip).version == constants.IP_VERSION_6: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
172 |
# Note(SridharG) dhcp_release is only supported for IPv4 |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
173 |
# addresses. For more details, please refer to man page. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
174 |
return |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
175 |
|
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
176 |
cmd = ['/usr/lib/inet/dhcp_release', self.interface_name, |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
177 |
ip, mac_address] |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
178 |
if client_id: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
179 |
cmd.append(client_id) |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
180 |
utils.execute(cmd) |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
181 |
|
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
182 |
def _make_subnet_interface_ip_map(self): |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
183 |
# TODO(gmoodalb): need to complete this when we support metadata |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
184 |
# in neutron-dhcp-agent as-well for isolated subnets |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
185 |
pass |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
186 |
|
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
187 |
@classmethod |
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
188 |
def should_enable_metadata(cls, conf, network): |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
189 |
# TODO(gmoodalb): need to complete this when we support metadata |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
190 |
# in neutron-dhcp-agent as-well for isolated subnets |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
191 |
return False |
1760
353323c7bdc1
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
192 |
|
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
193 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
194 |
class DeviceManager(dhcp.DeviceManager): |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
195 |
|
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
196 |
def __init__(self, conf, plugin): |
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
197 |
super(DeviceManager, self).__init__(conf, plugin) |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
198 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
199 |
def _set_default_route(self, network, device_name): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
200 |
"""Sets the default gateway for this dhcp namespace. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
201 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
202 |
This method is idempotent and will only adjust the route if adjusting |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
203 |
it would change it from what it already is. This makes it safe to call |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
204 |
and avoids unnecessary perturbation of the system. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
205 |
""" |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
206 |
pass |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
207 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
208 |
def _setup_existing_dhcp_port(self, network, device_id, dhcp_subnets): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
209 |
"""Set up the existing DHCP port, if there is one.""" |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
210 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
211 |
# To avoid pylint thinking that port might be undefined after |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
212 |
# the following loop... |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
213 |
port = None |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
214 |
|
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
215 |
# Look for an existing DHCP port for this network. |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
216 |
for port in network.ports: |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
217 |
port_device_id = getattr(port, 'device_id', None) |
3524
ad6a9e0880b9
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
218 |
port_device_owner = getattr(port, 'device_owner', None) |
ad6a9e0880b9
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
1987
diff
changeset
|
219 |
if (port_device_id == device_id or |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
220 |
(port_device_owner == constants.DEVICE_OWNER_DHCP and |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
221 |
port_device_id.startswith('dhcp'))): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
222 |
# If using gateway IPs on this port, we can skip the |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
223 |
# following code, whose purpose is just to review and |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
224 |
# update the Neutron-allocated IP addresses for the |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
225 |
# port. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
226 |
if self.driver.use_gateway_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
227 |
return port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
228 |
# Otherwise break out, as we now have the DHCP port |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
229 |
# whose subnets and addresses we need to review. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
230 |
break |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
231 |
else: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
232 |
return None |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
233 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
234 |
# Compare what the subnets should be against what is already |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
235 |
# on the port. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
236 |
dhcp_enabled_subnet_ids = set(dhcp_subnets) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
237 |
port_subnet_ids = set(ip.subnet_id for ip in port.fixed_ips) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
238 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
239 |
# If those differ, we need to call update. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
240 |
if dhcp_enabled_subnet_ids != port_subnet_ids: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
241 |
# Collect the subnets and fixed IPs that the port already |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
242 |
# has, for subnets that are still in the DHCP-enabled set. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
243 |
wanted_fixed_ips = [] |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
244 |
for fixed_ip in port.fixed_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
245 |
if fixed_ip.subnet_id in dhcp_enabled_subnet_ids: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
246 |
wanted_fixed_ips.append( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
247 |
{'subnet_id': fixed_ip.subnet_id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
248 |
'ip_address': fixed_ip.ip_address}) |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
249 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
250 |
# Add subnet IDs for new DHCP-enabled subnets. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
251 |
wanted_fixed_ips.extend( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
252 |
dict(subnet_id=s) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
253 |
for s in dhcp_enabled_subnet_ids - port_subnet_ids) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
254 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
255 |
# Update the port to have the calculated subnets and fixed |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
256 |
# IPs. The Neutron server will allocate a fresh IP for |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
257 |
# each subnet that doesn't already have one. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
258 |
port = self.plugin.update_dhcp_port( |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
259 |
port.id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
260 |
{'port': {'network_id': network.id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
261 |
'fixed_ips': wanted_fixed_ips}}) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
262 |
if not port: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
263 |
raise exceptions.Conflict() |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
264 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
265 |
return port |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
266 |
|
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
267 |
def setup(self, network): |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
268 |
"""Create and initialize a device for network's DHCP on this host.""" |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
269 |
port = self.setup_dhcp_port(network) |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
270 |
self._update_dhcp_port(network, port) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
271 |
interface_name = self.get_interface_name(network, port) |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
272 |
|
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
273 |
if net_lib.Datalink.datalink_exists(interface_name): |
5405
66fd59fecd68
PSARC 2015/535 OpenStack service updates for Kilo
Devjani Ray <devjani.ray@oracle.com>
parents:
4975
diff
changeset
|
274 |
LOG.debug('Reusing existing device: %s.', interface_name) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
275 |
else: |
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
276 |
try: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
277 |
self.driver.plug(network.tenant_id, network.id, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
278 |
port.id, interface_name, port.mac_address, |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
279 |
network=network, mtu=network.get('mtu'), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
280 |
vif_type=getattr(port, 'binding:vif_type', |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
281 |
None)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
282 |
except Exception: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
283 |
with excutils.save_and_reraise_exception(): |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
284 |
LOG.exception(_LE('Unable to plug DHCP port for ' |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
285 |
'network %s. Releasing port.'), |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
286 |
network.id) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
287 |
self.plugin.release_dhcp_port(network.id, port.device_id) |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
288 |
ip_cidrs = [] |
4975
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
289 |
addrconf = False |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
290 |
for fixed_ip in port.fixed_ips: |
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
291 |
subnet = fixed_ip.subnet |
4975
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
292 |
if not ipv6_utils.is_auto_address_subnet(subnet): |
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
293 |
net = netaddr.IPNetwork(subnet.cidr) |
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
294 |
ip_cidr = '%s/%s' % (fixed_ip.ip_address, net.prefixlen) |
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
295 |
ip_cidrs.append(ip_cidr) |
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
296 |
else: |
6445e44cfccd
21978756 addrconf addresses must be created for stateless and slaac Neutron subnets
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3998
diff
changeset
|
297 |
addrconf = True |
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
298 |
|
6848
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
299 |
if self.driver.use_gateway_ips: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
300 |
# For each DHCP-enabled subnet, add that subnet's gateway |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
301 |
# IP address to the Linux device for the DHCP port. |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
302 |
for subnet in network.subnets: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
303 |
if not subnet.enable_dhcp: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
304 |
continue |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
305 |
gateway = subnet.gateway_ip |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
306 |
if gateway: |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
307 |
net = netaddr.IPNetwork(subnet.cidr) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
308 |
ip_cidrs.append('%s/%s' % (gateway, net.prefixlen)) |
8e252a37ed0d
PSARC 2016/268 Neutron EVS Plugin EOF
Laszlo Peter <laszlo.peter@oracle.com>
parents:
6153
diff
changeset
|
309 |
|
6130
9a454a2f1c35
23506589 Need to modify args passed to dnsmasq in solaris/dhcp.py
Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
parents:
6123
diff
changeset
|
310 |
self.driver.init_l3(interface_name, ip_cidrs, addrconf=addrconf) |
3998
5bd484384122
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3524
diff
changeset
|
311 |
|
1944
56ac2df1785b
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
1872
diff
changeset
|
312 |
return interface_name |