Separate base nodes and vcp nodes in lab03_ovs_dpdk

Change-Id: I31207d2eb50a42c1812bb6bafefd82a250ac901c
Reviewed-on: https://review.gerrithub.io/374039
Reviewed-by: Dennis Dmitriev <dis.xcom@gmail.com>
Tested-by: Dennis Dmitriev <dis.xcom@gmail.com>
diff --git a/tcp_tests/environment/lab03_ovs_dpdk/init.yml b/tcp_tests/environment/lab03_ovs_dpdk/init.yml
index b55396c..008ca29 100644
--- a/tcp_tests/environment/lab03_ovs_dpdk/init.yml
+++ b/tcp_tests/environment/lab03_ovs_dpdk/init.yml
@@ -1,688 +1,3 @@
-parameters:
-  # Simulate escape sequence to not interpolate some values,
-  # so these values may get into the node yamls as ${_param:...}
-  _param:
-    _esc: $
-
-  reclass:
-    storage:
-      node:
-        stacklight_telemetry_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_telemetry_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_message_queue_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_gateway_node03:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              bond0:
-                enabled: true
-                mode: active-backup
-                ovs_bridge: br-floating
-                ovs_type: OVSPort
-                proto: manual
-                slaves: enp2s0f1
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - enp2s0f1
-                require_interfaces:
-                - enp2s0f1
-              br-floating:
-                enabled: true
-                type: ovs_bridge
-              br-prv:
-                enabled: true
-                type: ovs_bridge
-              br_ctl:
-                address: ${_param:_esc}{_param:single_address}
-                bridge: br-floating
-                enabled: true
-                netmask: 255.255.255.0
-                ovs_options: tag=2416
-                proto: static
-                type: ovs_port
-              floating-to-prv:
-                bridge: br-floating
-                enabled: true
-                peer: prv-to-floating
-                port_type: patch
-                type: ovs_port
-              primary_first_nic:
-                enabled: true
-                master: bond0
-                name: enp2s0f1
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              prv-to-floating:
-                bridge: br-prv
-                enabled: true
-                peer: floating-to-prv
-                port_type: patch
-                type: ovs_port
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_database_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_gateway_node02:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              bond0:
-                enabled: true
-                mode: active-backup
-                ovs_bridge: br-floating
-                ovs_type: OVSPort
-                proto: manual
-                slaves: enp2s0f1
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - enp2s0f1
-                require_interfaces:
-                - enp2s0f1
-              br-floating:
-                enabled: true
-                type: ovs_bridge
-              br-prv:
-                enabled: true
-                type: ovs_bridge
-              br_ctl:
-                address: ${_param:_esc}{_param:single_address}
-                bridge: br-floating
-                enabled: true
-                netmask: 255.255.255.0
-                ovs_options: tag=2416
-                proto: static
-                type: ovs_port
-              floating-to-prv:
-                bridge: br-floating
-                enabled: true
-                peer: prv-to-floating
-                port_type: patch
-                type: ovs_port
-              primary_first_nic:
-                enabled: true
-                master: bond0
-                name: enp2s0f1
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              prv-to-floating:
-                bridge: br-prv
-                enabled: true
-                peer: floating-to-prv
-                port_type: patch
-                type: ovs_port
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_control_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_monitor_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_telemetry_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_message_queue_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        infra_kvm_node01:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              bond0:
-                enabled: true
-                mode: active-backup
-                proto: manual
-                slaves: enp3s0f1
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - enp3s0f1
-                require_interfaces:
-                - enp3s0f1
-              bond0.2416:
-                enabled: true
-                proto: manual
-                type: vlan
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0
-                require_interfaces:
-                - bond0
-              br_ctl:
-                address: ${_param:_esc}{_param:single_address}
-                enabled: true
-                netmask: 255.255.255.0
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0.2416
-                require_interfaces:
-                - bond0.2416
-              br_mgm:
-                address: ${_param:_esc}{_param:deploy_address}
-                enabled: true
-                gateway: 172.16.49.1
-                name_servers:
-                - 8.8.8.8
-                - 8.8.4.4
-                netmask: 255.255.255.192
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - enp3s0f0
-                require_interfaces:
-                - enp3s0f0
-              eth1:
-                enabled: true
-                master: bond0
-                name: enp3s0f1
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              eth2:
-                enabled: true
-                name: enp3s0f0
-                proto: manual
-                type: eth
-                ipflush_onchange: true
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_proxy_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_telemetry_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        infra_kvm_node02:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              bond0:
-                enabled: true
-                mode: active-backup
-                proto: manual
-                slaves: eno2
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - eno2
-                require_interfaces:
-                - eno2
-              bond0.2416:
-                enabled: true
-                proto: manual
-                type: vlan
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0
-                require_interfaces:
-                - bond0
-              br_ctl:
-                address: ${_param:_esc}{_param:single_address}
-                enabled: true
-                netmask: 255.255.255.0
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0.2416
-                require_interfaces:
-                - bond0.2416
-              br_mgm:
-                address: ${_param:_esc}{_param:deploy_address}
-                enabled: true
-                gateway: 172.16.49.1
-                name_servers:
-                - 8.8.8.8
-                - 8.8.4.4
-                netmask: 255.255.255.192
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - eno1
-                require_interfaces:
-                - eno1
-              eth1:
-                enabled: true
-                master: bond0
-                name: eno2
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              eth2:
-                enabled: true
-                name: eno1
-                proto: manual
-                type: eth
-                ipflush_onchange: true
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_monitor_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_telemetry_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_log_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_proxy_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_message_queue_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_log_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_database_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_control_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_compute_node02:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              eth1:
-                enabled: true
-                master: bond0
-                name: eth0
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-#              eth2:
-#                enabled: true
-#                master: bond0
-#                name: eth3
-#                proto: manual
-#                type: slave
-#                ipflush_onchange: true
-              bond0:
-                enabled: true
-                mode: active-backup
-                ovs_bridge: br-floating
-                ovs_type: OVSPort
-                proto: manual
-#                slaves: eth0 eth3
-                slaves: eth0
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - eth0
-#                - eth3
-                require_interfaces:
-                - eth0
-#                - eth3
-              bond0.2416:
-                enabled: true
-                proto: manual
-                type: vlan
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0
-                require_interfaces:
-                - bond0
-              br-prv:
-                address: ${_param:_esc}{_param:tenant_address}
-                enabled: true
-                netmask: 255.255.255.0
-                type: dpdk_ovs_bridge
-              br_ctl:
-                address: ${_param:_esc}{_param:control_address}
-                enabled: true
-                netmask: 255.255.255.0
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0.2416
-                require_interfaces:
-                - bond0.2416
-              dpdk0:
-                bond: dpdkbond1
-                driver: igb_uio
-                enabled: true
-                n_rxq: 2
-                name: eth2
-                pci: '0000:05:00.1'
-                type: dpdk_ovs_port
-              dpdk1:
-                bond: dpdkbond1
-                driver: igb_uio
-                enabled: true
-                n_rxq: 2
-                name: eth4
-                pci: 0000:0b:00.0
-                type: dpdk_ovs_port
-              dpdkbond1:
-                bridge: br-prv
-                enabled: true
-                mode: active-backup
-                type: dpdk_ovs_bond
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_gateway_node01:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              bond0:
-                enabled: true
-                mode: active-backup
-                ovs_bridge: br-floating
-                ovs_type: OVSPort
-                proto: manual
-                slaves: enp2s0f1
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - enp2s0f1
-                require_interfaces:
-                - enp2s0f1
-              br-floating:
-                enabled: true
-                type: ovs_bridge
-              br-prv:
-                enabled: true
-                type: ovs_bridge
-              br_ctl:
-                address: ${_param:_esc}{_param:single_address}
-                bridge: br-floating
-                enabled: true
-                netmask: 255.255.255.0
-                ovs_options: tag=2416
-                proto: static
-                type: ovs_port
-              floating-to-prv:
-                bridge: br-floating
-                enabled: true
-                peer: prv-to-floating
-                port_type: patch
-                type: ovs_port
-              primary_first_nic:
-                enabled: true
-                master: bond0
-                name: enp2s0f1
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              prv-to-floating:
-                bridge: br-prv
-                enabled: true
-                peer: floating-to-prv
-                port_type: patch
-                type: ovs_port
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_log_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_compute_node01:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              iface1:
-                enabled: true
-                master: bond0
-                name: enp3s0f1
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              iface2:
-                enabled: true
-                master: bond0
-                name: enp5s0f0
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              bond0:
-                enabled: true
-                mode: active-backup
-                ovs_bridge: br-floating
-                ovs_type: OVSPort
-                proto: manual
-                slaves: enp3s0f1 enp5s0f0
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - enp3s0f1
-                - enp5s0f0
-                require_interfaces:
-                - enp3s0f1
-                - enp5s0f0
-              bond0.2416:
-                enabled: true
-                proto: manual
-                type: vlan
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0
-                require_interfaces:
-                - bond0
-              br-prv:
-                address: ${_param:_esc}{_param:tenant_address}
-                enabled: true
-                netmask: 255.255.255.0
-                type: dpdk_ovs_bridge
-              br_ctl:
-                address: ${_param:_esc}{_param:control_address}
-                enabled: true
-                netmask: 255.255.255.0
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0.2416
-                require_interfaces:
-                - bond0.2416
-              dpdk0:
-                bond: dpdkbond1
-                driver: igb_uio
-                enabled: true
-                n_rxq: 2
-                name: enp5s0f1
-                pci: '0000:05:00.1'
-                type: dpdk_ovs_port
-              dpdk1:
-                bond: dpdkbond1
-                driver: igb_uio
-                enabled: true
-                n_rxq: 2
-                name: enp5s0f2
-                pci: '0000:05:00.2'
-                type: dpdk_ovs_port
-              dpdkbond1:
-                bridge: br-prv
-                enabled: true
-                mode: active-backup
-                type: dpdk_ovs_bond
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_database_node03:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        infra_kvm_node03:
-          params:
-            # Use interfaces configuration from the context file,
-            # or generate your own 'linux.network.interface' object using
-            # additional inventory.
-            # For example, you can take the 'inventory_node_name' and find it's config
-            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
-            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
-            linux_network_interfaces:
-              bond0:
-                enabled: true
-                mode: active-backup
-                proto: manual
-                slaves: eno2
-                type: bond
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - eno2
-                require_interfaces:
-                - eno2
-              bond0.2416:
-                enabled: true
-                proto: manual
-                type: vlan
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0
-                require_interfaces:
-                - bond0
-              br_ctl:
-                address: ${_param:_esc}{_param:single_address}
-                enabled: true
-                netmask: 255.255.255.0
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - bond0.2416
-                require_interfaces:
-                - bond0.2416
-              br_mgm:
-                address: ${_param:_esc}{_param:deploy_address}
-                enabled: true
-                gateway: 172.16.49.1
-                name_servers:
-                - 8.8.8.8
-                - 8.8.4.4
-                netmask: 255.255.255.192
-                proto: static
-                type: bridge
-                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
-                - eno1
-                require_interfaces:
-                - eno1
-              eth1:
-                enabled: true
-                master: bond0
-                name: eno2
-                proto: manual
-                type: slave
-                ipflush_onchange: true
-              eth2:
-                enabled: true
-                name: eno1
-                proto: manual
-                type: eth
-                ipflush_onchange: true
-
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_monitor_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        openstack_control_node01:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
-        stacklight_telemetry_node02:
-          params:
-            linux_network_interfaces:
-              ens3: ${_param:_esc}{_param:linux_single_interface}
-          classes:
-          - environment.lab03_ovs_dpdk.common
+classes:
+- environment.lab03_ovs_dpdk.nodes
+- environment.lab03_ovs_dpdk.vcp_nodes
diff --git a/tcp_tests/environment/lab03_ovs_dpdk/nodes.yml b/tcp_tests/environment/lab03_ovs_dpdk/nodes.yml
new file mode 100644
index 0000000..971b6b9
--- /dev/null
+++ b/tcp_tests/environment/lab03_ovs_dpdk/nodes.yml
@@ -0,0 +1,557 @@
+parameters:
+  # Simulate escape sequence to not interpolate some values,
+  # so these values may get into the node yamls as ${_param:...}
+  _param:
+    _esc: $
+
+  reclass:
+    storage:
+      node:
+        infra_kvm_node01:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              bond0:
+                enabled: true
+                mode: active-backup
+                proto: manual
+                slaves: enp3s0f1
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - enp3s0f1
+                require_interfaces:
+                - enp3s0f1
+              bond0.2416:
+                enabled: true
+                proto: manual
+                type: vlan
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0
+                require_interfaces:
+                - bond0
+              br_ctl:
+                address: ${_param:_esc}{_param:single_address}
+                enabled: true
+                netmask: 255.255.255.0
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0.2416
+                require_interfaces:
+                - bond0.2416
+              br_mgm:
+                address: ${_param:_esc}{_param:deploy_address}
+                enabled: true
+                gateway: 172.16.49.1
+                name_servers:
+                - 8.8.8.8
+                - 8.8.4.4
+                netmask: 255.255.255.192
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - enp3s0f0
+                require_interfaces:
+                - enp3s0f0
+              eth1:
+                enabled: true
+                master: bond0
+                name: enp3s0f1
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              eth2:
+                enabled: true
+                name: enp3s0f0
+                proto: manual
+                type: eth
+                ipflush_onchange: true
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        infra_kvm_node02:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              bond0:
+                enabled: true
+                mode: active-backup
+                proto: manual
+                slaves: eno2
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - eno2
+                require_interfaces:
+                - eno2
+              bond0.2416:
+                enabled: true
+                proto: manual
+                type: vlan
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0
+                require_interfaces:
+                - bond0
+              br_ctl:
+                address: ${_param:_esc}{_param:single_address}
+                enabled: true
+                netmask: 255.255.255.0
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0.2416
+                require_interfaces:
+                - bond0.2416
+              br_mgm:
+                address: ${_param:_esc}{_param:deploy_address}
+                enabled: true
+                gateway: 172.16.49.1
+                name_servers:
+                - 8.8.8.8
+                - 8.8.4.4
+                netmask: 255.255.255.192
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - eno1
+                require_interfaces:
+                - eno1
+              eth1:
+                enabled: true
+                master: bond0
+                name: eno2
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              eth2:
+                enabled: true
+                name: eno1
+                proto: manual
+                type: eth
+                ipflush_onchange: true
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        infra_kvm_node03:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              bond0:
+                enabled: true
+                mode: active-backup
+                proto: manual
+                slaves: eno2
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - eno2
+                require_interfaces:
+                - eno2
+              bond0.2416:
+                enabled: true
+                proto: manual
+                type: vlan
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0
+                require_interfaces:
+                - bond0
+              br_ctl:
+                address: ${_param:_esc}{_param:single_address}
+                enabled: true
+                netmask: 255.255.255.0
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0.2416
+                require_interfaces:
+                - bond0.2416
+              br_mgm:
+                address: ${_param:_esc}{_param:deploy_address}
+                enabled: true
+                gateway: 172.16.49.1
+                name_servers:
+                - 8.8.8.8
+                - 8.8.4.4
+                netmask: 255.255.255.192
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - eno1
+                require_interfaces:
+                - eno1
+              eth1:
+                enabled: true
+                master: bond0
+                name: eno2
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              eth2:
+                enabled: true
+                name: eno1
+                proto: manual
+                type: eth
+                ipflush_onchange: true
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_compute_node01:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              iface1:
+                enabled: true
+                master: bond0
+                name: enp3s0f1
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              iface2:
+                enabled: true
+                master: bond0
+                name: enp5s0f0
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              bond0:
+                enabled: true
+                mode: active-backup
+                ovs_bridge: br-floating
+                ovs_type: OVSPort
+                proto: manual
+                slaves: enp3s0f1 enp5s0f0
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - enp3s0f1
+                - enp5s0f0
+                require_interfaces:
+                - enp3s0f1
+                - enp5s0f0
+              bond0.2416:
+                enabled: true
+                proto: manual
+                type: vlan
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0
+                require_interfaces:
+                - bond0
+              br-prv:
+                address: ${_param:_esc}{_param:tenant_address}
+                enabled: true
+                netmask: 255.255.255.0
+                type: dpdk_ovs_bridge
+              br_ctl:
+                address: ${_param:_esc}{_param:control_address}
+                enabled: true
+                netmask: 255.255.255.0
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0.2416
+                require_interfaces:
+                - bond0.2416
+              dpdk0:
+                bond: dpdkbond1
+                driver: igb_uio
+                enabled: true
+                n_rxq: 2
+                name: enp5s0f1
+                pci: '0000:05:00.1'
+                type: dpdk_ovs_port
+              dpdk1:
+                bond: dpdkbond1
+                driver: igb_uio
+                enabled: true
+                n_rxq: 2
+                name: enp5s0f2
+                pci: '0000:05:00.2'
+                type: dpdk_ovs_port
+              dpdkbond1:
+                bridge: br-prv
+                enabled: true
+                mode: active-backup
+                type: dpdk_ovs_bond
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_compute_node02:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              eth1:
+                enabled: true
+                master: bond0
+                name: eth0
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+#              eth2:
+#                enabled: true
+#                master: bond0
+#                name: eth3
+#                proto: manual
+#                type: slave
+#                ipflush_onchange: true
+              bond0:
+                enabled: true
+                mode: active-backup
+                ovs_bridge: br-floating
+                ovs_type: OVSPort
+                proto: manual
+#                slaves: eth0 eth3
+                slaves: eth0
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - eth0
+#                - eth3
+                require_interfaces:
+                - eth0
+#                - eth3
+              bond0.2416:
+                enabled: true
+                proto: manual
+                type: vlan
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0
+                require_interfaces:
+                - bond0
+              br-prv:
+                address: ${_param:_esc}{_param:tenant_address}
+                enabled: true
+                netmask: 255.255.255.0
+                type: dpdk_ovs_bridge
+              br_ctl:
+                address: ${_param:_esc}{_param:control_address}
+                enabled: true
+                netmask: 255.255.255.0
+                proto: static
+                type: bridge
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - bond0.2416
+                require_interfaces:
+                - bond0.2416
+              dpdk0:
+                bond: dpdkbond1
+                driver: igb_uio
+                enabled: true
+                n_rxq: 2
+                name: eth2
+                pci: '0000:05:00.1'
+                type: dpdk_ovs_port
+              dpdk1:
+                bond: dpdkbond1
+                driver: igb_uio
+                enabled: true
+                n_rxq: 2
+                name: eth4
+                pci: 0000:0b:00.0
+                type: dpdk_ovs_port
+              dpdkbond1:
+                bridge: br-prv
+                enabled: true
+                mode: active-backup
+                type: dpdk_ovs_bond
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_gateway_node01:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              bond0:
+                enabled: true
+                mode: active-backup
+                ovs_bridge: br-floating
+                ovs_type: OVSPort
+                proto: manual
+                slaves: enp2s0f1
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - enp2s0f1
+                require_interfaces:
+                - enp2s0f1
+              br-floating:
+                enabled: true
+                type: ovs_bridge
+              br-prv:
+                enabled: true
+                type: ovs_bridge
+              br_ctl:
+                address: ${_param:_esc}{_param:single_address}
+                bridge: br-floating
+                enabled: true
+                netmask: 255.255.255.0
+                ovs_options: tag=2416
+                proto: static
+                type: ovs_port
+              floating-to-prv:
+                bridge: br-floating
+                enabled: true
+                peer: prv-to-floating
+                port_type: patch
+                type: ovs_port
+              primary_first_nic:
+                enabled: true
+                master: bond0
+                name: enp2s0f1
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              prv-to-floating:
+                bridge: br-prv
+                enabled: true
+                peer: floating-to-prv
+                port_type: patch
+                type: ovs_port
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_gateway_node02:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              bond0:
+                enabled: true
+                mode: active-backup
+                ovs_bridge: br-floating
+                ovs_type: OVSPort
+                proto: manual
+                slaves: enp2s0f1
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - enp2s0f1
+                require_interfaces:
+                - enp2s0f1
+              br-floating:
+                enabled: true
+                type: ovs_bridge
+              br-prv:
+                enabled: true
+                type: ovs_bridge
+              br_ctl:
+                address: ${_param:_esc}{_param:single_address}
+                bridge: br-floating
+                enabled: true
+                netmask: 255.255.255.0
+                ovs_options: tag=2416
+                proto: static
+                type: ovs_port
+              floating-to-prv:
+                bridge: br-floating
+                enabled: true
+                peer: prv-to-floating
+                port_type: patch
+                type: ovs_port
+              primary_first_nic:
+                enabled: true
+                master: bond0
+                name: enp2s0f1
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              prv-to-floating:
+                bridge: br-prv
+                enabled: true
+                peer: floating-to-prv
+                port_type: patch
+                type: ovs_port
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_gateway_node03:
+          params:
+            # Use interfaces configuration from the context file,
+            # or generate your own 'linux.network.interface' object using
+            # additional inventory.
+            # For example, you can take the 'inventory_node_name' and find it's config
+            # in an additional dict inventory[inventory_node_name] loaded from custom_inventory.yaml,
+            # or skip the original context from 'cookiecutter' object and iterate only custom inventory.
+            linux_network_interfaces:
+              bond0:
+                enabled: true
+                mode: active-backup
+                ovs_bridge: br-floating
+                ovs_type: OVSPort
+                proto: manual
+                slaves: enp2s0f1
+                type: bond
+                use_interfaces: # Remove 'use_interfaces' after https://gerrit.mcp.mirantis.net/#/c/8344
+                - enp2s0f1
+                require_interfaces:
+                - enp2s0f1
+              br-floating:
+                enabled: true
+                type: ovs_bridge
+              br-prv:
+                enabled: true
+                type: ovs_bridge
+              br_ctl:
+                address: ${_param:_esc}{_param:single_address}
+                bridge: br-floating
+                enabled: true
+                netmask: 255.255.255.0
+                ovs_options: tag=2416
+                proto: static
+                type: ovs_port
+              floating-to-prv:
+                bridge: br-floating
+                enabled: true
+                peer: prv-to-floating
+                port_type: patch
+                type: ovs_port
+              primary_first_nic:
+                enabled: true
+                master: bond0
+                name: enp2s0f1
+                proto: manual
+                type: slave
+                ipflush_onchange: true
+              prv-to-floating:
+                bridge: br-prv
+                enabled: true
+                peer: floating-to-prv
+                port_type: patch
+                type: ovs_port
+
+          classes:
+          - environment.lab03_ovs_dpdk.common
diff --git a/tcp_tests/environment/lab03_ovs_dpdk/vcp_nodes.yml b/tcp_tests/environment/lab03_ovs_dpdk/vcp_nodes.yml
new file mode 100644
index 0000000..2a5b8fa
--- /dev/null
+++ b/tcp_tests/environment/lab03_ovs_dpdk/vcp_nodes.yml
@@ -0,0 +1,158 @@
+classes:
+- environment.lab03_ovs_dpdk.physical_nodes
+- environment.lab03_ovs_dpdk.virtual_nodes
+parameters:
+  # Simulate escape sequence to not interpolate some values,
+  # so these values may get into the node yamls as ${_param:...}
+  _param:
+    _esc: $
+
+  reclass:
+    storage:
+      node:
+        openstack_control_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_control_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_control_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_database_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_database_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_database_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_message_queue_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_message_queue_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_message_queue_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_telemetry_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_telemetry_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_telemetry_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        openstack_proxy_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        openstack_proxy_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+
+        stacklight_monitor_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        stacklight_monitor_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        stacklight_monitor_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        stacklight_telemetry_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        stacklight_telemetry_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        stacklight_telemetry_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+
+        stacklight_log_node01:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        stacklight_log_node02:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common
+        stacklight_log_node03:
+          params:
+            linux_network_interfaces:
+              ens3: ${_param:_esc}{_param:linux_single_interface}
+          classes:
+          - environment.lab03_ovs_dpdk.common