use extra_dhcp_opt api-def from neutron-lib
neutron-lib 1.6.0 is out and among other things contains the rehomed extra_dhcp_opt API definition. This patch switches usage of such references from neutron to neutron-lib. NeutronLibImpact Change-Id: I8a400bc92b5958e5eab557bd7a2b27330754dcbf
This commit is contained in:
parent
6cfe39708f
commit
933b9fa57e
|
@ -21,6 +21,7 @@ import shutil
|
|||
import time
|
||||
|
||||
import netaddr
|
||||
from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext
|
||||
from neutron_lib import constants
|
||||
from neutron_lib import exceptions
|
||||
from neutron_lib.utils import file as file_utils
|
||||
|
@ -39,7 +40,6 @@ from neutron.agent.linux import iptables_manager
|
|||
from neutron.cmd import runtime_checks as checks
|
||||
from neutron.common import constants as n_const
|
||||
from neutron.common import utils as common_utils
|
||||
from neutron.extensions import extra_dhcp_opt as edo_ext
|
||||
from neutron.ipam import utils as ipam_utils
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
@ -717,7 +717,7 @@ class Dnsmasq(DhcpLocalProcess):
|
|||
def _get_client_id(self, port):
|
||||
if self._get_port_extra_dhcp_opts(port):
|
||||
for opt in port.extra_dhcp_opts:
|
||||
if opt.opt_name == edo_ext.CLIENT_ID:
|
||||
if opt.opt_name == edo_ext.DHCP_OPT_CLIENT_ID:
|
||||
return opt.opt_value
|
||||
|
||||
def _read_hosts_file_leases(self, filename):
|
||||
|
@ -953,7 +953,7 @@ class Dnsmasq(DhcpLocalProcess):
|
|||
[netaddr.IPAddress(ip.ip_address).version
|
||||
for ip in port.fixed_ips])
|
||||
for opt in port.extra_dhcp_opts:
|
||||
if opt.opt_name == edo_ext.CLIENT_ID:
|
||||
if opt.opt_name == edo_ext.DHCP_OPT_CLIENT_ID:
|
||||
continue
|
||||
opt_ip_version = opt.ip_version
|
||||
if opt_ip_version in port_ip_versions:
|
||||
|
|
|
@ -13,10 +13,12 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext
|
||||
|
||||
|
||||
from neutron.api.v2 import attributes
|
||||
from neutron.db import _resource_extend as resource_extend
|
||||
from neutron.db import api as db_api
|
||||
from neutron.extensions import extra_dhcp_opt as edo_ext
|
||||
from neutron.objects.port.extensions import extra_dhcp_opt as obj_extra_dhcp
|
||||
|
||||
|
||||
|
|
|
@ -13,100 +13,9 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from neutron_lib.api import converters
|
||||
from neutron_lib.api.definitions import extra_dhcp_opt
|
||||
from neutron_lib.api import extensions
|
||||
from neutron_lib.api import validators
|
||||
from neutron_lib import exceptions
|
||||
|
||||
from neutron._i18n import _
|
||||
|
||||
|
||||
# ExtraDHcpOpts Exceptions
|
||||
class ExtraDhcpOptNotFound(exceptions.NotFound):
|
||||
message = _("ExtraDhcpOpt %(id)s could not be found")
|
||||
|
||||
|
||||
class ExtraDhcpOptBadData(exceptions.InvalidInput):
|
||||
message = _("Invalid data format for extra-dhcp-opt: %(data)s")
|
||||
|
||||
|
||||
# Valid blank extra dhcp opts
|
||||
VALID_BLANK_EXTRA_DHCP_OPTS = ('router', 'classless-static-route')
|
||||
|
||||
# Common definitions for maximum string field length
|
||||
DHCP_OPT_NAME_MAX_LEN = 64
|
||||
DHCP_OPT_VALUE_MAX_LEN = 255
|
||||
|
||||
EXTRA_DHCP_OPT_KEY_SPECS = {
|
||||
'id': {'type:uuid': None, 'required': False},
|
||||
'opt_name': {'type:not_empty_string': DHCP_OPT_NAME_MAX_LEN,
|
||||
'required': True},
|
||||
'opt_value': {'type:not_empty_string_or_none': DHCP_OPT_VALUE_MAX_LEN,
|
||||
'required': True},
|
||||
'ip_version': {'convert_to': converters.convert_to_int,
|
||||
'type:values': [4, 6],
|
||||
'required': False}
|
||||
}
|
||||
|
||||
|
||||
def _validate_extra_dhcp_opt(data, key_specs=None):
|
||||
if data is not None:
|
||||
if not isinstance(data, list):
|
||||
raise ExtraDhcpOptBadData(data=data)
|
||||
for d in data:
|
||||
if d['opt_name'] in VALID_BLANK_EXTRA_DHCP_OPTS:
|
||||
msg = validators.validate_string_or_none(
|
||||
d['opt_value'], DHCP_OPT_VALUE_MAX_LEN)
|
||||
else:
|
||||
msg = validators.validate_dict(d, key_specs)
|
||||
if msg:
|
||||
raise ExtraDhcpOptBadData(data=msg)
|
||||
|
||||
validators.add_validator('list_of_extra_dhcp_opts',
|
||||
_validate_extra_dhcp_opt)
|
||||
|
||||
# Attribute Map
|
||||
EXTRADHCPOPTS = 'extra_dhcp_opts'
|
||||
|
||||
CLIENT_ID = "client-id"
|
||||
|
||||
EXTENDED_ATTRIBUTES_2_0 = {
|
||||
'ports': {
|
||||
EXTRADHCPOPTS: {
|
||||
'allow_post': True,
|
||||
'allow_put': True,
|
||||
'is_visible': True,
|
||||
'default': None,
|
||||
'validate': {
|
||||
'type:list_of_extra_dhcp_opts': EXTRA_DHCP_OPT_KEY_SPECS
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Extra_dhcp_opt(extensions.ExtensionDescriptor):
|
||||
@classmethod
|
||||
def get_name(cls):
|
||||
return "Neutron Extra DHCP opts"
|
||||
|
||||
@classmethod
|
||||
def get_alias(cls):
|
||||
return "extra_dhcp_opt"
|
||||
|
||||
@classmethod
|
||||
def get_description(cls):
|
||||
return ("Extra options configuration for DHCP. "
|
||||
"For example PXE boot options to DHCP clients can "
|
||||
"be specified (e.g. tftp-server, server-ip-address, "
|
||||
"bootfile-name)")
|
||||
|
||||
@classmethod
|
||||
def get_updated(cls):
|
||||
return "2013-03-17T12:00:00-00:00"
|
||||
|
||||
def get_extended_resources(self, version):
|
||||
if version == "2.0":
|
||||
return EXTENDED_ATTRIBUTES_2_0
|
||||
else:
|
||||
return {}
|
||||
class Extra_dhcp_opt(extensions.APIExtensionDescriptor):
|
||||
api_definition = extra_dhcp_opt
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
import copy
|
||||
|
||||
from eventlet import greenthread
|
||||
from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext
|
||||
from neutron_lib.api.definitions import port_security as psec
|
||||
from neutron_lib.api.definitions import portbindings
|
||||
from neutron_lib.api.definitions import provider_net
|
||||
|
@ -74,7 +75,6 @@ from neutron.db import subnet_service_type_db_models as service_type_db
|
|||
from neutron.db import vlantransparent_db
|
||||
from neutron.extensions import allowedaddresspairs as addr_pair
|
||||
from neutron.extensions import availability_zone as az_ext
|
||||
from neutron.extensions import extra_dhcp_opt as edo_ext
|
||||
from neutron.extensions import multiprovidernet as mpnet
|
||||
from neutron.extensions import providernet as provider
|
||||
from neutron.extensions import vlantransparent
|
||||
|
|
|
@ -17,6 +17,7 @@ import os
|
|||
|
||||
import mock
|
||||
import netaddr
|
||||
from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext
|
||||
from neutron_lib import constants
|
||||
from oslo_config import cfg
|
||||
import oslo_messaging
|
||||
|
@ -29,7 +30,6 @@ from neutron.common import constants as n_const
|
|||
from neutron.conf.agent import common as config
|
||||
from neutron.conf.agent import dhcp as dhcp_config
|
||||
from neutron.conf import common as base_config
|
||||
from neutron.extensions import extra_dhcp_opt as edo_ext
|
||||
from neutron.tests import base
|
||||
from neutron.tests import tools
|
||||
|
||||
|
@ -172,7 +172,7 @@ class FakePort5(object):
|
|||
self.mac_address = '00:00:0f:aa:bb:55'
|
||||
self.device_id = 'fake_port5'
|
||||
self.extra_dhcp_opts = [
|
||||
DhcpOpt(opt_name=edo_ext.CLIENT_ID,
|
||||
DhcpOpt(opt_name=edo_ext.DHCP_OPT_CLIENT_ID,
|
||||
opt_value='test5')]
|
||||
|
||||
|
||||
|
@ -188,7 +188,7 @@ class FakePort6(object):
|
|||
self.mac_address = '00:00:0f:aa:bb:66'
|
||||
self.device_id = 'fake_port6'
|
||||
self.extra_dhcp_opts = [
|
||||
DhcpOpt(opt_name=edo_ext.CLIENT_ID,
|
||||
DhcpOpt(opt_name=edo_ext.DHCP_OPT_CLIENT_ID,
|
||||
opt_value='test6',
|
||||
ip_version=4),
|
||||
DhcpOpt(opt_name='dns-server',
|
||||
|
|
|
@ -15,11 +15,11 @@
|
|||
|
||||
import copy
|
||||
|
||||
from neutron_lib.api.definitions import extra_dhcp_opt as edo_ext
|
||||
import webob.exc
|
||||
|
||||
from neutron.db import db_base_plugin_v2
|
||||
from neutron.db import extradhcpopt_db as edo_db
|
||||
from neutron.extensions import extra_dhcp_opt as edo_ext
|
||||
from neutron.tests.unit.db import test_db_base_plugin_v2
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue