author | Danek Duvall <danek.duvall@oracle.com> |
Mon, 20 Apr 2015 12:35:51 -0700 | |
branch | s11u2-sru |
changeset 4156 | 4b1def16fe9b |
parent 3619 | 639868f63ef4 |
permissions | -rw-r--r-- |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
1 |
# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
2 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
3 |
# Copyright 2012 OpenStack Foundation |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
4 |
# All Rights Reserved. |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
5 |
# |
3619
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
6 |
# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
7 |
# |
5e73a3a3f66a
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 |
5e73a3a3f66a
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 |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
10 |
# a copy of the License at |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
11 |
# |
5e73a3a3f66a
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 |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
13 |
# |
5e73a3a3f66a
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 |
5e73a3a3f66a
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 |
5e73a3a3f66a
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 |
5e73a3a3f66a
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 |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
18 |
# under the License. |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
19 |
# |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
20 |
# @author: Girish Moodalbail, Oracle, Inc. |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
21 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
22 |
import abc |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
23 |
import collections |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
24 |
import os |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
25 |
import re |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
26 |
import shutil |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
27 |
import socket |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
28 |
import sys |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
29 |
import uuid |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
30 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
31 |
import netaddr |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
32 |
from oslo.config import cfg |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
33 |
import six |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
34 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
35 |
from neutron.agent.linux import utils |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
36 |
from neutron.agent.solaris import net_lib |
3619
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
37 |
from neutron.common import constants |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
38 |
from neutron.common import exceptions |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
39 |
from neutron.openstack.common import importutils |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
40 |
from neutron.openstack.common import jsonutils |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
41 |
from neutron.openstack.common import log as logging |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
42 |
from neutron.openstack.common import uuidutils |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
43 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
44 |
LOG = logging.getLogger(__name__) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
45 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
46 |
OPTS = [ |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
47 |
cfg.StrOpt('dhcp_confs', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
48 |
default='$state_path/dhcp', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
49 |
help=_('Location to store DHCP server config files')), |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
50 |
cfg.StrOpt('dhcp_domain', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
51 |
default='openstacklocal', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
52 |
help=_('Domain to use for building the hostnames')), |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
53 |
cfg.StrOpt('dnsmasq_config_file', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
54 |
default='', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
55 |
help=_('Override the default dnsmasq settings with this file')), |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
56 |
cfg.ListOpt('dnsmasq_dns_servers', |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
57 |
help=_('Comma-separated list of the DNS servers which will be ' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
58 |
'used as forwarders.'), |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
59 |
deprecated_name='dnsmasq_dns_server'), |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
60 |
cfg.BoolOpt('dhcp_delete_namespaces', default=False, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
61 |
help=_("Delete namespace after removing a dhcp server.")), |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
62 |
cfg.IntOpt( |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
63 |
'dnsmasq_lease_max', |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
64 |
default=(2 ** 24), |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
65 |
help=_('Limit number of leases to prevent a denial-of-service.')), |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
66 |
] |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
67 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
68 |
IPV4 = 4 |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
69 |
IPV6 = 6 |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
70 |
UDP = 'udp' |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
71 |
TCP = 'tcp' |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
72 |
DNS_PORT = 53 |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
73 |
DHCPV4_PORT = 67 |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
74 |
DHCPV6_PORT = 547 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
75 |
METADATA_DEFAULT_PREFIX = 16 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
76 |
METADATA_DEFAULT_IP = '169.254.169.254' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
77 |
METADATA_DEFAULT_CIDR = '%s/%d' % (METADATA_DEFAULT_IP, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
78 |
METADATA_DEFAULT_PREFIX) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
79 |
METADATA_PORT = 80 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
80 |
WIN2k3_STATIC_DNS = 249 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
81 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
82 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
83 |
class DictModel(dict): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
84 |
"""Convert dict into an object that provides attribute access to values.""" |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
85 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
86 |
def __init__(self, *args, **kwargs): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
87 |
"""Convert dict values to DictModel values.""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
88 |
super(DictModel, self).__init__(*args, **kwargs) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
89 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
90 |
def needs_upgrade(item): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
91 |
"""Check if `item` is a dict and needs to be changed to DictModel. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
92 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
93 |
return isinstance(item, dict) and not isinstance(item, DictModel) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
94 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
95 |
def upgrade(item): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
96 |
"""Upgrade item if it needs to be upgraded.""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
97 |
if needs_upgrade(item): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
98 |
return DictModel(item) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
99 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
100 |
return item |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
101 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
102 |
for key, value in self.iteritems(): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
103 |
if isinstance(value, (list, tuple)): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
104 |
# Keep the same type but convert dicts to DictModels |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
105 |
self[key] = type(value)( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
106 |
(upgrade(item) for item in value) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
107 |
) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
108 |
elif needs_upgrade(value): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
109 |
# Change dict instance values to DictModel instance values |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
110 |
self[key] = DictModel(value) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
111 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
112 |
def __getattr__(self, name): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
113 |
try: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
114 |
return self[name] |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
115 |
except KeyError as e: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
116 |
raise AttributeError(e) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
117 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
118 |
def __setattr__(self, name, value): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
119 |
self[name] = value |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
120 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
121 |
def __delattr__(self, name): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
122 |
del self[name] |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
123 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
124 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
125 |
class NetModel(DictModel): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
126 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
127 |
def __init__(self, use_namespaces, d): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
128 |
super(NetModel, self).__init__(d) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
129 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
130 |
self._ns_name = None |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
131 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
132 |
@property |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
133 |
def namespace(self): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
134 |
return self._ns_name |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
135 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
136 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
137 |
@six.add_metaclass(abc.ABCMeta) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
138 |
class DhcpBase(object): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
139 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
140 |
def __init__(self, conf, network, root_helper='sudo', |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
141 |
version=None, plugin=None): |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
142 |
self.conf = conf |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
143 |
self.network = network |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
144 |
self.root_helper = None |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
145 |
self.device_manager = DeviceManager(self.conf, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
146 |
self.root_helper, plugin) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
147 |
self.version = version |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
148 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
149 |
@abc.abstractmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
150 |
def enable(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
151 |
"""Enables DHCP for this network.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
152 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
153 |
@abc.abstractmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
154 |
def disable(self, retain_port=False): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
155 |
"""Disable dhcp for this network.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
156 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
157 |
def restart(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
158 |
"""Restart the dhcp service for the network.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
159 |
self.disable(retain_port=True) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
160 |
self.enable() |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
161 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
162 |
@abc.abstractproperty |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
163 |
def active(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
164 |
"""Boolean representing the running state of the DHCP server.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
165 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
166 |
@abc.abstractmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
167 |
def reload_allocations(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
168 |
"""Force the DHCP server to reload the assignment database.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
169 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
170 |
@classmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
171 |
def existing_dhcp_networks(cls, conf, root_helper): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
172 |
"""Return a list of existing networks ids that we have configs for.""" |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
173 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
174 |
raise NotImplementedError() |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
175 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
176 |
@classmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
177 |
def check_version(cls): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
178 |
"""Execute version checks on DHCP server.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
179 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
180 |
raise NotImplementedError() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
181 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
182 |
@classmethod |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
183 |
def get_isolated_subnets(cls, network): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
184 |
"""Returns a dict indicating whether or not a subnet is isolated""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
185 |
raise NotImplementedError() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
186 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
187 |
@classmethod |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
188 |
def should_enable_metadata(cls, conf, network): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
189 |
"""True if the metadata-proxy should be enabled for the network.""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
190 |
raise NotImplementedError() |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
191 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
192 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
193 |
class DhcpLocalProcess(DhcpBase): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
194 |
PORTS = [] |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
195 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
196 |
def _enable_dhcp(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
197 |
"""check if there is a subnet within the network with dhcp enabled.""" |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
198 |
for subnet in self.network.subnets: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
199 |
if subnet.enable_dhcp: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
200 |
return True |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
201 |
return False |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
202 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
203 |
def enable(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
204 |
"""Enables DHCP for this network by spawning a local process.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
205 |
if self.active: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
206 |
self.restart() |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
207 |
elif self._enable_dhcp(): |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
208 |
interface_name = self.device_manager.setup(self.network) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
209 |
self.interface_name = interface_name |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
210 |
self.spawn_process() |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
211 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
212 |
def disable(self, retain_port=False): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
213 |
"""Disable DHCP for this network by killing the local process.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
214 |
pid = self.pid |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
215 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
216 |
if pid: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
217 |
if self.active: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
218 |
cmd = ['kill', '-9', pid] |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
219 |
utils.execute(cmd, self.root_helper) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
220 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
221 |
LOG.debug(_('DHCP for %(net_id)s is stale, pid %(pid)d ' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
222 |
'does not exist, performing cleanup'), |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
223 |
{'net_id': self.network.id, 'pid': pid}) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
224 |
if not retain_port: |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
225 |
self.device_manager.destroy(self.network, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
226 |
self.interface_name) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
227 |
else: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
228 |
LOG.debug(_('No DHCP started for %s'), self.network.id) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
229 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
230 |
self._remove_config_files() |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
231 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
232 |
def _remove_config_files(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
233 |
confs_dir = os.path.abspath(os.path.normpath(self.conf.dhcp_confs)) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
234 |
conf_dir = os.path.join(confs_dir, self.network.id) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
235 |
shutil.rmtree(conf_dir, ignore_errors=True) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
236 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
237 |
def get_conf_file_name(self, kind, ensure_conf_dir=False): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
238 |
"""Returns the file name for a given kind of config file.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
239 |
confs_dir = os.path.abspath(os.path.normpath(self.conf.dhcp_confs)) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
240 |
conf_dir = os.path.join(confs_dir, self.network.id) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
241 |
if ensure_conf_dir: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
242 |
if not os.path.isdir(conf_dir): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
243 |
os.makedirs(conf_dir, 0o755) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
244 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
245 |
return os.path.join(conf_dir, kind) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
246 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
247 |
def _get_value_from_conf_file(self, kind, converter=None): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
248 |
"""A helper function to read a value from one of the state files.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
249 |
file_name = self.get_conf_file_name(kind) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
250 |
msg = _('Error while reading %s') |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
251 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
252 |
try: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
253 |
with open(file_name, 'r') as f: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
254 |
try: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
255 |
return converter and converter(f.read()) or f.read() |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
256 |
except ValueError: |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
257 |
msg = _('Unable to convert value in %s') |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
258 |
except IOError: |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
259 |
msg = _('Unable to access %s') |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
260 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
261 |
LOG.debug(msg % file_name) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
262 |
return None |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
263 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
264 |
@property |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
265 |
def pid(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
266 |
"""Last known pid for the DHCP process spawned for this network.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
267 |
return self._get_value_from_conf_file('pid', int) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
268 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
269 |
@property |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
270 |
def active(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
271 |
pid = self.pid |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
272 |
if pid is None: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
273 |
return False |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
274 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
275 |
cmd = ['/usr/bin/pargs', pid] |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
276 |
try: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
277 |
return self.network.id in utils.execute(cmd) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
278 |
except RuntimeError: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
279 |
return False |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
280 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
281 |
@property |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
282 |
def interface_name(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
283 |
return self._get_value_from_conf_file('interface') |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
284 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
285 |
@interface_name.setter |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
286 |
def interface_name(self, value): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
287 |
interface_file_path = self.get_conf_file_name('interface', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
288 |
ensure_conf_dir=True) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
289 |
utils.replace_file(interface_file_path, value) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
290 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
291 |
@abc.abstractmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
292 |
def spawn_process(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
293 |
pass |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
294 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
295 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
296 |
class Dnsmasq(DhcpLocalProcess): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
297 |
# The ports that need to be opened when security policies are active |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
298 |
# on the Neutron port used for DHCP. These are provided as a convenience |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
299 |
# for users of this class. |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
300 |
PORTS = {IPV4: [(UDP, DNS_PORT), (TCP, DNS_PORT), (UDP, DHCPV4_PORT)], |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
301 |
IPV6: [(UDP, DNS_PORT), (TCP, DNS_PORT), (UDP, DHCPV6_PORT)], |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
302 |
} |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
303 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
304 |
_TAG_PREFIX = 'tag%d' |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
305 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
306 |
NEUTRON_NETWORK_ID_KEY = 'NEUTRON_NETWORK_ID' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
307 |
NEUTRON_RELAY_SOCKET_PATH_KEY = 'NEUTRON_RELAY_SOCKET_PATH' |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
308 |
MINIMUM_VERSION = 2.63 |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
309 |
MINIMUM_IPV6_VERSION = 2.67 |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
310 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
311 |
@classmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
312 |
def check_version(cls): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
313 |
ver = 0 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
314 |
try: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
315 |
cmd = ['/usr/lib/inet/dnsmasq', '--version'] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
316 |
out = utils.execute(cmd) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
317 |
ver = re.findall("\d+.\d+", out)[0] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
318 |
is_valid_version = float(ver) >= cls.MINIMUM_VERSION |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
319 |
# For Solaris, we rely on the packaging system to ensure a |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
320 |
# matching/supported version of dnsmasq. |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
321 |
if not is_valid_version: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
322 |
LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. ' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
323 |
'DHCP AGENT MAY NOT RUN CORRECTLY! ' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
324 |
'Please ensure that its version is %s ' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
325 |
'or above!'), cls.MINIMUM_VERSION) |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
326 |
raise SystemExit(1) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
327 |
is_valid_version = float(ver) >= cls.MINIMUM_IPV6_VERSION |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
328 |
if not is_valid_version: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
329 |
LOG.warning(_('FAILED VERSION REQUIREMENT FOR DNSMASQ. ' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
330 |
'DHCP AGENT MAY NOT RUN CORRECTLY WHEN ' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
331 |
'SERVING IPV6 STATEFUL SUBNETS! ' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
332 |
'Please ensure that its version is %s ' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
333 |
'or above!'), cls.MINIMUM_IPV6_VERSION) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
334 |
except (OSError, RuntimeError, IndexError, ValueError): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
335 |
LOG.warning(_('Unable to determine dnsmasq version. ' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
336 |
'Please ensure that its version is %s ' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
337 |
'or above!'), cls.MINIMUM_VERSION) |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
338 |
raise SystemExit(1) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
339 |
return float(ver) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
340 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
341 |
@classmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
342 |
def existing_dhcp_networks(cls, conf, root_helper): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
343 |
"""Return a list of existing networks ids that we have configs for.""" |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
344 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
345 |
confs_dir = os.path.abspath(os.path.normpath(conf.dhcp_confs)) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
346 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
347 |
return [ |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
348 |
c for c in os.listdir(confs_dir) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
349 |
if uuidutils.is_uuid_like(c) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
350 |
] |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
351 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
352 |
def spawn_process(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
353 |
"""Spawns a Dnsmasq process for the network.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
354 |
env = { |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
355 |
self.NEUTRON_NETWORK_ID_KEY: self.network.id, |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
356 |
} |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
357 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
358 |
cmd = [ |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
359 |
'/usr/lib/inet/dnsmasq', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
360 |
'--no-hosts', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
361 |
'--no-resolv', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
362 |
'--strict-order', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
363 |
'--bind-interfaces', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
364 |
'--interface=%s' % self.interface_name, |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
365 |
'--except-interface=lo0', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
366 |
'--pid-file=%s' % self.get_conf_file_name( |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
367 |
'pid', ensure_conf_dir=True), |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
368 |
'--dhcp-hostsfile=%s' % self._output_hosts_file(), |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
369 |
'--addn-hosts=%s' % self._output_addn_hosts_file(), |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
370 |
'--dhcp-optsfile=%s' % self._output_opts_file(), |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
371 |
'--leasefile-ro', |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
372 |
] |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
373 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
374 |
possible_leases = 0 |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
375 |
for i, subnet in enumerate(self.network.subnets): |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
376 |
mode = None |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
377 |
# if a subnet is specified to have dhcp disabled |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
378 |
if not subnet.enable_dhcp: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
379 |
continue |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
380 |
if subnet.ip_version == 4: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
381 |
mode = 'static' |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
382 |
else: |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
383 |
# We need to also set the DUID for the DHCPv6 server to use |
3121
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
384 |
macaddr_cmd = ['/usr/sbin/dladm', 'show-linkprop', |
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
385 |
'-co', 'value', '-p', 'mac-address', |
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
386 |
self.interface_name] |
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
387 |
stdout = utils.execute(macaddr_cmd) |
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
388 |
uid = stdout.splitlines()[0].strip() |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
389 |
# format the MAC address |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
390 |
uid = ':'.join(['%.2x' % w for w in netaddr.EUI(uid).words]) |
3121
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
391 |
# IANA assigned ID for Oracle |
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
392 |
enterprise_id = '111' |
462024268450
18698425 DHCP and L3 agent are unable to plumb VNICs with IPv6 address
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3028
diff
changeset
|
393 |
cmd.append('--dhcp-duid=%s,%s' % (enterprise_id, uid)) |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
394 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
395 |
# Note(scollins) If the IPv6 attributes are not set, set it as |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
396 |
# static to preserve previous behavior |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
397 |
addr_mode = getattr(subnet, 'ipv6_address_mode', None) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
398 |
ra_mode = getattr(subnet, 'ipv6_ra_mode', None) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
399 |
if (addr_mode in [constants.DHCPV6_STATEFUL, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
400 |
constants.DHCPV6_STATELESS] or |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
401 |
not addr_mode and not ra_mode): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
402 |
mode = 'static' |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
403 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
404 |
cidr = netaddr.IPNetwork(subnet.cidr) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
405 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
406 |
if self.conf.dhcp_lease_duration == -1: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
407 |
lease = 'infinite' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
408 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
409 |
lease = '%ss' % self.conf.dhcp_lease_duration |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
410 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
411 |
# mode is optional and is not set - skip it |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
412 |
if mode: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
413 |
if subnet.ip_version == 4: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
414 |
cmd.append('--dhcp-range=%s%s,%s,%s,%s' % |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
415 |
('set:', self._TAG_PREFIX % i, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
416 |
cidr.network, mode, lease)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
417 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
418 |
cmd.append('--dhcp-range=%s%s,%s,%s,%d,%s' % |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
419 |
('set:', self._TAG_PREFIX % i, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
420 |
cidr.network, mode, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
421 |
cidr.prefixlen, lease)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
422 |
possible_leases += cidr.size |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
423 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
424 |
# Cap the limit because creating lots of subnets can inflate |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
425 |
# this possible lease cap. |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
426 |
cmd.append('--dhcp-lease-max=%d' % |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
427 |
min(possible_leases, self.conf.dnsmasq_lease_max)) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
428 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
429 |
cmd.append('--conf-file=%s' % self.conf.dnsmasq_config_file) |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
430 |
if self.conf.dnsmasq_dns_servers: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
431 |
cmd.extend( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
432 |
'--server=%s' % server |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
433 |
for server in self.conf.dnsmasq_dns_servers) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
434 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
435 |
if self.conf.dhcp_domain: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
436 |
cmd.append('--domain=%s' % self.conf.dhcp_domain) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
437 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
438 |
# TODO(gmoodalb): prepend the env vars before command |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
439 |
utils.execute(cmd, self.root_helper) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
440 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
441 |
def _release_lease(self, mac_address, ip): |
3201
6839f7d1f036
18686478 kstat warning every minute in nova-compute log on SPARC
david.comay@oracle.com
parents:
3178
diff
changeset
|
442 |
"""Release a DHCP lease.""" |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
443 |
cmd = ['/usr/lib/inet/dhcp_release', self.interface_name, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
444 |
ip, mac_address] |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
445 |
utils.execute(cmd, self.root_helper) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
446 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
447 |
def reload_allocations(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
448 |
"""Rebuild the dnsmasq config and signal the dnsmasq to reload.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
449 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
450 |
# If all subnets turn off dhcp, kill the process. |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
451 |
if not self._enable_dhcp(): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
452 |
self.disable() |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
453 |
LOG.debug(_('Killing dhcpmasq for network since all subnets have ' |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
454 |
'turned off DHCP: %s'), self.network.id) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
455 |
return |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
456 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
457 |
self._release_unused_leases() |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
458 |
self._output_hosts_file() |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
459 |
self._output_addn_hosts_file() |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
460 |
self._output_opts_file() |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
461 |
if self.active: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
462 |
cmd = ['kill', '-HUP', self.pid] |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
463 |
utils.execute(cmd, self.root_helper) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
464 |
else: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
465 |
LOG.debug(_('Pid %d is stale, relaunching dnsmasq'), self.pid) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
466 |
LOG.debug(_('Reloading allocations for network: %s'), self.network.id) |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
467 |
self.device_manager.update(self.network, self.interface_name) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
468 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
469 |
def _iter_hosts(self): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
470 |
"""Iterate over hosts. |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
471 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
472 |
For each host on the network we yield a tuple containing: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
473 |
( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
474 |
port, # a DictModel instance representing the port. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
475 |
alloc, # a DictModel instance of the allocated ip and subnet. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
476 |
host_name, # Host name. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
477 |
name, # Canonical hostname in the format 'hostname[.domain]'. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
478 |
) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
479 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
480 |
v6_nets = dict((subnet.id, subnet) for subnet in |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
481 |
self.network.subnets if subnet.ip_version == 6) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
482 |
for port in self.network.ports: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
483 |
for alloc in port.fixed_ips: |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
484 |
# Note(scollins) Only create entries that are |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
485 |
# associated with the subnet being managed by this |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
486 |
# dhcp agent |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
487 |
if alloc.subnet_id in v6_nets: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
488 |
addr_mode = v6_nets[alloc.subnet_id].ipv6_address_mode |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
489 |
if addr_mode != constants.DHCPV6_STATEFUL: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
490 |
continue |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
491 |
hostname = 'host-%s' % alloc.ip_address.replace( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
492 |
'.', '-').replace(':', '-') |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
493 |
fqdn = hostname |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
494 |
if self.conf.dhcp_domain: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
495 |
fqdn = '%s.%s' % (fqdn, self.conf.dhcp_domain) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
496 |
yield (port, alloc, hostname, fqdn) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
497 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
498 |
def _output_hosts_file(self): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
499 |
"""Writes a dnsmasq compatible dhcp hosts file. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
500 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
501 |
The generated file is sent to the --dhcp-hostsfile option of dnsmasq, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
502 |
and lists the hosts on the network which should receive a dhcp lease. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
503 |
Each line in this file is in the form:: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
504 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
505 |
'mac_address,FQDN,ip_address' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
506 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
507 |
IMPORTANT NOTE: a dnsmasq instance does not resolve hosts defined in |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
508 |
this file if it did not give a lease to a host listed in it (e.g.: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
509 |
multiple dnsmasq instances on the same network if this network is on |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
510 |
multiple network nodes). This file is only defining hosts which |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
511 |
should receive a dhcp lease, the hosts resolution in itself is |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
512 |
defined by the `_output_addn_hosts_file` method. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
513 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
514 |
buf = six.StringIO() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
515 |
filename = self.get_conf_file_name('host') |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
516 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
517 |
LOG.debug(_('Building host file: %s'), filename) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
518 |
for (port, alloc, hostname, name) in self._iter_hosts(): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
519 |
# (dzyu) Check if it is legal ipv6 address, if so, need wrap |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
520 |
# it with '[]' to let dnsmasq to distinguish MAC address from |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
521 |
# IPv6 address. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
522 |
ip_address = alloc.ip_address |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
523 |
if netaddr.valid_ipv6(ip_address): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
524 |
ip_address = '[%s]' % ip_address |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
525 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
526 |
LOG.debug(_('Adding %(mac)s : %(name)s : %(ip)s'), |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
527 |
{"mac": port.mac_address, "name": name, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
528 |
"ip": ip_address}) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
529 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
530 |
if getattr(port, 'extra_dhcp_opts', False): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
531 |
buf.write('%s,%s,%s,%s%s\n' % |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
532 |
(port.mac_address, name, ip_address, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
533 |
'set:', port.id)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
534 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
535 |
buf.write('%s,%s,%s\n' % |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
536 |
(port.mac_address, name, ip_address)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
537 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
538 |
utils.replace_file(filename, buf.getvalue()) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
539 |
LOG.debug(_('Done building host file %s'), filename) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
540 |
return filename |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
541 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
542 |
def _read_hosts_file_leases(self, filename): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
543 |
leases = set() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
544 |
if os.path.exists(filename): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
545 |
with open(filename) as f: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
546 |
for l in f.readlines(): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
547 |
host = l.strip().split(',') |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
548 |
leases.add((host[2], host[0])) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
549 |
return leases |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
550 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
551 |
def _release_unused_leases(self): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
552 |
filename = self.get_conf_file_name('host') |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
553 |
old_leases = self._read_hosts_file_leases(filename) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
554 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
555 |
new_leases = set() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
556 |
for port in self.network.ports: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
557 |
for alloc in port.fixed_ips: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
558 |
new_leases.add((alloc.ip_address, port.mac_address)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
559 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
560 |
for ip, mac in old_leases - new_leases: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
561 |
self._release_lease(mac, ip) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
562 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
563 |
def _output_addn_hosts_file(self): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
564 |
"""Writes a dnsmasq compatible additional hosts file. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
565 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
566 |
The generated file is sent to the --addn-hosts option of dnsmasq, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
567 |
and lists the hosts on the network which should be resolved even if |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
568 |
the dnsmaq instance did not give a lease to the host (see the |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
569 |
`_output_hosts_file` method). |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
570 |
Each line in this file is in the same form as a standard /etc/hosts |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
571 |
file. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
572 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
573 |
buf = six.StringIO() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
574 |
for (port, alloc, hostname, fqdn) in self._iter_hosts(): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
575 |
# It is compulsory to write the `fqdn` before the `hostname` in |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
576 |
# order to obtain it in PTR responses. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
577 |
buf.write('%s\t%s %s\n' % (alloc.ip_address, fqdn, hostname)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
578 |
addn_hosts = self.get_conf_file_name('addn_hosts') |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
579 |
utils.replace_file(addn_hosts, buf.getvalue()) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
580 |
return addn_hosts |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
581 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
582 |
def _output_opts_file(self): |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
583 |
"""Write a dnsmasq compatible options file.""" |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
584 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
585 |
if self.conf.enable_isolated_metadata: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
586 |
subnet_to_interface_ip = self._make_subnet_interface_ip_map() |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
587 |
|
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
588 |
options = [] |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
589 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
590 |
isolated_subnets = self.get_isolated_subnets(self.network) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
591 |
dhcp_ips = collections.defaultdict(list) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
592 |
subnet_idx_map = {} |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
593 |
for i, subnet in enumerate(self.network.subnets): |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
594 |
if (not subnet.enable_dhcp or |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
595 |
(subnet.ip_version == 6 and |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
596 |
getattr(subnet, 'ipv6_address_mode', None) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
597 |
in [None, constants.IPV6_SLAAC])): |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
598 |
continue |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
599 |
if subnet.dns_nameservers: |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
600 |
options.append( |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
601 |
self._format_option( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
602 |
subnet.ip_version, i, 'dns-server', |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
603 |
','.join( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
604 |
Dnsmasq._convert_to_literal_addrs( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
605 |
subnet.ip_version, subnet.dns_nameservers)))) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
606 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
607 |
# use the dnsmasq ip as nameservers only if there is no |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
608 |
# dns-server submitted by the server |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
609 |
subnet_idx_map[subnet.id] = i |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
610 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
611 |
if self.conf.dhcp_domain and subnet.ip_version == 6: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
612 |
options.append('tag:tag%s,option6:domain-search,%s' % |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
613 |
(i, ''.join(self.conf.dhcp_domain))) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
614 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
615 |
gateway = subnet.gateway_ip |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
616 |
host_routes = [] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
617 |
for hr in subnet.host_routes: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
618 |
if hr.destination == "0.0.0.0/0": |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
619 |
if not gateway: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
620 |
gateway = hr.nexthop |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
621 |
else: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
622 |
host_routes.append("%s,%s" % (hr.destination, hr.nexthop)) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
623 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
624 |
# Add host routes for isolated network segments |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
625 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
626 |
if (isolated_subnets[subnet.id] and |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
627 |
self.conf.enable_isolated_metadata and |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
628 |
subnet.ip_version == 4): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
629 |
subnet_dhcp_ip = subnet_to_interface_ip[subnet.id] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
630 |
host_routes.append( |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
631 |
'%s/32,%s' % (METADATA_DEFAULT_IP, subnet_dhcp_ip) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
632 |
) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
633 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
634 |
if subnet.ip_version == 4: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
635 |
if host_routes: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
636 |
if gateway: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
637 |
host_routes.append("%s,%s" % ("0.0.0.0/0", gateway)) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
638 |
options.append( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
639 |
self._format_option(subnet.ip_version, i, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
640 |
'classless-static-route', |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
641 |
','.join(host_routes))) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
642 |
options.append( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
643 |
self._format_option(subnet.ip_version, i, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
644 |
WIN2k3_STATIC_DNS, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
645 |
','.join(host_routes))) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
646 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
647 |
if gateway: |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
648 |
options.append(self._format_option(subnet.ip_version, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
649 |
i, 'router', |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
650 |
gateway)) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
651 |
else: |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
652 |
options.append(self._format_option(subnet.ip_version, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
653 |
i, 'router')) |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
654 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
655 |
for port in self.network.ports: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
656 |
if getattr(port, 'extra_dhcp_opts', False): |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
657 |
for ip_version in (4, 6): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
658 |
if any( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
659 |
netaddr.IPAddress(ip.ip_address).version == ip_version |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
660 |
for ip in port.fixed_ips): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
661 |
options.extend( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
662 |
# TODO(xuhanp):Instead of applying extra_dhcp_opts |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
663 |
# to both DHCPv4 and DHCPv6, we need to find a new |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
664 |
# way to specify options for v4 and v6 |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
665 |
# respectively. We also need to validate the option |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
666 |
# before applying it. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
667 |
self._format_option(ip_version, port.id, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
668 |
opt.opt_name, opt.opt_value) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
669 |
for opt in port.extra_dhcp_opts) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
670 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
671 |
# provides all dnsmasq ip as dns-server if there is more than |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
672 |
# one dnsmasq for a subnet and there is no dns-server submitted |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
673 |
# by the server |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
674 |
if port.device_owner == constants.DEVICE_OWNER_DHCP: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
675 |
for ip in port.fixed_ips: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
676 |
i = subnet_idx_map.get(ip.subnet_id) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
677 |
if i is None: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
678 |
continue |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
679 |
dhcp_ips[i].append(ip.ip_address) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
680 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
681 |
for i, ips in dhcp_ips.items(): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
682 |
for ip_version in (4, 6): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
683 |
vx_ips = [ip for ip in ips |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
684 |
if netaddr.IPAddress(ip).version == ip_version] |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
685 |
if vx_ips: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
686 |
options.append( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
687 |
self._format_option( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
688 |
ip_version, i, 'dns-server', |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
689 |
','.join( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
690 |
Dnsmasq._convert_to_literal_addrs(ip_version, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
691 |
vx_ips)))) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
692 |
|
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
693 |
name = self.get_conf_file_name('opts') |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
694 |
utils.replace_file(name, '\n'.join(options)) |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
695 |
return name |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
696 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
697 |
def _make_subnet_interface_ip_map(self): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
698 |
# TODO(gmoodalb): need to complete this when we support metadata |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
699 |
pass |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
700 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
701 |
def _format_option(self, ip_version, tag, option, *args): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
702 |
"""Format DHCP option by option name or code.""" |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
703 |
option = str(option) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
704 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
705 |
if isinstance(tag, int): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
706 |
tag = self._TAG_PREFIX % tag |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
707 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
708 |
if not option.isdigit(): |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
709 |
if ip_version == 4: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
710 |
option = 'option:%s' % option |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
711 |
else: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
712 |
option = 'option6:%s' % option |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
713 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
714 |
return ','.join(('tag:' + tag, '%s' % option) + args) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
715 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
716 |
@staticmethod |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
717 |
def _convert_to_literal_addrs(ip_version, ips): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
718 |
if ip_version == 4: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
719 |
return ips |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
720 |
return ['[' + ip + ']' for ip in ips] |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
721 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
722 |
@classmethod |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
723 |
def get_isolated_subnets(cls, network): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
724 |
"""Returns a dict indicating whether or not a subnet is isolated |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
725 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
726 |
A subnet is considered non-isolated if there is a port connected to |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
727 |
the subnet, and the port's ip address matches that of the subnet's |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
728 |
gateway. The port must be owned by a nuetron router. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
729 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
730 |
isolated_subnets = collections.defaultdict(lambda: True) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
731 |
subnets = dict((subnet.id, subnet) for subnet in network.subnets) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
732 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
733 |
for port in network.ports: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
734 |
if port.device_owner != constants.DEVICE_OWNER_ROUTER_INTF: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
735 |
continue |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
736 |
for alloc in port.fixed_ips: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
737 |
if subnets[alloc.subnet_id].gateway_ip == alloc.ip_address: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
738 |
isolated_subnets[alloc.subnet_id] = False |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
739 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
740 |
return isolated_subnets |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
741 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
742 |
@classmethod |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
743 |
def should_enable_metadata(cls, conf, network): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
744 |
"""True if there exists a subnet for which a metadata proxy is needed |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
745 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
746 |
return False |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
747 |
|
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
748 |
@classmethod |
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
749 |
def lease_update(cls): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
750 |
network_id = os.environ.get(cls.NEUTRON_NETWORK_ID_KEY) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
751 |
dhcp_relay_socket = os.environ.get(cls.NEUTRON_RELAY_SOCKET_PATH_KEY) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
752 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
753 |
action = sys.argv[1] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
754 |
if action not in ('add', 'del', 'old'): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
755 |
sys.exit() |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
756 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
757 |
mac_address = sys.argv[2] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
758 |
ip_address = sys.argv[3] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
759 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
760 |
if action == 'del': |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
761 |
lease_remaining = 0 |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
762 |
else: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
763 |
lease_remaining = int(os.environ.get('DNSMASQ_TIME_REMAINING', 0)) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
764 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
765 |
data = dict(network_id=network_id, mac_address=mac_address, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
766 |
ip_address=ip_address, lease_remaining=lease_remaining) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
767 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
768 |
if os.path.exists(dhcp_relay_socket): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
769 |
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
770 |
sock.connect(dhcp_relay_socket) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
771 |
sock.send(jsonutils.dumps(data)) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
772 |
sock.close() |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
773 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
774 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
775 |
class DeviceManager(object): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
776 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
777 |
def __init__(self, conf, root_helper, plugin): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
778 |
self.conf = conf |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
779 |
self.root_helper = root_helper |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
780 |
self.plugin = plugin |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
781 |
if not conf.interface_driver: |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
782 |
msg = _('An interface driver must be specified') |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
783 |
LOG.error(msg) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
784 |
raise SystemExit(1) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
785 |
try: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
786 |
self.driver = importutils.import_object( |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
787 |
conf.interface_driver, conf) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
788 |
except Exception as e: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
789 |
msg = (_("Error importing interface driver '%(driver)s': " |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
790 |
"%(inner)s") % {'driver': conf.interface_driver, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
791 |
'inner': e}) |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
792 |
LOG.error(msg) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
793 |
raise SystemExit(1) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
794 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
795 |
def get_interface_name(self, network, port): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
796 |
"""Return interface(device) name for use by the DHCP process.""" |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
797 |
return self.driver.get_device_name(port) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
798 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
799 |
def get_device_id(self, network): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
800 |
"""Return a unique DHCP device ID for this host on the network.""" |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
801 |
# There could be more than one dhcp server per network, so create |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
802 |
# a device id that combines host and network ids |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
803 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
804 |
host_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname()) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
805 |
return 'dhcp%s-%s' % (host_uuid, network.id) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
806 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
807 |
def _set_default_route(self, network, device_name): |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
808 |
"""Sets the default gateway for this dhcp namespace. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
809 |
|
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
810 |
This method is idempotent and will only adjust the route if adjusting |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
811 |
it would change it from what it already is. This makes it safe to call |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
812 |
and avoids unnecessary perturbation of the system. |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
813 |
""" |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
814 |
# we do not support namespaces |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
815 |
pass |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
816 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
817 |
def setup_dhcp_port(self, network): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
818 |
"""Create/update DHCP port for the host if needed and return port.""" |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
819 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
820 |
device_id = self.get_device_id(network) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
821 |
subnets = {} |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
822 |
dhcp_enabled_subnet_ids = [] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
823 |
for subnet in network.subnets: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
824 |
if subnet.enable_dhcp: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
825 |
dhcp_enabled_subnet_ids.append(subnet.id) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
826 |
subnets[subnet.id] = subnet |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
827 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
828 |
dhcp_port = None |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
829 |
for port in network.ports: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
830 |
port_device_id = getattr(port, 'device_id', None) |
3619
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
831 |
port_device_owner = getattr(port, 'device_owner', None) |
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
832 |
|
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
833 |
# if the agent is started on a different node, then the |
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
834 |
# device_ids will be different since they are based off |
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
835 |
# hostname. |
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
836 |
if (port_device_id == device_id or |
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
837 |
(port_device_owner == constants.DEVICE_OWNER_DHCP and |
639868f63ef4
20089330 Horizon reports "Error: Unable to contact Neutron" on large data set
Girish Moodalbail <Girish.Moodalbail@oracle.COM>
parents:
3201
diff
changeset
|
838 |
port_device_id.startswith('dhcp'))): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
839 |
port_fixed_ips = [] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
840 |
for fixed_ip in port.fixed_ips: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
841 |
port_fixed_ips.append({'subnet_id': fixed_ip.subnet_id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
842 |
'ip_address': fixed_ip.ip_address}) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
843 |
if fixed_ip.subnet_id in dhcp_enabled_subnet_ids: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
844 |
dhcp_enabled_subnet_ids.remove(fixed_ip.subnet_id) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
845 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
846 |
# If there are dhcp_enabled_subnet_ids here that means that |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
847 |
# we need to add those to the port and call update. |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
848 |
if dhcp_enabled_subnet_ids: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
849 |
port_fixed_ips.extend( |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
850 |
[dict(subnet_id=s) for s in dhcp_enabled_subnet_ids]) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
851 |
dhcp_port = self.plugin.update_dhcp_port( |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
852 |
port.id, {'port': {'network_id': network.id, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
853 |
'fixed_ips': port_fixed_ips}}) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
854 |
if not dhcp_port: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
855 |
raise exceptions.Conflict() |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
856 |
else: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
857 |
dhcp_port = port |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
858 |
# break since we found port that matches device_id |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
859 |
break |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
860 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
861 |
# check for a reserved DHCP port |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
862 |
if dhcp_port is None: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
863 |
LOG.debug(_('DHCP port %(device_id)s on network %(network_id)s' |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
864 |
' does not yet exist. Checking for a reserved port.'), |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
865 |
{'device_id': device_id, 'network_id': network.id}) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
866 |
for port in network.ports: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
867 |
port_device_id = getattr(port, 'device_id', None) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
868 |
if port_device_id == constants.DEVICE_ID_RESERVED_DHCP_PORT: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
869 |
dhcp_port = self.plugin.update_dhcp_port( |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
870 |
port.id, {'port': {'network_id': network.id, |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
871 |
'device_id': device_id}}) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
872 |
if dhcp_port: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
873 |
break |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
874 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
875 |
# DHCP port has not yet been created. |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
876 |
if dhcp_port is None: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
877 |
LOG.debug(_('DHCP port %(device_id)s on network %(network_id)s' |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
878 |
' does not yet exist.'), {'device_id': device_id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
879 |
'network_id': network.id}) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
880 |
port_dict = dict( |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
881 |
name='', |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
882 |
admin_state_up=True, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
883 |
device_id=device_id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
884 |
network_id=network.id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
885 |
tenant_id=network.tenant_id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
886 |
fixed_ips=[dict(subnet_id=s) for s in dhcp_enabled_subnet_ids]) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
887 |
dhcp_port = self.plugin.create_dhcp_port({'port': port_dict}) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
888 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
889 |
if not dhcp_port: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
890 |
raise exceptions.Conflict() |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
891 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
892 |
# Convert subnet_id to subnet dict |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
893 |
fixed_ips = [dict(subnet_id=fixed_ip.subnet_id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
894 |
ip_address=fixed_ip.ip_address, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
895 |
subnet=subnets[fixed_ip.subnet_id]) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
896 |
for fixed_ip in dhcp_port.fixed_ips] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
897 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
898 |
ips = [DictModel(item) if isinstance(item, dict) else item |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
899 |
for item in fixed_ips] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
900 |
dhcp_port.fixed_ips = ips |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
901 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
902 |
return dhcp_port |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
903 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
904 |
def setup(self, network): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
905 |
"""Create and initialize a device for network's DHCP on this host.""" |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
906 |
port = self.setup_dhcp_port(network) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
907 |
interface_name = self.get_interface_name(network, port) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
908 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
909 |
if net_lib.Datalink.datalink_exists(interface_name): |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
910 |
LOG.debug(_('Reusing existing device: %s.'), interface_name) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
911 |
else: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
912 |
self.driver.plug(network.tenant_id, network.id, |
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
913 |
port.id, interface_name) |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
914 |
ip_cidrs = [] |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
915 |
for fixed_ip in port.fixed_ips: |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
916 |
subnet = fixed_ip.subnet |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
917 |
net = netaddr.IPNetwork(subnet.cidr) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
918 |
ip_cidr = '%s/%s' % (fixed_ip.ip_address, net.prefixlen) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
919 |
ip_cidrs.append(ip_cidr) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
920 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
921 |
if (self.conf.enable_isolated_metadata and |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
922 |
self.conf.use_namespaces): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
923 |
ip_cidrs.append(METADATA_DEFAULT_CIDR) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
924 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
925 |
self.driver.init_l3(interface_name, ip_cidrs) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
926 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
927 |
if self.conf.use_namespaces: |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
928 |
self._set_default_route(network, interface_name) |
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
929 |
|
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
930 |
return interface_name |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
931 |
|
4156
4b1def16fe9b
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3619
diff
changeset
|
932 |
def update(self, network, device_name): |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
933 |
"""Update device settings for the network's DHCP on this host.""" |
3028
5e73a3a3f66a
PSARC/2013/350 OpenStack for Solaris (Umbrella)
Drew Fisher <drew.fisher@oracle.com>
parents:
diff
changeset
|
934 |
pass |
3178
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
935 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
936 |
def destroy(self, network, device_name): |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
937 |
"""Destroy the device used for the network's DHCP on this host.""" |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
938 |
|
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
939 |
self.driver.fini_l3(device_name) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
940 |
self.driver.unplug(device_name) |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
941 |
self.plugin.release_dhcp_port(network.id, |
77584387a894
PSARC/2014/207 OpenStack Glance Update to Havana
Drew Fisher <drew.fisher@oracle.com>
parents:
3121
diff
changeset
|
942 |
self.get_device_id(network)) |