From ddef83ed1900df6aa692d7ae624890a40e8c7b2d Mon Sep 17 00:00:00 2001 From: Yong Sheng Gong Date: Thu, 26 Jul 2012 07:32:59 +0800 Subject: [PATCH] add name into port and subnet. f-3-cli-usability-improvments The name is optional to create network/port/subnet and is up to user to decide its uniqueness. Change-Id: I40c834ed66e2da14a414232c86c9fd4f5c1d9154 --- quantum/api/v2/attributes.py | 6 +++++- quantum/db/db_base_plugin_v2.py | 4 ++++ quantum/db/models_v2.py | 2 ++ quantum/tests/unit/test_api_v2.py | 23 ++++++++++++----------- quantum/tests/unit/test_db_plugin.py | 19 ++++++++++++------- 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/quantum/api/v2/attributes.py b/quantum/api/v2/attributes.py index 799e13ec8..cf5ba2afb 100644 --- a/quantum/api/v2/attributes.py +++ b/quantum/api/v2/attributes.py @@ -144,7 +144,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'validate': {'type:regex': UUID_PATTERN}, 'is_visible': True}, 'name': {'allow_post': True, 'allow_put': True, - 'is_visible': True}, + 'default': '', 'is_visible': True}, 'subnets': {'allow_post': True, 'allow_put': True, 'default': [], 'is_visible': True}, @@ -165,6 +165,8 @@ RESOURCE_ATTRIBUTE_MAP = { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:regex': UUID_PATTERN}, 'is_visible': True}, + 'name': {'allow_post': True, 'allow_put': True, 'default': '', + 'is_visible': True}, 'network_id': {'allow_post': True, 'allow_put': False, 'validate': {'type:regex': UUID_PATTERN}, 'is_visible': True}, @@ -196,6 +198,8 @@ RESOURCE_ATTRIBUTE_MAP = { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:regex': UUID_PATTERN}, 'is_visible': True}, + 'name': {'allow_post': True, 'allow_put': True, 'default': '', + 'is_visible': True}, 'ip_version': {'allow_post': True, 'allow_put': False, 'convert_to': int, 'validate': {'type:values': [4, 6]}, diff --git a/quantum/db/db_base_plugin_v2.py b/quantum/db/db_base_plugin_v2.py index 0671e310a..438ba090c 100644 --- a/quantum/db/db_base_plugin_v2.py +++ b/quantum/db/db_base_plugin_v2.py @@ -615,6 +615,7 @@ class QuantumDbPluginV2(quantum_plugin_base_v2.QuantumPluginBaseV2): def _make_subnet_dict(self, subnet, fields=None): res = {'id': subnet['id'], + 'name': subnet['name'], 'tenant_id': subnet['tenant_id'], 'network_id': subnet['network_id'], 'ip_version': subnet['ip_version'], @@ -627,6 +628,7 @@ class QuantumDbPluginV2(quantum_plugin_base_v2.QuantumPluginBaseV2): def _make_port_dict(self, port, fields=None): res = {"id": port["id"], + 'name': port['name'], "network_id": port["network_id"], 'tenant_id': port['tenant_id'], "mac_address": port["mac_address"], @@ -694,6 +696,7 @@ class QuantumDbPluginV2(quantum_plugin_base_v2.QuantumPluginBaseV2): self._validate_subnet_cidr(network, s['cidr']) subnet = models_v2.Subnet(tenant_id=tenant_id, id=s.get('id') or utils.str_uuid(), + name=s['name'], network_id=s['network_id'], ip_version=s['ip_version'], cidr=s['cidr'], @@ -765,6 +768,7 @@ class QuantumDbPluginV2(quantum_plugin_base_v2.QuantumPluginBaseV2): ips = self._allocate_ips_for_port(context, network, port) port = models_v2.Port(tenant_id=tenant_id, + name=p['name'], id=p.get('id') or utils.str_uuid(), network_id=p['network_id'], mac_address=p['mac_address'], diff --git a/quantum/db/models_v2.py b/quantum/db/models_v2.py index b07599e19..ec7a55b8e 100644 --- a/quantum/db/models_v2.py +++ b/quantum/db/models_v2.py @@ -88,6 +88,7 @@ class IPAllocation(model_base.BASEV2): class Port(model_base.BASEV2, HasId, HasTenant): """Represents a port on a quantum v2 network.""" + name = sa.Column(sa.String(255)) network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"), nullable=False) fixed_ips = orm.relationship(IPAllocation, backref='ports', lazy="dynamic") @@ -103,6 +104,7 @@ class Subnet(model_base.BASEV2, HasId, HasTenant): When a subnet is created the first and last entries will be created. These are used for the IP allocation. """ + name = sa.Column(sa.String(255)) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id')) ip_version = sa.Column(sa.Integer, nullable=False) cidr = sa.Column(sa.String(64), nullable=False) diff --git a/quantum/tests/unit/test_api_v2.py b/quantum/tests/unit/test_api_v2.py index 1be9a5012..ec887bc10 100644 --- a/quantum/tests/unit/test_api_v2.py +++ b/quantum/tests/unit/test_api_v2.py @@ -525,8 +525,8 @@ class JSONV2TestCase(APIv2TestBase): self.assertEqual(res.status_int, exc.HTTPBadRequest.code) def test_create_missing_attr(self): - data = {'network': {'what': 'who', 'tenant_id': _uuid()}} - res = self.api.post_json(_get_path('networks'), data, + data = {'port': {'what': 'who', 'tenant_id': _uuid()}} + res = self.api.post_json(_get_path('ports'), data, expect_errors=True) self.assertEqual(res.status_int, 422) @@ -562,16 +562,16 @@ class JSONV2TestCase(APIv2TestBase): self.assertEqual(res.status_int, exc.HTTPBadRequest.code) def test_create_bulk_missing_attr(self): - data = {'networks': [{'what': 'who', 'tenant_id': _uuid()}]} - res = self.api.post_json(_get_path('networks'), data, + data = {'ports': [{'what': 'who', 'tenant_id': _uuid()}]} + res = self.api.post_json(_get_path('ports'), data, expect_errors=True) self.assertEqual(res.status_int, 422) def test_create_bulk_partial_body(self): - data = {'networks': [{'name': 'net1', 'admin_state_up': True, - 'tenant_id': _uuid()}, - {'tenant_id': _uuid()}]} - res = self.api.post_json(_get_path('networks'), data, + data = {'ports': [{'device_id': 'device_1', + 'tenant_id': _uuid()}, + {'tenant_id': _uuid()}]} + res = self.api.post_json(_get_path('ports'), data, expect_errors=True) self.assertEqual(res.status_int, 422) @@ -579,9 +579,10 @@ class JSONV2TestCase(APIv2TestBase): net_id = _uuid() tenant_id = _uuid() device_id = _uuid() - initial_input = {'port': {'network_id': net_id, 'tenant_id': tenant_id, - 'device_id': device_id, - 'admin_state_up': True}} + initial_input = {'port': {'name': '', 'network_id': net_id, + 'tenant_id': tenant_id, + 'device_id': device_id, + 'admin_state_up': True}} full_input = {'port': {'admin_state_up': True, 'mac_address': attributes.ATTR_NOT_SPECIFIED, 'fixed_ips': attributes.ATTR_NOT_SPECIFIED, diff --git a/quantum/tests/unit/test_db_plugin.py b/quantum/tests/unit/test_db_plugin.py index 4f55ee9ef..143e6feab 100644 --- a/quantum/tests/unit/test_db_plugin.py +++ b/quantum/tests/unit/test_db_plugin.py @@ -151,7 +151,8 @@ class QuantumDbPluginV2TestCase(unittest2.TestCase): content_type = 'application/' + fmt data = {'port': {'network_id': net_id, 'tenant_id': self._tenant_id}} - for arg in ('admin_state_up', 'device_id', 'mac_address', 'fixed_ips'): + for arg in ('admin_state_up', 'device_id', 'mac_address', + 'name', 'fixed_ips'): # Arg must be present and not empty if arg in kwargs and kwargs[arg]: data['port'][arg] = kwargs[arg] @@ -220,16 +221,18 @@ class QuantumDbPluginV2TestCase(unittest2.TestCase): self._delete('subnets', subnet['subnet']['id']) @contextlib.contextmanager - def port(self, subnet=None, fixed_ips=None, fmt='json'): + def port(self, subnet=None, fixed_ips=None, fmt='json', **kwargs): if not subnet: with self.subnet() as subnet: net_id = subnet['subnet']['network_id'] - port = self._make_port(fmt, net_id, fixed_ips=fixed_ips) + port = self._make_port(fmt, net_id, fixed_ips=fixed_ips, + **kwargs) yield port self._delete('ports', port['port']['id']) else: net_id = subnet['subnet']['network_id'] - port = self._make_port(fmt, net_id, fixed_ips=fixed_ips) + port = self._make_port(fmt, net_id, fixed_ips=fixed_ips, + **kwargs) yield port self._delete('ports', port['port']['id']) @@ -340,13 +343,14 @@ class TestV2HTTPResponse(QuantumDbPluginV2TestCase): class TestPortsV2(QuantumDbPluginV2TestCase): def test_create_port_json(self): keys = [('admin_state_up', True), ('status', 'ACTIVE')] - with self.port() as port: + with self.port(name='myname') as port: for k, v in keys: self.assertEquals(port['port'][k], v) self.assertTrue('mac_address' in port['port']) ips = port['port']['fixed_ips'] self.assertEquals(len(ips), 1) self.assertEquals(ips[0]['ip_address'], '10.0.0.2') + self.assertEquals('myname', port['port']['name']) def test_create_port_bad_tenant(self): with self.network() as network: @@ -854,8 +858,9 @@ class TestSubnetsV2(QuantumDbPluginV2TestCase): def test_create_subnet(self): gateway_ip = '10.0.0.1' cidr = '10.0.0.0/24' - self._test_create_subnet(gateway_ip=gateway_ip, - cidr=cidr) + subnet = self._test_create_subnet(gateway_ip=gateway_ip, + cidr=cidr) + self.assertTrue('name' in subnet['subnet']) def test_create_two_subnets(self): gateway_ips = ['10.0.0.1', '10.0.1.1'] -- 2.45.2