Add Ironic network

The patch connects additional ironic network to the following servers:
 * workerks
 * gateways
 * computes
 * spares

Related-Prod: PRODX-4769
Change-Id: I3d28eec496023759a219386ab15d80c79ba442a2
diff --git a/de/heat-templates/top.yaml b/de/heat-templates/top.yaml
index a6fef6a..16ff6c1 100644
--- a/de/heat-templates/top.yaml
+++ b/de/heat-templates/top.yaml
@@ -50,6 +50,10 @@
     type: number
     description: Number of contrail nodes to deploy
     default: 0
+  vbmc_size:
+    type: number
+    description: Number of nodes for virtualbmc BM node simulator
+    default: 0
   ucp_boot_timeout:
     type: number
     description: Boot timeout for UCP instance
@@ -95,6 +99,27 @@
   storage_backend_interface:
     type: string
     default: 'ens6'
+  ironic_baremetal_network_cidr:
+    type: string
+    default: '10.13.0.0/24'
+  ironic_baremetal_network_ipam_pool_start:
+    type: string
+    default: '10.13.0.2'
+  ironic_baremetal_network_ipam_pool_end:
+    type: string
+    default: '10.13.0.99'
+  ironic_baremetal_network_pool_start:
+    type: string
+    default: '10.13.0.100'
+  ironic_baremetal_network_pool_end:
+    type: string
+    default: '10.13.0.200'
+  ironic_baremetal_network_gateway:
+    type: string
+    default: ''
+  ironic_baremetal_interface:
+    type: string
+    default: 'ens7'
   ucp_metadata:
     type: json
     default: {"role":"ucp"}
@@ -122,6 +147,9 @@
   ntw_metadata:
     type: json
     default: {}
+  vbmc_metadata:
+    type: json
+    default: {}
   ucp_flavor:
     type: string
     default: 'system.compact.openstack.proxy'
@@ -149,6 +177,9 @@
   ntws_flavor:
     type: string
     default: 'system.compact.openstack.control'
+  vbmcs_flavor:
+    type: string
+    default: 'system.compact.openstack.control'
   functions_override:
     type: string
     default: ''
@@ -202,6 +233,14 @@
       storage_frontend_network_cidr: { get_param: storage_frontend_network_cidr }
       storage_backend_network_cidr: { get_param: storage_backend_network_cidr }
 
+  ironic_baremetal_network:
+    type: MCP2::NetworkIronicFlat
+    properties:
+      ironic_baremetal_network_cidr: { get_param: ironic_baremetal_network_cidr }
+      ironic_baremetal_network_ipam_pool_start: { get_param: ironic_baremetal_network_ipam_pool_start }
+      ironic_baremetal_network_ipam_pool_end: { get_param: ironic_baremetal_network_ipam_pool_end }
+      ironic_baremetal_network_gateway: {get_param: ironic_baremetal_network_gateway}
+
   ucp:
     depends_on:
      - accessible_network
@@ -289,6 +328,9 @@
           storage_backend_network: { get_attr: [storage_network, storage_backend_network_id] }
           storage_backend_subnet_id: { get_attr: [storage_network, storage_backend_subnet_id] }
           storage_backend_network_cidr: { get_param: storage_backend_network_cidr }
+          ironic_baremetal_network: { get_attr: [ironic_baremetal_network, ironic_baremetal_network_id] }
+          ironic_baremetal_subnet_id: { get_attr: [ironic_baremetal_network, ironic_baremetal_subnet_id] }
+          ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
           hardware_metadata: { get_param: hardware_metadata}
 
   cmps:
@@ -325,6 +367,9 @@
           storage_backend_network: { get_attr: [storage_network, storage_backend_network_id] }
           storage_backend_subnet_id: { get_attr: [storage_network, storage_backend_subnet_id] }
           storage_backend_network_cidr: { get_param: storage_backend_network_cidr }
+          ironic_baremetal_network: { get_attr: [ironic_baremetal_network, ironic_baremetal_network_id] }
+          ironic_baremetal_subnet_id: { get_attr: [ironic_baremetal_network, ironic_baremetal_subnet_id] }
+          ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
           hardware_metadata: { get_param: hardware_metadata}
 
   gtws:
@@ -357,6 +402,9 @@
           storage_frontend_network: { get_attr: [storage_network, storage_frontend_network_id] }
           storage_frontend_subnet_id: { get_attr: [storage_network, storage_frontend_subnet_id] }
           storage_frontend_network_cidr: { get_param: storage_frontend_network_cidr }
+          ironic_baremetal_network: { get_attr: [ironic_baremetal_network, ironic_baremetal_network_id] }
+          ironic_baremetal_subnet_id: { get_attr: [ironic_baremetal_network, ironic_baremetal_subnet_id] }
+          ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
           hardware_metadata: { get_param: hardware_metadata}
 
   lmas:
@@ -461,6 +509,9 @@
           storage_backend_network: { get_attr: [storage_network, storage_backend_network_id] }
           storage_backend_subnet_id: { get_attr: [storage_network, storage_backend_subnet_id] }
           storage_backend_network_cidr: { get_param: storage_backend_network_cidr }
+          ironic_baremetal_network: { get_attr: [ironic_baremetal_network, ironic_baremetal_network_id] }
+          ironic_baremetal_subnet_id: { get_attr: [ironic_baremetal_network, ironic_baremetal_subnet_id] }
+          ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
           hardware_metadata: { get_param: hardware_metadata}
 
   ntws:
@@ -495,6 +546,34 @@
           storage_frontend_network_cidr: { get_param: storage_frontend_network_cidr }
           hardware_metadata: { get_param: hardware_metadata}
 
+  vbmcs:
+    type: OS::Heat::ResourceGroup
+    depends_on:
+     - ucp
+    properties:
+      count: { get_param: vbmc_size }
+      resource_def:
+        type: MCP2::SrvInstances
+        properties:
+          metadata: { get_param: vbmc_metadata}
+          node_type: "worker"
+          key_name: { get_param: "OS::stack_name" }
+          image: { get_param: image }
+          flavor: { get_param: vbmcs_flavor }
+          docker_ee_url: { get_param: docker_ee_url }
+          docker_ee_release: { get_param: docker_ee_release }
+          accessible_network: { get_attr: [accessible_network, public_network] }
+          private_floating_network: { get_attr: [private_floating_network, private_floating_network_id] }
+          private_floating_subnet_id: { get_attr: [private_floating_network, private_floating_subnet_id] }
+          private_floating_interface: { get_param: private_floating_interface }
+          private_floating_network_cidr: { get_param: private_floating_network_cidr }
+          accessible_subnet_id: { get_attr: [accessible_network, accessible_subnet_id]}
+          public_net_id: { get_param: public_net_id }
+          control_network_cidr: { get_param: control_network_cidr }
+          ucp_master_host: { get_attr: [ucp, server_private_ip] }
+          functions_override: { get_param: functions_override }
+          hardware_metadata: { get_param: hardware_metadata}
+
 outputs:
   ucp_ips:
     description: Private IP addresses of the deployed ucp instances
@@ -523,6 +602,9 @@
   ntws_ips:
     description: Private IP addresses of the deployed contrail instances
     value: { get_attr: [ntws, server_public_ip] }
+  vbmcs_ips:
+    description: Private IP addresses of the deployed virtualbmcs instances
+    value: { get_attr: [vbmcs, server_public_ip] }
   worker_private_floating_ips:
     description: IPs might be used as gateway
     value: { get_attr: [workers, server_private_floating_ip] }
@@ -536,6 +618,10 @@
     value: { get_param: private_floating_network_gateway }
   private_floating_network_interface:
     value: { get_param: private_floating_network_interface }
+  ironic_baremetal_network_pool_start:
+    value: { get_param: ironic_baremetal_network_pool_start }
+  ironic_baremetal_network_pool_end:
+    value: { get_param: ironic_baremetal_network_pool_end }
   tunnel_interface:
     value: { get_param: tunnel_interface }
   live_migration_interface: