]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
VMWare-NSXv: VMWare NSXv extensions
authorGary Kotton <gkotton@vmware.com>
Mon, 29 Dec 2014 09:38:25 +0000 (01:38 -0800)
committerGary Kotton <gkotton@vmware.com>
Thu, 15 Jan 2015 14:23:42 +0000 (06:23 -0800)
For Kilo, the vendor-specific code should be moved to stackforge repo,
excluding the extensions (https://review.openstack.org/#/c/134680/).

This patch adds the extensions VMWare NSXv plugin from
stackforge/vmware-nsx repo.

There are 2 new extensions:
1. advanced_service_providers - this is required to enabled the NSXv to provide
                                metadata support (there is no metadata agent)
2. vnic_index - the security group support for the NSXv requires the vNIC index

Change-Id: I8c7aa95db1caf020afaa217d9c543b9031fab371
Partially-Implements: blueprint vmware-nsx-v

neutron/api/v2/attributes.py
neutron/plugins/vmware/extensions/advancedserviceproviders.py [new file with mode: 0644]
neutron/plugins/vmware/extensions/vnicindex.py [new file with mode: 0644]
neutron/tests/unit/test_attributes.py

index 7540509d8bfb92580f267ba17b58d8096006f02c..8959120b90a6928df246ebb599f8604e0f740e2f 100644 (file)
@@ -536,6 +536,12 @@ def convert_to_int(data):
         raise n_exc.InvalidInput(error_message=msg)
 
 
+def convert_to_int_if_not_none(data):
+    if data is not None:
+        return convert_to_int(data)
+    return data
+
+
 def convert_kvp_str_to_list(data):
     """Convert a value of the form 'key=value' to ['key', 'value'].
 
diff --git a/neutron/plugins/vmware/extensions/advancedserviceproviders.py b/neutron/plugins/vmware/extensions/advancedserviceproviders.py
new file mode 100644 (file)
index 0000000..ba62036
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright 2015 VMware, Inc.  All rights reserved.
+#
+#    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.
+
+
+# Attribute Map
+ADV_SERVICE_PROVIDERS = 'advanced_service_providers'
+
+
+EXTENDED_ATTRIBUTES_2_0 = {
+    'subnets': {
+        ADV_SERVICE_PROVIDERS:
+        {'allow_post': False,
+         'allow_put': False,
+         'is_visible': True,
+         'default': None}}}
+
+
+class Advancedserviceproviders(object):
+    @classmethod
+    def get_name(cls):
+        return "Advanced Service Providers"
+
+    @classmethod
+    def get_alias(cls):
+        return "advanced-service-providers"
+
+    @classmethod
+    def get_description(cls):
+        return "Id of the advanced service providers attached to the subnet"
+
+    @classmethod
+    def get_namespace(cls):
+        return(
+            "http://docs.openstack.org/ext/neutron/"
+            "advanced_service_providers/api/v1.0")
+
+    @classmethod
+    def get_updated(cls):
+        return "2014-12-11T12:00:00-00:00"
+
+    def get_extended_resources(self, version):
+        if version == "2.0":
+            return EXTENDED_ATTRIBUTES_2_0
+        else:
+            return {}
diff --git a/neutron/plugins/vmware/extensions/vnicindex.py b/neutron/plugins/vmware/extensions/vnicindex.py
new file mode 100644 (file)
index 0000000..9b0e6d0
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright 2015 VMware, Inc.  All rights reserved.
+#
+#    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.api.v2 import attributes
+
+# Attribute Map
+VNIC_INDEX = 'vnic_index'
+
+
+EXTENDED_ATTRIBUTES_2_0 = {
+    'ports': {
+        VNIC_INDEX:
+        {'allow_post': True,
+         'allow_put': True,
+         'is_visible': True,
+         'default': None,
+         'convert_to': attributes.convert_to_int_if_not_none}}}
+
+
+class Vnicindex(object):
+    @classmethod
+    def get_name(cls):
+        return "VNIC Index"
+
+    @classmethod
+    def get_alias(cls):
+        return "vnic-index"
+
+    @classmethod
+    def get_description(cls):
+        return ("Enable a port to be associated with a VNIC index")
+
+    @classmethod
+    def get_namespace(cls):
+        return "http://docs.openstack.org/ext/neutron/vnic_index/api/v1.0"
+
+    @classmethod
+    def get_updated(cls):
+        return "2014-09-15T12:00:00-00:00"
+
+    def get_extended_resources(self, version):
+        if version == "2.0":
+            return EXTENDED_ATTRIBUTES_2_0
+        else:
+            return {}
index 54a44b1f863415073883b58c64bda4990be337ac..163bbf5441b2e64495bdc64ecb289d61f326fad6 100644 (file)
@@ -763,6 +763,12 @@ class TestConvertToInt(base.BaseTestCase):
         self.assertEqual(attributes.convert_to_int(0), 0)
         self.assertEqual(attributes.convert_to_int(1), 1)
 
+    def test_convert_to_int_if_not_none(self):
+        self.assertEqual(attributes.convert_to_int_if_not_none(-1), -1)
+        self.assertEqual(attributes.convert_to_int_if_not_none(0), 0)
+        self.assertEqual(attributes.convert_to_int_if_not_none(1), 1)
+        self.assertIsNone(attributes.convert_to_int_if_not_none(None))
+
     def test_convert_to_int_str(self):
         self.assertEqual(attributes.convert_to_int('4'), 4)
         self.assertEqual(attributes.convert_to_int('6'), 6)