[NSXv3] Add os-project-name tag

Add a new tag for the name of the project (tenant) that owns the resource.

Change-Id: I3b554cc40bc10ce058c16d83a564d7d0b80d189e
This commit is contained in:
Janet Yu
2015-12-16 18:04:51 -08:00
committed by Gary Kotton
parent 0a88c5d7b0
commit 4055680555
5 changed files with 37 additions and 10 deletions

View File

@@ -100,21 +100,25 @@ def build_v3_api_version_tag():
'tag': version.version_info.release_string()}]
def build_v3_tags_payload(resource, resource_type):
def build_v3_tags_payload(resource, resource_type, project_name):
"""
Construct the tags payload that will be pushed to NSX-v3
Add os-project-id:<tenant-id>, os-api-version:<neutron-api-version>,
os-neutron-id:<resource-id>
<resoutce>:<resource-id>, os-project-name:<project-name>
"""
# Add in a validation to ensure that we catch this at build time
if len(resource_type) > 20:
raise exceptions.InvalidInput(
error_message=_('scope cannot exceed 20 characters'))
# There may be cases when the plugin creates the port, for example DHCP
if not project_name:
project_name = 'NSX neutron plug-in'
return [{'scope': resource_type,
'tag': resource.get('id', '')},
{'scope': 'os-project-id',
'tag': resource.get('tenant_id', '')},
{'scope': 'os-project-name',
'tag': project_name},
{'scope': 'os-api-version',
'tag': version.version_info.release_string()}]

View File

@@ -350,7 +350,8 @@ class NsxV3Plugin(addr_pair_db.AllowedAddressPairsMixin,
context, net_data)
net_name = net_data['name']
tags = utils.build_v3_tags_payload(
net_data, resource_type='os-neutron-net-id')
net_data, resource_type='os-neutron-net-id',
project_name=context.tenant_name)
admin_state = net_data.get('admin_state_up', True)
# Create network on the backend
@@ -575,7 +576,8 @@ class NsxV3Plugin(addr_pair_db.AllowedAddressPairsMixin,
port_data, l2gw_port_check,
psec_is_on):
tags = utils.build_v3_tags_payload(
port_data, resource_type='os-neutron-port-id')
port_data, resource_type='os-neutron-port-id',
project_name=context.tenant_name)
parent_name, tag = self._get_data_from_binding_profile(
context, port_data)
address_bindings = self._build_address_bindings(port_data)
@@ -1000,7 +1002,8 @@ class NsxV3Plugin(addr_pair_db.AllowedAddressPairsMixin,
gw_info = self._extract_external_gw(context, router, is_extract=True)
router['router']['id'] = uuidutils.generate_uuid()
tags = utils.build_v3_tags_payload(
router['router'], resource_type='os-neutron-router-id')
router['router'], resource_type='os-neutron-router-id',
project_name=context.tenant_name)
result = self._router_client.create(
display_name=router['router'].get('name'),
tags=tags)
@@ -1396,7 +1399,8 @@ class NsxV3Plugin(addr_pair_db.AllowedAddressPairsMixin,
secgroup['id'] = uuidutils.generate_uuid()
tags = utils.build_v3_tags_payload(
secgroup, resource_type='os-neutron-secgr-id')
secgroup, resource_type='os-neutron-secgr-id',
project_name=context.tenant_name)
name = security.get_nsgroup_name(secgroup)
ns_group = None
firewall_section = None

View File

@@ -174,7 +174,8 @@ class NsxV3Driver(l2gateway_db.L2GatewayMixin):
self._validate_segment_id(seg_id)
try:
tags = nsx_utils.build_v3_tags_payload(
gw_connection, resource_type='os-neutron-l2gw-id')
gw_connection, resource_type='os-neutron-l2gw-id',
project_name=context.tenant_name)
bridge_endpoint = nsxlib.create_bridge_endpoint(
device_name=device_name,
seg_id=seg_id,

View File

@@ -40,6 +40,8 @@ class NsxQosPlugin(qos_plugin.QoSPlugin):
@db_base_plugin_common.convert_result_to_dict
def create_policy(self, context, policy):
if 'tenant_name' not in policy['policy']:
policy['policy']['tenant_name'] = context.tenant_name
tags = utils.build_v3_tags_payload(policy['policy'])
result = nsxlib.create_qos_switching_profile(
tags=tags, name=policy['policy'].get("name"),

View File

@@ -388,9 +388,24 @@ class TestNsxV3Utils(NsxV3PluginTestCaseMixin):
result = utils.build_v3_tags_payload(
{'id': 'fake_id',
'tenant_id': 'fake_tenant_id'},
resource_type='os-neutron-net-id')
resource_type='os-neutron-net-id',
project_name='fake_tenant_name')
expected = [{'scope': 'os-neutron-net-id', 'tag': 'fake_id'},
{'scope': 'os-project-id', 'tag': 'fake_tenant_id'},
{'scope': 'os-project-name', 'tag': 'fake_tenant_name'},
{'scope': 'os-api-version',
'tag': version.version_info.release_string()}]
self.assertEqual(expected, result)
def test_build_v3_tags_payload_internal(self):
result = utils.build_v3_tags_payload(
{'id': 'fake_id',
'tenant_id': 'fake_tenant_id'},
resource_type='os-neutron-net-id',
project_name=None)
expected = [{'scope': 'os-neutron-net-id', 'tag': 'fake_id'},
{'scope': 'os-project-id', 'tag': 'fake_tenant_id'},
{'scope': 'os-project-name', 'tag': 'NSX neutron plug-in'},
{'scope': 'os-api-version',
'tag': version.version_info.release_string()}]
self.assertEqual(expected, result)
@@ -400,7 +415,8 @@ class TestNsxV3Utils(NsxV3PluginTestCaseMixin):
utils.build_v3_tags_payload,
{'id': 'fake_id',
'tenant_id': 'fake_tenant_id'},
resource_type='os-neutron-maldini-rocks-id')
resource_type='os-neutron-maldini-rocks-id',
project_name='fake')
def test_build_v3_api_version_tag(self):
result = utils.build_v3_api_version_tag()