diff --git a/neutron_lib/api/definitions/__init__.py b/neutron_lib/api/definitions/__init__.py index b6d2b3079..6ce4ff695 100644 --- a/neutron_lib/api/definitions/__init__.py +++ b/neutron_lib/api/definitions/__init__.py @@ -20,6 +20,7 @@ from neutron_lib.api.definitions import bgpvpn_routes_control from neutron_lib.api.definitions import bgpvpn_vni from neutron_lib.api.definitions import data_plane_status from neutron_lib.api.definitions import default_subnetpools +from neutron_lib.api.definitions import dhcpagentscheduler from neutron_lib.api.definitions import dns from neutron_lib.api.definitions import dns_domain_ports from neutron_lib.api.definitions import dvr @@ -83,6 +84,7 @@ _ALL_API_DEFINITIONS = { bgpvpn_vni, data_plane_status, default_subnetpools, + dhcpagentscheduler, dns, dns_domain_ports, dvr, diff --git a/neutron_lib/api/definitions/dhcpagentscheduler.py b/neutron_lib/api/definitions/dhcpagentscheduler.py new file mode 100644 index 000000000..1eb0ff84a --- /dev/null +++ b/neutron_lib/api/definitions/dhcpagentscheduler.py @@ -0,0 +1,65 @@ +# Copyright (c) 2013 OpenStack Foundation. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from neutron_lib.api.definitions import agent as agent_apidef +from neutron_lib.api.definitions import network as net_apidef +from neutron_lib import constants + + +DHCP_NET = 'dhcp-network' +DHCP_NETS = DHCP_NET + 's' +DHCP_AGENT = 'dhcp-agent' +DHCP_AGENTS = DHCP_AGENT + 's' + +ALIAS = constants.DHCP_AGENT_SCHEDULER_EXT_ALIAS +LABEL = '' +IS_SHIM_EXTENSION = False +IS_STANDARD_ATTR_EXTENSION = False +NAME = 'DHCP Agent Scheduler' +API_PREFIX = '' +DESCRIPTION = 'Schedule networks among dhcp agents' +UPDATED_TIMESTAMP = '2013-02-07T10:00:00-00:00' +RESOURCE_ATTRIBUTE_MAP = {} +SUB_RESOURCE_ATTRIBUTE_MAP = { + DHCP_NETS: { + 'parent': { + 'collection_name': agent_apidef.COLLECTION_NAME, + 'member_name': agent_apidef.RESOURCE_NAME + }, + 'parameters': { + 'network_id': { + 'allow_post': True, 'allow_put': False, + 'default': constants.ATTR_NOT_SPECIFIED, + 'enforce_policy': True, + 'is_visible': True, + 'validate': {'type:uuid': None} + } + } + }, + DHCP_AGENTS: { + 'parent': { + 'collection_name': net_apidef.COLLECTION_NAME, + 'member_name': net_apidef.RESOURCE_NAME + }, + # NOTE(boden): the reference implementation only allows the index + # operation for the agent exposed under the network resource + 'parameters': agent_apidef.RESOURCE_ATTRIBUTE_MAP[ + agent_apidef.COLLECTION_NAME] + } +} +ACTION_MAP = {} +REQUIRED_EXTENSIONS = [agent_apidef.ALIAS] +OPTIONAL_EXTENSIONS = [] +ACTION_STATUS = {} diff --git a/neutron_lib/exceptions/dhcpagentscheduler.py b/neutron_lib/exceptions/dhcpagentscheduler.py new file mode 100644 index 000000000..808cf4d22 --- /dev/null +++ b/neutron_lib/exceptions/dhcpagentscheduler.py @@ -0,0 +1,32 @@ +# Copyright (c) 2013 OpenStack Foundation. +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from neutron_lib._i18n import _ +from neutron_lib import exceptions +from neutron_lib.exceptions import agent as agent_exc + + +class InvalidDHCPAgent(agent_exc.AgentNotFound): + message = _("Agent %(id)s is not a valid DHCP Agent or has been disabled.") + + +class NetworkHostedByDHCPAgent(exceptions.Conflict): + message = _("The network %(network_id)s has been already hosted" + " by the DHCP Agent %(agent_id)s.") + + +class NetworkNotHostedByDhcpAgent(exceptions.Conflict): + message = _("The network %(network_id)s is not hosted" + " by the DHCP Agent %(agent_id)s.") diff --git a/neutron_lib/tests/unit/api/definitions/test_dhcpagentscheduler.py b/neutron_lib/tests/unit/api/definitions/test_dhcpagentscheduler.py new file mode 100644 index 000000000..ca733c334 --- /dev/null +++ b/neutron_lib/tests/unit/api/definitions/test_dhcpagentscheduler.py @@ -0,0 +1,23 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from neutron_lib.api.definitions import dhcpagentscheduler +from neutron_lib.tests.unit.api.definitions import base +from neutron_lib.tests.unit.api.definitions import test_agent as agent + + +class DHCPAgentSchedulerDefinitionTestCase(base.DefinitionBaseTestCase): + extension_module = dhcpagentscheduler + extension_resources = agent.AgentDefinitionTestCase.extension_resources + extension_attributes = agent.AgentDefinitionTestCase.extension_attributes + extension_subresources = (dhcpagentscheduler.DHCP_AGENTS, + dhcpagentscheduler.DHCP_NETS) diff --git a/releasenotes/notes/rehome-dhcpagentscheduler-apidef-1f7729fb5834dcd2.yaml b/releasenotes/notes/rehome-dhcpagentscheduler-apidef-1f7729fb5834dcd2.yaml new file mode 100644 index 000000000..be5619252 --- /dev/null +++ b/releasenotes/notes/rehome-dhcpagentscheduler-apidef-1f7729fb5834dcd2.yaml @@ -0,0 +1,5 @@ +--- +features: + - The ``dhcp_agent_scheduler`` extension's API defintion is now available + in ``neutron_lib.api.definitions.dhcpagentscheduler`` and the corresponding + exceptions in ``neutron_lib.exceptions.dhcpagentscheduler``.