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:
Van Hung Pham 2017-11-01 18:28:40 +07:00
parent 5e08a9b0e7
commit 9f486a2f33
7 changed files with 58 additions and 4 deletions

View File

@ -19,6 +19,14 @@ from neutron_lib import constants as lib_constants
ROUTER_PORT_OWNERS = lib_constants.ROUTER_INTERFACE_OWNERS_SNAT + \
(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'
METERING_LABEL_KEY = '_metering_labels'
FLOATINGIP_AGENT_INTF_KEY = '_floatingip_agent_interfaces'

View File

@ -309,3 +309,7 @@ class UUIDField(obj_fields.AutoTypedField):
class FloatingIPStatusEnumField(obj_fields.AutoTypedField):
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)

View File

@ -185,6 +185,25 @@ class DVRMacAddress(base.NeutronDbObject):
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
class FloatingIP(base.NeutronDbObject):
# Version 1.0: Initial version

View File

@ -234,6 +234,10 @@ def get_random_ip_address(version=4):
return ip
def get_random_router_status():
return random.choice(n_const.VALID_ROUTER_STATUS)
def get_random_floatingip_status():
return random.choice(n_const.VALID_FLOATINGIP_STATUS)

View File

@ -45,6 +45,7 @@ from neutron.objects import network as net_obj
from neutron.objects import ports
from neutron.objects.qos import policy as qos_policy
from neutron.objects import rbac_db
from neutron.objects import router
from neutron.objects import securitygroup
from neutron.objects import subnet
from neutron.objects import utils as obj_utils
@ -488,6 +489,7 @@ FIELD_TYPE_VALUE_GENERATOR_MAP = {
tools.get_random_port_binding_statuses,
common_types.PortRangeField: tools.get_random_port,
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.UUIDField: uuidutils.generate_uuid,
common_types.VlanIdRangeField: tools.get_random_vlan,
@ -1517,10 +1519,9 @@ class BaseDbObjectTestCase(_BaseObjectTestCase,
attrs = {
'name': 'test_router',
}
# TODO(sindhu): Replace with the router object once its ready
router = obj_db_api.create_object(
self.context, l3_model.Router, attrs)
return router['id']
self._router = router.Router(self.context, **attrs)
self._router.create()
return self._router['id']
def _create_test_security_group_id(self):
sg_fields = self.get_random_object_fields(securitygroup.SecurityGroup)

View File

@ -83,6 +83,7 @@ object_data = {
'Reservation': '1.0-49929fef8e82051660342eed51b48f2a',
'ResourceDelta': '1.0-a980b37e0a52618b5af8db29af18be76',
'Route': '1.0-a9883a63b416126f9e345523ec09483b',
'Router': '1.0-b8d482cf3164541da4edaec99a644507',
'RouterExtraAttributes': '1.0-ef8d61ae2864f0ec9af0ab7939cab318',
'RouterL3AgentBinding': '1.0-c5ba6c95e3a4c1236a55f490cd67da82',
'RouterPort': '1.0-c8c8f499bcdd59186fcd83f323106908',

View File

@ -50,6 +50,23 @@ class RouterExtraAttrsDbObjTestCase(obj_test_base.BaseDbObjectTestCase,
{'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):
_test_class = router.RouterPort