--- /dev/null
+# (c) Copyright 2014 Cisco Systems Inc.
+# 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.
+# @author: Paul Michali Cisco Systems, Inc.
+
+from oslo.config import cfg
+
+from neutron.api import extensions
+from neutron.api.v2 import base
+from neutron import manager
+from neutron.plugins.common import constants
+from neutron import quota
+
+
+def build_plural_mappings(special_mappings, resource_map):
+ """Create plural to singular mapping for all resources.
+
+ Allows for special mappings to be provided, like policies -> policy.
+ Otherwise, will strip off the last character for normal mappings, like
+ routers -> router.
+ """
+ plural_mappings = {}
+ for plural in resource_map:
+ singular = special_mappings.get(plural, plural[:-1])
+ plural_mappings[plural] = singular
+ return plural_mappings
+
+
+def build_resource_info(plural_mappings, resource_map, which_service,
+ action_map=None, register_quota=False,
+ translate_name=False, allow_bulk=False):
+ """Build resources for advanced services.
+
+ Takes the resource information, and singular/plural mappings, and creates
+ API resource objects for advanced services extensions. Will optionally
+ translate underscores to dashes in resource names, register the resource,
+ and accept action information for resources.
+ """
+ resources = []
+ if action_map is None:
+ action_map = {}
+ plugin = manager.NeutronManager.get_service_plugins()[which_service]
+ for collection_name in resource_map:
+ resource_name = plural_mappings[collection_name]
+ params = resource_map.get(collection_name, {})
+ if translate_name:
+ collection_name = collection_name.replace('_', '-')
+ if register_quota:
+ quota.QUOTAS.register_resource_by_name(resource_name)
+ member_actions = action_map.get(resource_name, {})
+ controller = base.create_resource(
+ collection_name, resource_name, plugin, params,
+ member_actions=member_actions,
+ allow_bulk=allow_bulk,
+ allow_pagination=cfg.CONF.allow_pagination,
+ allow_sorting=cfg.CONF.allow_sorting)
+ resource = extensions.ResourceExtension(
+ collection_name,
+ controller,
+ path_prefix=constants.COMMON_PREFIXES[which_service],
+ member_actions=member_actions,
+ attr_map=params)
+ resources.append(resource)
+ return resources
from neutron.api import extensions
from neutron.api.v2 import attributes as attr
-from neutron.api.v2 import base
+from neutron.api.v2 import resource_helper
from neutron.common import exceptions as qexception
-from neutron import manager
from neutron.openstack.common import log as logging
from neutron.plugins.common import constants
from neutron.services.service_base import ServicePluginBase
@classmethod
def get_resources(cls):
- my_plurals = []
- for plural in RESOURCE_ATTRIBUTE_MAP:
- if plural == 'firewall_policies':
- singular = 'firewall_policy'
- else:
- singular = plural[:-1]
- my_plurals.append((plural, singular))
- attr.PLURALS.update(dict(my_plurals))
- resources = []
- plugin = manager.NeutronManager.get_service_plugins()[
- constants.FIREWALL]
- for collection_name in RESOURCE_ATTRIBUTE_MAP:
- # Special handling needed for resources with 'y' ending
- if collection_name == 'firewall_policies':
- resource_name = 'firewall_policy'
- else:
- resource_name = collection_name[:-1]
-
- params = RESOURCE_ATTRIBUTE_MAP[collection_name]
-
- member_actions = {}
- if resource_name == 'firewall_policy':
- member_actions = {'insert_rule': 'PUT',
- 'remove_rule': 'PUT'}
-
- controller = base.create_resource(
- collection_name, resource_name, plugin, params,
- member_actions=member_actions,
- allow_pagination=cfg.CONF.allow_pagination,
- allow_sorting=cfg.CONF.allow_sorting)
-
- resource = extensions.ResourceExtension(
- collection_name,
- controller,
- path_prefix=constants.COMMON_PREFIXES[constants.FIREWALL],
- member_actions=member_actions,
- attr_map=params)
- resources.append(resource)
-
- return resources
+ special_mappings = {'firewall_policies': 'firewall_policy'}
+ plural_mappings = resource_helper.build_plural_mappings(
+ special_mappings, RESOURCE_ATTRIBUTE_MAP)
+ attr.PLURALS.update(plural_mappings)
+ action_map = {'firewall_policy': {'insert_rule': 'PUT',
+ 'remove_rule': 'PUT'}}
+ return resource_helper.build_resource_info(plural_mappings,
+ RESOURCE_ATTRIBUTE_MAP,
+ constants.FIREWALL,
+ action_map=action_map)
@classmethod
def get_plugin_interface(cls):
from neutron.api import extensions
from neutron.api.v2 import attributes as attr
-from neutron.api.v2 import base
+from neutron.api.v2 import resource_helper
from neutron.common import exceptions as qexception
-from neutron import manager
from neutron.plugins.common import constants
-from neutron import quota
# L3 Exceptions
@classmethod
def get_resources(cls):
"""Returns Ext Resources."""
- my_plurals = [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]
- attr.PLURALS.update(dict(my_plurals))
- exts = []
- plugin = manager.NeutronManager.get_service_plugins()[
- constants.L3_ROUTER_NAT]
- for resource_name in ['router', 'floatingip']:
- collection_name = resource_name + "s"
- params = RESOURCE_ATTRIBUTE_MAP.get(collection_name, dict())
-
- member_actions = {}
- if resource_name == 'router':
- member_actions = {'add_router_interface': 'PUT',
- 'remove_router_interface': 'PUT'}
-
- quota.QUOTAS.register_resource_by_name(resource_name)
-
- controller = base.create_resource(
- collection_name, resource_name, plugin, params,
- member_actions=member_actions,
- allow_pagination=cfg.CONF.allow_pagination,
- allow_sorting=cfg.CONF.allow_sorting)
-
- ex = extensions.ResourceExtension(collection_name,
- controller,
- member_actions=member_actions,
- attr_map=params)
- exts.append(ex)
-
- return exts
+ plural_mappings = resource_helper.build_plural_mappings(
+ {}, RESOURCE_ATTRIBUTE_MAP)
+ attr.PLURALS.update(plural_mappings)
+ action_map = {'router': {'add_router_interface': 'PUT',
+ 'remove_router_interface': 'PUT'}}
+ return resource_helper.build_resource_info(plural_mappings,
+ RESOURCE_ATTRIBUTE_MAP,
+ constants.L3_ROUTER_NAT,
+ action_map=action_map,
+ register_quota=True)
def update_attributes_map(self, attributes):
super(L3, self).update_attributes_map(
import abc
-from oslo.config import cfg
import six
from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import base
+from neutron.api.v2 import resource_helper
from neutron.common import exceptions as qexception
from neutron import manager
from neutron.plugins.common import constants
@classmethod
def get_resources(cls):
- my_plurals = [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]
- my_plurals.append(('health_monitors_status', 'health_monitor_status'))
- attr.PLURALS.update(dict(my_plurals))
- resources = []
+ plural_mappings = resource_helper.build_plural_mappings(
+ {}, RESOURCE_ATTRIBUTE_MAP)
+ plural_mappings['health_monitors_status'] = 'health_monitor_status'
+ attr.PLURALS.update(plural_mappings)
+ action_map = {'pool': {'stats': 'GET'}}
+ resources = resource_helper.build_resource_info(plural_mappings,
+ RESOURCE_ATTRIBUTE_MAP,
+ constants.LOADBALANCER,
+ action_map=action_map)
plugin = manager.NeutronManager.get_service_plugins()[
constants.LOADBALANCER]
- for collection_name in RESOURCE_ATTRIBUTE_MAP:
- # Special handling needed for resources with 'y' ending
- # (e.g. proxies -> proxy)
- resource_name = collection_name[:-1]
- params = RESOURCE_ATTRIBUTE_MAP[collection_name]
-
- member_actions = {}
- if resource_name == 'pool':
- member_actions = {'stats': 'GET'}
-
- controller = base.create_resource(
- collection_name, resource_name, plugin, params,
- member_actions=member_actions,
- allow_pagination=cfg.CONF.allow_pagination,
- allow_sorting=cfg.CONF.allow_sorting)
-
- resource = extensions.ResourceExtension(
- collection_name,
- controller,
- path_prefix=constants.COMMON_PREFIXES[constants.LOADBALANCER],
- member_actions=member_actions,
- attr_map=params)
- resources.append(resource)
-
for collection_name in SUB_RESOURCE_ATTRIBUTE_MAP:
# Special handling needed for sub-resources with 'y' ending
# (e.g. proxies -> proxy)
from neutron.api import extensions
from neutron.api.v2 import attributes as attr
-from neutron.api.v2 import base
+from neutron.api.v2 import resource_helper
from neutron.common import exceptions as qexception
-from neutron import manager
from neutron.openstack.common import log as logging
from neutron.plugins.common import constants
from neutron.services import service_base
@classmethod
def get_resources(cls):
"""Returns Ext Resources."""
- my_plurals = [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]
- attr.PLURALS.update(dict(my_plurals))
- exts = []
- plugin = manager.NeutronManager.get_service_plugins()[
- constants.METERING]
- for resource_name in ['metering_label', 'metering_label_rule']:
- collection_name = resource_name + "s"
-
- collection_name = collection_name.replace('_', '-')
- params = RESOURCE_ATTRIBUTE_MAP.get(resource_name + "s", dict())
-
- controller = base.create_resource(collection_name,
- resource_name,
- plugin, params, allow_bulk=True,
- allow_pagination=True,
- allow_sorting=True)
-
- ex = extensions.ResourceExtension(
- collection_name,
- controller,
- path_prefix=constants.COMMON_PREFIXES[constants.METERING],
- attr_map=params)
- exts.append(ex)
-
- return exts
+ plural_mappings = resource_helper.build_plural_mappings(
+ {}, RESOURCE_ATTRIBUTE_MAP)
+ attr.PLURALS.update(plural_mappings)
+ # PCM: Metering sets pagination and sorting to True. Do we have cfg
+ # entries for these so can be read? Else, must pass in.
+ return resource_helper.build_resource_info(plural_mappings,
+ RESOURCE_ATTRIBUTE_MAP,
+ constants.METERING,
+ translate_name=True,
+ allow_bulk=True)
def update_attributes_map(self, attributes):
super(Metering, self).update_attributes_map(
import abc
-from oslo.config import cfg
import six
from neutron.api import extensions
from neutron.api.v2 import attributes as attr
-from neutron.api.v2 import base
+from neutron.api.v2 import resource_helper
from neutron.common import exceptions as qexception
-from neutron import manager
from neutron.plugins.common import constants
-from neutron import quota
from neutron.services.service_base import ServicePluginBase
@classmethod
def get_resources(cls):
- plural_mapping = {
- 'ikepolicies': 'ikepolicy',
- 'ipsecpolicies': 'ipsecpolicy'
- }
- my_plurals = []
- for plural in RESOURCE_ATTRIBUTE_MAP:
- singular = plural_mapping.get(plural, plural[:-1])
- my_plurals.append((plural, singular))
- my_plurals.append(('peer_cidrs', 'peer_cidr'))
- attr.PLURALS.update(dict(my_plurals))
- resources = []
- plugin = manager.NeutronManager.get_service_plugins()[
- constants.VPN]
- for collection_name in RESOURCE_ATTRIBUTE_MAP:
- resource_name = plural_mapping.get(
- collection_name, collection_name[:-1])
- params = RESOURCE_ATTRIBUTE_MAP[collection_name]
- collection_name = collection_name.replace('_', '-')
-
- quota.QUOTAS.register_resource_by_name(resource_name)
- controller = base.create_resource(
- collection_name, resource_name, plugin, params,
- allow_pagination=cfg.CONF.allow_pagination,
- allow_sorting=cfg.CONF.allow_sorting)
-
- resource = extensions.ResourceExtension(
- collection_name,
- controller,
- path_prefix=constants.COMMON_PREFIXES[constants.VPN],
- attr_map=params)
- resources.append(resource)
- return resources
+ special_mappings = {'ikepolicies': 'ikepolicy',
+ 'ipsecpolicies': 'ipsecpolicy'}
+ plural_mappings = resource_helper.build_plural_mappings(
+ special_mappings, RESOURCE_ATTRIBUTE_MAP)
+ plural_mappings['peer_cidrs'] = 'peer_cidr'
+ attr.PLURALS.update(plural_mappings)
+ return resource_helper.build_resource_info(plural_mappings,
+ RESOURCE_ATTRIBUTE_MAP,
+ constants.VPN,
+ register_quota=True,
+ translate_name=True)
@classmethod
def get_plugin_interface(cls):