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:
Boden R 2017-05-11 10:35:18 -06:00 committed by Ihar Hrachyshka
parent 6cfe39708f
commit 933b9fa57e
6 changed files with 14 additions and 103 deletions

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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',

View File

@ -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