neutron/neutron/api/rpc/callbacks/resources.py

100 lines
3.1 KiB
Python

# 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._i18n import _
from neutron.objects import address_group
from neutron.objects import agent
from neutron.objects import conntrack_helper
from neutron.objects import local_ip
from neutron.objects.logapi import logging_resource as log_object
from neutron.objects import ndp_proxy
from neutron.objects import network
from neutron.objects import port_forwarding
from neutron.objects import ports
from neutron.objects.qos import policy
from neutron.objects import securitygroup
from neutron.objects import subnet
from neutron.objects import trunk
# Supported types
LOGGING_RESOURCE = log_object.Log.obj_name()
TRUNK = trunk.Trunk.obj_name()
QOS_POLICY = policy.QosPolicy.obj_name()
SUBPORT = trunk.SubPort.obj_name()
PORT = ports.Port.obj_name()
NETWORK = network.Network.obj_name()
SUBNET = subnet.Subnet.obj_name()
SECURITYGROUP = securitygroup.SecurityGroup.obj_name()
SECURITYGROUPRULE = securitygroup.SecurityGroupRule.obj_name()
PORTFORWARDING = port_forwarding.PortForwarding.obj_name()
CONNTRACKHELPER = conntrack_helper.ConntrackHelper.obj_name()
ADDRESSGROUP = address_group.AddressGroup.obj_name()
LOCAL_IP_ASSOCIATION = local_ip.LocalIPAssociation.obj_name()
NDPPROXY = ndp_proxy.NDPProxy.obj_name()
AGENT = agent.Agent.obj_name()
_VALID_CLS = (
policy.QosPolicy,
trunk.Trunk,
trunk.SubPort,
ports.Port,
subnet.Subnet,
network.Network,
securitygroup.SecurityGroup,
securitygroup.SecurityGroupRule,
log_object.Log,
port_forwarding.PortForwarding,
conntrack_helper.ConntrackHelper,
address_group.AddressGroup,
local_ip.LocalIPAssociation,
ndp_proxy.NDPProxy,
agent.Agent,
)
_TYPE_TO_CLS_MAP = {cls.obj_name(): cls for cls in _VALID_CLS}
LOCAL_RESOURCE_VERSIONS = {
resource_type: cls.VERSION
for resource_type, cls in _TYPE_TO_CLS_MAP.items()
}
def get_resource_type(resource_cls):
if not resource_cls:
return None
if not hasattr(resource_cls, 'obj_name'):
return None
return resource_cls.obj_name()
def register_resource_class(resource_cls):
resource_type = get_resource_type(resource_cls)
if not resource_type:
msg = _("cannot find resource type for %s class") % resource_cls
raise ValueError(msg)
if resource_type not in _TYPE_TO_CLS_MAP:
_TYPE_TO_CLS_MAP[resource_type] = resource_cls
if resource_type not in LOCAL_RESOURCE_VERSIONS:
LOCAL_RESOURCE_VERSIONS[resource_type] = resource_cls.VERSION
def is_valid_resource_type(resource_type):
return resource_type in _TYPE_TO_CLS_MAP
def get_resource_cls(resource_type):
return _TYPE_TO_CLS_MAP.get(resource_type)