Add ODL as backend of Neutron for E/// lab

Related-bug: PROD-36264
Change-Id: I8ef5799e26cce578fc2e7c96775883b38e8ea5af
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-odl-maas/underlay.hot b/tcp_tests/templates/bm-e7-cicd-pike-odl-maas/underlay.hot
new file mode 100644
index 0000000..f3317b7
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-odl-maas/underlay.hot
@@ -0,0 +1,111 @@
+---
+
+heat_template_version: queens
+
+description: MCP environment for bm-e7-cicd-pike-odl-maas
+
+parameters:
+  instance_domain:
+    type: string
+    default: bm-e7-cicd-pike-odl-maas.local
+  mcp_version:
+    type: string
+  env_name:
+    type: string
+  key_pair:
+    type: string
+  cfg_flavor:
+    type: string
+  foundation_image:
+    type: string
+  foundation_flavor:
+    type: string
+  bm_availability_zone:
+    type: string
+  control_subnet_cidr:
+    type: string
+    default: "10.167.11.0/24"
+  tenant_subnet_cidr:
+    type: string
+    default: "10.167.13.0/24"
+  external_subnet_cidr:
+    type: string
+    default: "172.17.42.64/26"
+  management_subnet_cidr:
+    type: string
+    default: "172.16.162.64/26"
+  management_subnet_cfg01_ip:
+    type: string
+    default: 172.16.162.66
+  management_subnet_gateway_ip:
+    type: string
+    default: 172.16.162.65
+  management_subnet_pool_start:
+    type: string
+    default: 172.16.162.67
+  management_subnet_pool_end:
+    type: string
+    default: 172.16.162.100
+  salt_master_control_ip:
+    type: string
+    default: 172.16.162.66
+  deploy_empty_node:
+    type: boolean
+    default: False
+
+
+resources:
+  subnets:
+    type: MCP::SubnetsE7
+    properties:
+      stack_name: { get_param: "OS::stack_name" }
+      env_name: { get_param: env_name }
+      management_net: 'system-phys-430'
+      management_subnet_cidr: { get_param: management_subnet_cidr }
+      management_subnet_gateway_ip: { get_param: management_subnet_gateway_ip }
+      management_subnet_pool_start: { get_param: management_subnet_pool_start }
+      management_subnet_pool_end: { get_param: management_subnet_pool_end }
+
+  #flavors:
+  #  type: MCP::Flavors
+
+  cfg01_node:
+    type: MCP::MasterNodeE7
+    depends_on: [subnets]
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      cfg01_flavor: { get_param: cfg_flavor }
+      availability_zone: { get_param: bm_availability_zone }
+      management_net: 'system-phys-430'
+      management_subnet_cfg01_ip: { get_param: management_subnet_cfg01_ip }
+      instance_name: cfg01
+      instance_domain: {get_param: instance_domain}
+
+  foundation_node:
+    type: MCP::FoundationNodeE7
+    depends_on: [subnets]
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: foundation
+      availability_zone: { get_param: bm_availability_zone }
+      management_net: 'system-phys-430'
+      management_subnet_gateway_ip: { get_param: management_subnet_gateway_ip }
+      instance_image: { get_param: foundation_image }
+      instance_flavor: {get_param: foundation_flavor}
+      underlay_userdata: { get_file: ./underlay--user-data-foundation.yaml }
+      management_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, management_net_prefix] }, '126' ]
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+outputs:
+  foundation_public_ip:
+    description: foundation node IP address (management)
+    value:
+      get_attr:
+      - foundation_node
+      - instance_address
+...