Merge "Add new template"
diff --git a/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp0-gtw0.yaml b/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp0-gtw0.yaml
index 5870228..3a48966 100644
--- a/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp0-gtw0.yaml
+++ b/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp0-gtw0.yaml
@@ -1,6 +1,7 @@
 resource_registry:
   "MCP2::NetworkAcc": ../fragments/NetworkAccBM.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesBM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesBMCeph.yaml
diff --git a/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp2-gtw0.yaml b/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp2-gtw0.yaml
index 662f8e0..3b801a5 100644
--- a/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp2-gtw0.yaml
+++ b/de/heat-templates/env/bmt402-mstr1-wrkr3-cmp2-gtw0.yaml
@@ -1,6 +1,7 @@
 resource_registry:
   "MCP2::NetworkAcc": ../fragments/NetworkAccBM.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesBM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesBMCeph.yaml
diff --git a/de/heat-templates/env/bmt410-mstr3-wrkr3-cmp0-gtw0-osd3.yaml b/de/heat-templates/env/bmt410-mstr3-wrkr3-cmp0-gtw0-osd3.yaml
index f8901ce..bad2f31 100644
--- a/de/heat-templates/env/bmt410-mstr3-wrkr3-cmp0-gtw0-osd3.yaml
+++ b/de/heat-templates/env/bmt410-mstr3-wrkr3-cmp0-gtw0-osd3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccBM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesBM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesBMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesBMCephOSD.yaml
diff --git a/de/heat-templates/env/compute.yaml b/de/heat-templates/env/compute.yaml
index 27d746c..1e1e6f6 100644
--- a/de/heat-templates/env/compute.yaml
+++ b/de/heat-templates/env/compute.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/converged.yaml b/de/heat-templates/env/converged.yaml
index 22dcc3e..f2e1d84 100644
--- a/de/heat-templates/env/converged.yaml
+++ b/de/heat-templates/env/converged.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0-lma3.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0-lma3.yaml
index 6ed7eef..ca4d469 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0-lma3.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0-lma3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0.yaml
index eea6f9a..cbba63f 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp0-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-lma3.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-lma3.yaml
index ec642a5..2882d01 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-lma3.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-lma3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-vbmc2.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-vbmc2.yaml
new file mode 100644
index 0000000..7f13bd8
--- /dev/null
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0-vbmc2.yaml
@@ -0,0 +1,52 @@
+resource_registry:
+  "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
+  "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
+  "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
+  "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
+  "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
+  "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
+
+parameters:
+  image: bionic-server-cloudimg-amd64-20190612
+  public_net_id: public
+  masters_size: 0
+  worker_size: 3
+  cmp_size: 2
+  gtw_size: 0
+  lma_size: 0
+  osd_size: 0
+  vbmc_size: 2
+  ucp_boot_timeout: 3600
+  cluster_public_key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp0evjOaK8c8SKYK4r2+0BN7g+8YSvQ2n8nFgOURCyvkJqOHi1qPGZmuN0CclYVdVuZiXbWw3VxRbSW3EH736VzgY1U0JmoTiSamzLHaWsXvEIW8VCi7boli539QJP0ikJiBaNAgZILyCrVPN+A6mfqtacs1KXdZ0zlMq1BPtFciR1JTCRcVs5vP2Wwz5QtY2jMIh3aiwkePjMTQPcfmh1TkOlxYu5IbQyZ3G1ahA0mNKI9a0dtF282av/F6pwB/N1R1nEZ/9VtcN2I1mf1NW/tTHEEcTzXYo1R/8K9vlqAN8QvvGLZtZduGviNVNoNWvoxaXxDt8CPv2B2NCdQFZp
+  private_floating_network_cidr: '10.11.12.0/24'
+  private_floating_interface: 'ens4'
+  worker_metadata: {"labels": {"openstack-control-plane":"enabled","openvswitch":"enabled","openstack-gateway": "enabled","role":"ceph-osd-node","local-volume-provisioner": "enabled"}}
+  cmp_metadata: {"labels": {"openstack-compute-node":"enabled","openvswitch":"enabled", "role":"ceph-osd-node"}}
+  gtw_metadata: {"labels": {"openvswitch":"enabled"}}
+  vbmc_metadata: {"labels": {"virtualbmc":"enabled"}}
+  # hardware_metadata which is used for Ceph requires flavor with
+  # ephemeral storage because it is used for Ceph bluestore.
+  workers_flavor: 'system.compact.openstack.control.ephemeral'
+  cmps_flavor: 'system.compact.openstack.control.ephemeral'
+  vbmcs_flavor: 'system.compact.openstack.control'
+  storage_frontend_network_cidr: '10.12.1.0/24'
+  storage_backend_network_cidr: '10.12.0.0/24'
+  hardware_metadata: |
+    '00:00:00:00:00:00':
+      write_files:
+        - path: /usr/share/metadata/ceph.yaml
+          content: |
+            storageDevices:
+              - name: vdb
+                role: hdd
+                sizeGb: 20
+            ramGb: 8
+            cores: 2
+            # The roles will be assigned based on node labels.
+            # roles:
+            #   - mon
+            #   - mgr
+            ips:
+              - 192.168.122.101
+            crushPath: {}
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0.yaml
index b156406..fe54eef 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp2-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3-lma3.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3-lma3.yaml
index 908fd16..f309a7e 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3-lma3.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3-lma3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFlVSRX.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3.yaml
index 6546c9e..44f7cd7 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp2-ntw3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFlVSRX.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp3-gtw0.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp3-gtw0.yaml
index 5cd5461..c61b80e 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp3-gtw0.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp3-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr3-cmp3-ntw3.yaml b/de/heat-templates/env/mstr1-wrkr3-cmp3-ntw3.yaml
index 0e6200e..d46cee8 100644
--- a/de/heat-templates/env/mstr1-wrkr3-cmp3-ntw3.yaml
+++ b/de/heat-templates/env/mstr1-wrkr3-cmp3-ntw3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFlVSRX.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr5-cmp0-gtw0.yaml b/de/heat-templates/env/mstr1-wrkr5-cmp0-gtw0.yaml
index 505f03b..3508a7b 100644
--- a/de/heat-templates/env/mstr1-wrkr5-cmp0-gtw0.yaml
+++ b/de/heat-templates/env/mstr1-wrkr5-cmp0-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr5-cmp2-gtw0.yaml b/de/heat-templates/env/mstr1-wrkr5-cmp2-gtw0.yaml
index 475c6ba..2ef1c9e 100644
--- a/de/heat-templates/env/mstr1-wrkr5-cmp2-gtw0.yaml
+++ b/de/heat-templates/env/mstr1-wrkr5-cmp2-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr1-wrkr5-cmp3-gtw0.yaml b/de/heat-templates/env/mstr1-wrkr5-cmp3-gtw0.yaml
index 320249e..1f3c7c9 100644
--- a/de/heat-templates/env/mstr1-wrkr5-cmp3-gtw0.yaml
+++ b/de/heat-templates/env/mstr1-wrkr5-cmp3-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0-lma3.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0-lma3.yaml
index 4ab970f..56be0a0 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0-lma3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0-lma3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0.yaml
index fa6bbd1..719cb12 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp0-gtw0.yaml
@@ -1,6 +1,7 @@
 resource_registry:
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
 
 parameters:
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3-osd3.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3-osd3.yaml
index 95eb9fe..bcb0c0d 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3-osd3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3-osd3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3.yaml
index 487ed47..8fa0f9e 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0-lma3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0.yaml
index 8e49e50..d799e5d 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw0.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw2.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw2.yaml
index 194b9bf..c0cc0b5 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw2.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw2.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3-osd3.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3-osd3.yaml
index 200342a..13a7e6f 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3-osd3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3-osd3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3.yaml
index 4007c36..b608764 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-gtw3-lma3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr3-cmp2-ntw3-lma3-osd3.yaml b/de/heat-templates/env/mstr3-wrkr3-cmp2-ntw3-lma3-osd3.yaml
index fd2a5b9..ddac835 100644
--- a/de/heat-templates/env/mstr3-wrkr3-cmp2-ntw3-lma3-osd3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr3-cmp2-ntw3-lma3-osd3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFlVSRX.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/mstr3-wrkr6-cmp3-osd3.yaml b/de/heat-templates/env/mstr3-wrkr6-cmp3-osd3.yaml
index 076c490..0a40fa7 100644
--- a/de/heat-templates/env/mstr3-wrkr6-cmp3-osd3.yaml
+++ b/de/heat-templates/env/mstr3-wrkr6-cmp3-osd3.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/env/telco.yaml b/de/heat-templates/env/telco.yaml
index f333e22..51042fb 100644
--- a/de/heat-templates/env/telco.yaml
+++ b/de/heat-templates/env/telco.yaml
@@ -2,6 +2,7 @@
   "MCP2::NetworkAcc": ../fragments/NetworkAccVM.yaml
   "MCP2::NetworkAccStorage": ../fragments/NetworkAccVMStorage.yaml
   "MCP2::NetworkPrvFl": ../fragments/NetworkPrvFl.yaml
+  "MCP2::NetworkIronicFlat": ../fragments/NetworkIronicFlat.yaml
   "MCP2::SrvInstances": ../fragments/SrvInstancesVM.yaml
   "MCP2::SrvInstancesCeph": ../fragments/SrvInstancesVMCeph.yaml
   "MCP2::SrvInstancesCephOSD": ../fragments/SrvInstancesVMCephOSD.yaml
diff --git a/de/heat-templates/fragments/NetworkIronicFlat.yaml b/de/heat-templates/fragments/NetworkIronicFlat.yaml
new file mode 100644
index 0000000..e0da093
--- /dev/null
+++ b/de/heat-templates/fragments/NetworkIronicFlat.yaml
@@ -0,0 +1,33 @@
+heat_template_version: queens
+
+parameters:
+  ironic_baremetal_network_cidr:
+    type: string
+  ironic_baremetal_network_ipam_pool_start:
+    type: string
+  ironic_baremetal_network_ipam_pool_end:
+    type: string
+  ironic_baremetal_network_gateway:
+    type: string
+    default: ''
+
+resources:
+
+  network:
+    type: OS::Neutron::Net
+  subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network: { get_resource: network }
+      enable_dhcp: false
+      cidr: { get_param: ironic_baremetal_network_cidr }
+      gateway_ip: ~
+      allocation_pools:
+        - start: { get_param: ironic_baremetal_network_ipam_pool_start }
+          end: { get_param: ironic_baremetal_network_ipam_pool_end }
+
+outputs:
+  ironic_baremetal_network_id:
+    value: { get_resource: network }
+  ironic_baremetal_subnet_id:
+    value: { get_resource: subnet }
diff --git a/de/heat-templates/fragments/SrvInstancesBM.yaml b/de/heat-templates/fragments/SrvInstancesBM.yaml
index cdf0647..b2fe4ad 100644
--- a/de/heat-templates/fragments/SrvInstancesBM.yaml
+++ b/de/heat-templates/fragments/SrvInstancesBM.yaml
@@ -30,6 +30,12 @@
     type: string
   control_network_cidr:
     type: string
+  ironic_baremetal_network:
+    type: string
+  ironic_baremetal_subnet_id:
+    type: string
+  ironic_baremetal_interface:
+    type: string
   functions_override:
     type: string
   boot_timeout:
@@ -72,6 +78,8 @@
             $private_floating_interface: { get_param: private_floating_interface }
             $private_floating_network_cidr: { get_param: private_floating_network_cidr }
             $private_floating_interface_ip: { get_attr: [private_floating_server_port, fixed_ips, 0, ip_address] }
+            $ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
+            $ironic_baremetal_interface_ip: { get_attr: [ironic_baremetal_server_port, fixed_ips, 0, ip_address] }
             $functions_override: { get_param: functions_override }
 
   inject_files:
@@ -106,6 +114,7 @@
         - network: { get_param: accessible_network }
         # NOTE(ohryhorov): connect to accessible network only as ironic doesn't
         # support multitenancy use-case. Use private_floating_network for IPAM only.
+        # NOTE(vsaienko): ditto about ironic network
       user_data_format: SOFTWARE_CONFIG
       user_data: { get_resource:  install_config_agent}
       metadata: { get_param: metadata }
@@ -118,6 +127,14 @@
       fixed_ips:
         - subnet: { get_param: private_floating_subnet_id }
 
+  ironic_baremetal_server_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: ironic_baremetal_network }
+      port_security_enabled: false
+      fixed_ips:
+        - subnet: { get_param: ironic_baremetal_subnet_id }
+
   wait_handle:
     type: OS::Heat::WaitConditionHandle
   wait_condition:
diff --git a/de/heat-templates/fragments/SrvInstancesBMCeph.yaml b/de/heat-templates/fragments/SrvInstancesBMCeph.yaml
index 2f2ae4a..c097bdf 100644
--- a/de/heat-templates/fragments/SrvInstancesBMCeph.yaml
+++ b/de/heat-templates/fragments/SrvInstancesBMCeph.yaml
@@ -38,6 +38,12 @@
     type: string
   control_network_cidr:
     type: string
+  ironic_baremetal_network:
+    type: string
+  ironic_baremetal_subnet_id:
+    type: string
+  ironic_baremetal_interface:
+    type: string
   functions_override:
     type: string
   boot_timeout:
@@ -83,6 +89,8 @@
             $storage_frontend_interface: { get_param: storage_frontend_interface }
             $storage_frontend_network_interface_ip: { get_attr: [storage_frontend_server_port, fixed_ips, 0, ip_address] }
             $storage_frontend_network_cidr: { get_param: storage_frontend_network_cidr }
+            $ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
+            $ironic_baremetal_interface_ip: { get_attr: [ironic_baremetal_server_port, fixed_ips, 0, ip_address] }
 
   inject_files:
     type: "OS::Heat::CloudConfig"
@@ -116,6 +124,7 @@
         - network: { get_param: accessible_network }
         # NOTE(ohryhorov): connect to accessible network only as ironic doesn't
         # support multitenancy use-case. Use private_floating_network for IPAM only.
+        # NOTE(vsaienko): ditto about ironic baremetal network
       user_data_format: SOFTWARE_CONFIG
       user_data: { get_resource:  install_config_agent}
       metadata: { get_param: metadata }
@@ -136,6 +145,14 @@
       fixed_ips:
         - subnet: { get_param: storage_frontend_subnet_id }
 
+  ironic_baremetal_server_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: ironic_baremetal_network }
+      port_security_enabled: false
+      fixed_ips:
+        - subnet: { get_param: ironic_baremetal_subnet_id }
+
   wait_handle:
     type: OS::Heat::WaitConditionHandle
   wait_condition:
diff --git a/de/heat-templates/fragments/SrvInstancesBMCephOSD.yaml b/de/heat-templates/fragments/SrvInstancesBMCephOSD.yaml
index 8804562..f034022 100644
--- a/de/heat-templates/fragments/SrvInstancesBMCephOSD.yaml
+++ b/de/heat-templates/fragments/SrvInstancesBMCephOSD.yaml
@@ -46,6 +46,12 @@
     type: string
   control_network_cidr:
     type: string
+  ironic_baremetal_network:
+    type: string
+  ironic_baremetal_subnet_id:
+    type: string
+  ironic_baremetal_interface:
+    type: string
   functions_override:
     type: string
   boot_timeout:
@@ -94,6 +100,8 @@
             $storage_backend_interface: { get_param: storage_backend_interface }
             $storage_backend_network_interface_ip: { get_attr: [storage_backend_server_port, fixed_ips, 0, ip_address] }
             $storage_backend_network_cidr: { get_param: storage_backend_network_cidr }
+            $ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
+            $ironic_baremetal_interface_ip: { get_attr: [ironic_baremetal_server_port, fixed_ips, 0, ip_address] }
 
   inject_files:
     type: "OS::Heat::CloudConfig"
@@ -127,6 +135,7 @@
         - network: { get_param: accessible_network }
         # NOTE(ohryhorov): connect to accessible network only as ironic doesn't
         # support multitenancy use-case. Use private_floating_network for IPAM only.
+        # NOTE(vsaienko): ditto about ironic network
       user_data_format: SOFTWARE_CONFIG
       user_data: { get_resource:  install_config_agent}
       metadata: { get_param: metadata }
@@ -155,6 +164,14 @@
       fixed_ips:
         - subnet: { get_param: storage_frontend_subnet_id }
 
+  ironic_baremetal_server_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: ironic_baremetal_network }
+      port_security_enabled: false
+      fixed_ips:
+        - subnet: { get_param: ironic_baremetal_subnet_id }
+
   wait_handle:
     type: OS::Heat::WaitConditionHandle
   wait_condition:
diff --git a/de/heat-templates/fragments/SrvInstancesVMCeph.yaml b/de/heat-templates/fragments/SrvInstancesVMCeph.yaml
index dce451e..11538ca 100644
--- a/de/heat-templates/fragments/SrvInstancesVMCeph.yaml
+++ b/de/heat-templates/fragments/SrvInstancesVMCeph.yaml
@@ -36,6 +36,12 @@
     type: string
   storage_frontend_interface:
     type: string
+  ironic_baremetal_network:
+    type: string
+  ironic_baremetal_subnet_id:
+    type: string
+  ironic_baremetal_interface:
+    type: string
   control_network_cidr:
     type: string
   functions_override:
@@ -91,6 +97,8 @@
             $storage_frontend_interface: { get_param: storage_frontend_interface }
             $storage_frontend_network_interface_ip: { get_attr: [storage_frontend_server_port, fixed_ips, 0, ip_address] }
             $storage_frontend_network_cidr: { get_param: storage_frontend_network_cidr }
+            $ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
+            $ironic_baremetal_interface_ip: { get_attr: [ironic_baremetal_server_port, fixed_ips, 0, ip_address] }
 
   inject_files:
     type: "OS::Heat::CloudConfig"
@@ -125,6 +133,7 @@
         - port: { get_resource: accessible_server_port }
         - port: { get_resource: private_floating_server_port }
         - port: { get_resource: storage_frontend_server_port }
+        - port: { get_resource: ironic_baremetal_server_port }
       user_data_format: SOFTWARE_CONFIG
       user_data: { get_resource:  install_config_agent}
       metadata: { get_param: metadata }
@@ -159,6 +168,14 @@
       floating_network_id: { get_param: public_net_id }
       port_id: { get_resource: accessible_server_port }
 
+  ironic_baremetal_server_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: ironic_baremetal_network }
+      port_security_enabled: false
+      fixed_ips:
+        - subnet: { get_param: ironic_baremetal_subnet_id }
+
   wait_handle:
     type: OS::Heat::WaitConditionHandle
   wait_condition:
diff --git a/de/heat-templates/fragments/SrvInstancesVMCephOSD.yaml b/de/heat-templates/fragments/SrvInstancesVMCephOSD.yaml
index f78a198..446c75b 100644
--- a/de/heat-templates/fragments/SrvInstancesVMCephOSD.yaml
+++ b/de/heat-templates/fragments/SrvInstancesVMCephOSD.yaml
@@ -46,6 +46,12 @@
     type: string
   control_network_cidr:
     type: string
+  ironic_baremetal_network:
+    type: string
+  ironic_baremetal_subnet_id:
+    type: string
+  ironic_baremetal_interface:
+    type: string
   functions_override:
     type: string
   boot_timeout:
@@ -102,6 +108,8 @@
             $storage_backend_interface: { get_param: storage_backend_interface }
             $storage_backend_network_interface_ip: { get_attr: [storage_backend_server_port, fixed_ips, 0, ip_address] }
             $storage_backend_network_cidr: { get_param: storage_backend_network_cidr }
+            $ironic_baremetal_interface: { get_param: ironic_baremetal_interface }
+            $ironic_baremetal_interface_ip: { get_attr: [ironic_baremetal_server_port, fixed_ips, 0, ip_address] }
 
   inject_files:
     type: "OS::Heat::CloudConfig"
@@ -137,6 +145,7 @@
         - port: { get_resource: private_floating_server_port }
         - port: { get_resource: storage_frontend_server_port }
         - port: { get_resource: storage_backend_server_port }
+        - port: { get_resource: ironic_baremetal_server_port }
       user_data_format: SOFTWARE_CONFIG
       user_data: { get_resource:  install_config_agent}
       metadata: { get_param: metadata }
@@ -179,6 +188,14 @@
       floating_network_id: { get_param: public_net_id }
       port_id: { get_resource: accessible_server_port }
 
+  ironic_baremetal_server_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_param: ironic_baremetal_network }
+      port_security_enabled: false
+      fixed_ips:
+        - subnet: { get_param: ironic_baremetal_subnet_id }
+
   wait_handle:
     type: OS::Heat::WaitConditionHandle
   wait_condition:
diff --git a/de/heat-templates/scripts/instance_boot.sh b/de/heat-templates/scripts/instance_boot.sh
index 8bdc906..50058f9 100644
--- a/de/heat-templates/scripts/instance_boot.sh
+++ b/de/heat-templates/scripts/instance_boot.sh
@@ -19,6 +19,8 @@
 STORAGE_FRONTEND_INTERFACE_IP=$storage_frontend_network_interface_ip
 STORAGE_FRONTEND_NETWORK=$storage_frontend_network_cidr
 STORAGE_FRONTEND_NETWORK_NETMASK=$(echo ${STORAGE_FRONTEND_NETWORK} | cut -d'/' -f2)
+IRONIC_BAREMETAL_INTERFACE=$ironic_baremetal_interface
+IRONIC_BAREMETAL_INTERFACE_IP=$ironic_baremetal_interface_ip
 NODE_TYPE=$node_type
 UCP_MASTER_HOST=$ucp_master_host
 NODE_METADATA='$node_metadata'
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: