Add interface_attach compute feature flag

Dynamic attachment of network interfaces is not currently a supported feature
in the baremetal case.  This adds feature flag to skip related API tests.

Change-Id: Ia09e84d7acfcd7291b3c9b58bc163603d6a0fb34
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 08f3fd4..96ef11a 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -452,6 +452,10 @@
 # value)
 #enable_instance_password=true
 
+# Does the test environment support dynamic network interface
+# attachment? (boolean value)
+#interface_attach=true
+
 
 [dashboard]
 
diff --git a/tempest/api/compute/servers/test_attach_interfaces.py b/tempest/api/compute/servers/test_attach_interfaces.py
index 067d721..d1192c0 100644
--- a/tempest/api/compute/servers/test_attach_interfaces.py
+++ b/tempest/api/compute/servers/test_attach_interfaces.py
@@ -29,6 +29,8 @@
     def setUpClass(cls):
         if not CONF.service_available.neutron:
             raise cls.skipException("Neutron is required")
+        if not CONF.compute_feature_enabled.interface_attach:
+            raise cls.skipException("Interface attachment is not available.")
         # This test class requires network and subnet
         cls.set_network_resources(network=True, subnet=True)
         super(AttachInterfacesTestJSON, cls).setUpClass()
diff --git a/tempest/api/compute/v3/servers/test_attach_interfaces.py b/tempest/api/compute/v3/servers/test_attach_interfaces.py
index 43440c1..c2cf7e0 100644
--- a/tempest/api/compute/v3/servers/test_attach_interfaces.py
+++ b/tempest/api/compute/v3/servers/test_attach_interfaces.py
@@ -29,6 +29,8 @@
     def setUpClass(cls):
         if not CONF.service_available.neutron:
             raise cls.skipException("Neutron is required")
+        if not CONF.compute_feature_enabled.interface_attach:
+            raise cls.skipException("Interface attachment is not available.")
         # This test class requires network and subnet
         cls.set_network_resources(network=True, subnet=True)
         super(AttachInterfacesV3Test, cls).setUpClass()
diff --git a/tempest/config.py b/tempest/config.py
index db54269..7d195bf 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -324,7 +324,11 @@
                 default=True,
                 help='Enables returning of the instance password by the '
                      'relevant server API calls such as create, rebuild '
-                     'or rescue.')
+                     'or rescue.'),
+    cfg.BoolOpt('interface_attach',
+                default=True,
+                help='Does the test environment support dynamic network '
+                     'interface attachment?')
 ]
 
 
diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py
index 7dc817d..8c7af3d 100644
--- a/tempest/scenario/test_network_basic_ops.py
+++ b/tempest/scenario/test_network_basic_ops.py
@@ -14,8 +14,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 import collections
-
 import re
+import testtools
 
 from tempest.api.network import common as net_common
 from tempest.common import debug
@@ -347,6 +347,8 @@
                                                 msg="after re-associate "
                                                     "floating ip")
 
+    @testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
+                          'NIC hotplug not available')
     @test.attr(type='smoke')
     @test.services('compute', 'network')
     def test_hotplug_nic(self):