Router to OVO
This patch introduces the Router model class to Oslo-Versioned Object Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db Change-Id: I5e0bef20aed884db7694286a398e10faff3b057e
This commit is contained in:
parent
5e08a9b0e7
commit
9f486a2f33
|
@ -19,6 +19,14 @@ from neutron_lib import constants as lib_constants
|
||||||
ROUTER_PORT_OWNERS = lib_constants.ROUTER_INTERFACE_OWNERS_SNAT + \
|
ROUTER_PORT_OWNERS = lib_constants.ROUTER_INTERFACE_OWNERS_SNAT + \
|
||||||
(lib_constants.DEVICE_OWNER_ROUTER_GW,)
|
(lib_constants.DEVICE_OWNER_ROUTER_GW,)
|
||||||
|
|
||||||
|
ROUTER_STATUS_ACTIVE = 'ACTIVE'
|
||||||
|
ROUTER_STATUS_ALLOCATING = 'ALLOCATING'
|
||||||
|
ROUTER_STATUS_ERROR = 'ERROR'
|
||||||
|
|
||||||
|
VALID_ROUTER_STATUS = (ROUTER_STATUS_ACTIVE,
|
||||||
|
ROUTER_STATUS_ALLOCATING,
|
||||||
|
ROUTER_STATUS_ERROR)
|
||||||
|
|
||||||
HA_ROUTER_STATE_KEY = '_ha_state'
|
HA_ROUTER_STATE_KEY = '_ha_state'
|
||||||
METERING_LABEL_KEY = '_metering_labels'
|
METERING_LABEL_KEY = '_metering_labels'
|
||||||
FLOATINGIP_AGENT_INTF_KEY = '_floatingip_agent_interfaces'
|
FLOATINGIP_AGENT_INTF_KEY = '_floatingip_agent_interfaces'
|
||||||
|
|
|
@ -309,3 +309,7 @@ class UUIDField(obj_fields.AutoTypedField):
|
||||||
|
|
||||||
class FloatingIPStatusEnumField(obj_fields.AutoTypedField):
|
class FloatingIPStatusEnumField(obj_fields.AutoTypedField):
|
||||||
AUTO_TYPE = obj_fields.Enum(valid_values=constants.VALID_FLOATINGIP_STATUS)
|
AUTO_TYPE = obj_fields.Enum(valid_values=constants.VALID_FLOATINGIP_STATUS)
|
||||||
|
|
||||||
|
|
||||||
|
class RouterStatusEnumField(obj_fields.AutoTypedField):
|
||||||
|
AUTO_TYPE = obj_fields.Enum(valid_values=constants.VALID_ROUTER_STATUS)
|
||||||
|
|
|
@ -185,6 +185,25 @@ class DVRMacAddress(base.NeutronDbObject):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@base.NeutronObjectRegistry.register
|
||||||
|
class Router(base.NeutronDbObject):
|
||||||
|
# Version 1.0: Initial version
|
||||||
|
VERSION = '1.0'
|
||||||
|
|
||||||
|
db_model = l3.Router
|
||||||
|
|
||||||
|
fields = {
|
||||||
|
'id': common_types.UUIDField(),
|
||||||
|
'project_id': obj_fields.StringField(nullable=True),
|
||||||
|
'name': obj_fields.StringField(nullable=True),
|
||||||
|
'status': common_types.RouterStatusEnumField(nullable=True),
|
||||||
|
'admin_state_up': obj_fields.BooleanField(nullable=True),
|
||||||
|
'gw_port_id': common_types.UUIDField(nullable=True),
|
||||||
|
'enable_snat': obj_fields.BooleanField(default=True),
|
||||||
|
'flavor_id': common_types.UUIDField(nullable=True),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@base.NeutronObjectRegistry.register
|
@base.NeutronObjectRegistry.register
|
||||||
class FloatingIP(base.NeutronDbObject):
|
class FloatingIP(base.NeutronDbObject):
|
||||||
# Version 1.0: Initial version
|
# Version 1.0: Initial version
|
||||||
|
|
|
@ -234,6 +234,10 @@ def get_random_ip_address(version=4):
|
||||||
return ip
|
return ip
|
||||||
|
|
||||||
|
|
||||||
|
def get_random_router_status():
|
||||||
|
return random.choice(n_const.VALID_ROUTER_STATUS)
|
||||||
|
|
||||||
|
|
||||||
def get_random_floatingip_status():
|
def get_random_floatingip_status():
|
||||||
return random.choice(n_const.VALID_FLOATINGIP_STATUS)
|
return random.choice(n_const.VALID_FLOATINGIP_STATUS)
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ from neutron.objects import network as net_obj
|
||||||
from neutron.objects import ports
|
from neutron.objects import ports
|
||||||
from neutron.objects.qos import policy as qos_policy
|
from neutron.objects.qos import policy as qos_policy
|
||||||
from neutron.objects import rbac_db
|
from neutron.objects import rbac_db
|
||||||
|
from neutron.objects import router
|
||||||
from neutron.objects import securitygroup
|
from neutron.objects import securitygroup
|
||||||
from neutron.objects import subnet
|
from neutron.objects import subnet
|
||||||
from neutron.objects import utils as obj_utils
|
from neutron.objects import utils as obj_utils
|
||||||
|
@ -488,6 +489,7 @@ FIELD_TYPE_VALUE_GENERATOR_MAP = {
|
||||||
tools.get_random_port_binding_statuses,
|
tools.get_random_port_binding_statuses,
|
||||||
common_types.PortRangeField: tools.get_random_port,
|
common_types.PortRangeField: tools.get_random_port,
|
||||||
common_types.PortRangeWith0Field: lambda: tools.get_random_port(0),
|
common_types.PortRangeWith0Field: lambda: tools.get_random_port(0),
|
||||||
|
common_types.RouterStatusEnumField: tools.get_random_router_status,
|
||||||
common_types.SetOfUUIDsField: get_set_of_random_uuids,
|
common_types.SetOfUUIDsField: get_set_of_random_uuids,
|
||||||
common_types.UUIDField: uuidutils.generate_uuid,
|
common_types.UUIDField: uuidutils.generate_uuid,
|
||||||
common_types.VlanIdRangeField: tools.get_random_vlan,
|
common_types.VlanIdRangeField: tools.get_random_vlan,
|
||||||
|
@ -1517,10 +1519,9 @@ class BaseDbObjectTestCase(_BaseObjectTestCase,
|
||||||
attrs = {
|
attrs = {
|
||||||
'name': 'test_router',
|
'name': 'test_router',
|
||||||
}
|
}
|
||||||
# TODO(sindhu): Replace with the router object once its ready
|
self._router = router.Router(self.context, **attrs)
|
||||||
router = obj_db_api.create_object(
|
self._router.create()
|
||||||
self.context, l3_model.Router, attrs)
|
return self._router['id']
|
||||||
return router['id']
|
|
||||||
|
|
||||||
def _create_test_security_group_id(self):
|
def _create_test_security_group_id(self):
|
||||||
sg_fields = self.get_random_object_fields(securitygroup.SecurityGroup)
|
sg_fields = self.get_random_object_fields(securitygroup.SecurityGroup)
|
||||||
|
|
|
@ -83,6 +83,7 @@ object_data = {
|
||||||
'Reservation': '1.0-49929fef8e82051660342eed51b48f2a',
|
'Reservation': '1.0-49929fef8e82051660342eed51b48f2a',
|
||||||
'ResourceDelta': '1.0-a980b37e0a52618b5af8db29af18be76',
|
'ResourceDelta': '1.0-a980b37e0a52618b5af8db29af18be76',
|
||||||
'Route': '1.0-a9883a63b416126f9e345523ec09483b',
|
'Route': '1.0-a9883a63b416126f9e345523ec09483b',
|
||||||
|
'Router': '1.0-b8d482cf3164541da4edaec99a644507',
|
||||||
'RouterExtraAttributes': '1.0-ef8d61ae2864f0ec9af0ab7939cab318',
|
'RouterExtraAttributes': '1.0-ef8d61ae2864f0ec9af0ab7939cab318',
|
||||||
'RouterL3AgentBinding': '1.0-c5ba6c95e3a4c1236a55f490cd67da82',
|
'RouterL3AgentBinding': '1.0-c5ba6c95e3a4c1236a55f490cd67da82',
|
||||||
'RouterPort': '1.0-c8c8f499bcdd59186fcd83f323106908',
|
'RouterPort': '1.0-c8c8f499bcdd59186fcd83f323106908',
|
||||||
|
|
|
@ -50,6 +50,23 @@ class RouterExtraAttrsDbObjTestCase(obj_test_base.BaseDbObjectTestCase,
|
||||||
{'router_id': lambda: self._create_test_router_id()})
|
{'router_id': lambda: self._create_test_router_id()})
|
||||||
|
|
||||||
|
|
||||||
|
class RouterIfaceObjectTestCase(obj_test_base.BaseObjectIfaceTestCase):
|
||||||
|
|
||||||
|
_test_class = router.Router
|
||||||
|
|
||||||
|
|
||||||
|
class RouterDbObjectTestCase(obj_test_base.BaseDbObjectTestCase,
|
||||||
|
testlib_api.SqlTestCase):
|
||||||
|
|
||||||
|
_test_class = router.Router
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(RouterDbObjectTestCase, self).setUp()
|
||||||
|
self.update_obj_fields(
|
||||||
|
{'gw_port_id': lambda: self._create_test_port_id(),
|
||||||
|
'flavor_id': lambda: self._create_test_flavor_id()})
|
||||||
|
|
||||||
|
|
||||||
class RouterPortIfaceObjectTestCase(obj_test_base.BaseObjectIfaceTestCase):
|
class RouterPortIfaceObjectTestCase(obj_test_base.BaseObjectIfaceTestCase):
|
||||||
|
|
||||||
_test_class = router.RouterPort
|
_test_class = router.RouterPort
|
||||||
|
|
Loading…
Reference in New Issue