Merge "Adding a new option CONF.network.dvr_extra_resources"
diff --git a/tempest/api/network/admin/test_l3_agent_scheduler.py b/tempest/api/network/admin/test_l3_agent_scheduler.py
index b2cb003..d2e1492 100644
--- a/tempest/api/network/admin/test_l3_agent_scheduler.py
+++ b/tempest/api/network/admin/test_l3_agent_scheduler.py
@@ -67,34 +67,35 @@
             msg = "L3 Agent Scheduler enabled in conf, but L3 Agent not found"
             raise exceptions.InvalidConfiguration(msg)
         cls.router = cls.create_router(data_utils.rand_name('router'))
-        # NOTE(armax): If DVR is an available extension, and the created router
-        # is indeed a distributed one, more resources need to be provisioned
-        # in order to bind the router to the L3 agent.
-        # That said, let's preserve the existing test logic, where the extra
-        # query and setup steps are only required if the extension is available
-        # and only if the router's default type is distributed.
-        if test.is_extension_enabled('dvr', 'network'):
-            cls.is_dvr_router = cls.admin_routers_client.show_router(
-                cls.router['id'])['router'].get('distributed', False)
-            if cls.is_dvr_router:
-                cls.network = cls.create_network()
-                cls.subnet = cls.create_subnet(cls.network)
-                cls.port = cls.create_port(cls.network)
-                cls.routers_client.add_router_interface(
-                    cls.router['id'], port_id=cls.port['id'])
-                # NOTE: Sometimes we have seen this test fail with dvr in,
-                # multinode tests, since the dhcp port is not created before
-                # the test gets executed and so the router is not scheduled
-                # on the given agent. By adding the external gateway info to
-                # the router, the router should be properly scheduled in the
-                # dvr_snat node.
-                # This is a temporary work around to prevent a race condition.
-                external_gateway_info = {
-                    'network_id': CONF.network.public_network_id,
-                    'enable_snat': True}
-                cls.admin_routers_client.update_router(
-                    cls.router['id'],
-                    external_gateway_info=external_gateway_info)
+
+        if CONF.network.dvr_extra_resources:
+            # NOTE(armax): If DVR is an available extension, and the created
+            # router is indeed a distributed one, more resources need to be
+            # provisioned in order to bind the router to the L3 agent in the
+            # Liberty release or older, and are not required since the Mitaka
+            # release.
+            if test.is_extension_enabled('dvr', 'network'):
+                cls.is_dvr_router = cls.admin_routers_client.show_router(
+                    cls.router['id'])['router'].get('distributed', False)
+                if cls.is_dvr_router:
+                    cls.network = cls.create_network()
+                    cls.subnet = cls.create_subnet(cls.network)
+                    cls.port = cls.create_port(cls.network)
+                    cls.routers_client.add_router_interface(
+                        cls.router['id'], port_id=cls.port['id'])
+                    # NOTE: Sometimes we have seen this test fail with dvr in,
+                    # multinode tests, since the dhcp port is not created
+                    # before the test gets executed and so the router is not
+                    # scheduled on the given agent. By adding the external
+                    # gateway info to the router, the router should be properly
+                    # scheduled in the dvr_snat node. This is a temporary work
+                    # around to prevent a race condition.
+                    external_gateway_info = {
+                        'network_id': CONF.network.public_network_id,
+                        'enable_snat': True}
+                    cls.admin_routers_client.update_router(
+                        cls.router['id'],
+                        external_gateway_info=external_gateway_info)
 
     @classmethod
     def resource_cleanup(cls):
diff --git a/tempest/config.py b/tempest/config.py
index eeafea6..d29e03a 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -553,6 +553,15 @@
                 default=["1.0.0.0/16", "2.0.0.0/16"],
                 help="List of ip pools"
                      " for subnetpools creation"),
+    # TODO(ylobankov): Delete this option once the Liberty release is EOL.
+    cfg.BoolOpt('dvr_extra_resources',
+                default=True,
+                help="Whether or not to create internal network, subnet, "
+                     "port and add network interface to distributed router "
+                     "in L3 agent scheduler test. Extra resources need to be "
+                     "provisioned in order to bind router to L3 agent in the "
+                     "Liberty release or older, and are not required since "
+                     "the Mitaka release.")
 ]
 
 network_feature_group = cfg.OptGroup(name='network-feature-enabled',