Add ability to pass hardware metadata

Related-Prod: PRODX-00000
Change-Id: I4c377558ffe13e28f8ac5ced45262ff67556f46c
diff --git a/de/heat-templates/fragments/SrvInstancesBM.yaml b/de/heat-templates/fragments/SrvInstancesBM.yaml
index 46f8e68..cf247db 100644
--- a/de/heat-templates/fragments/SrvInstancesBM.yaml
+++ b/de/heat-templates/fragments/SrvInstancesBM.yaml
@@ -46,6 +46,10 @@
     type: string
   docker_ee_url:
     type: string
+  hardware_metadata:
+    description: The content of lab metadata.
+    default: ''
+    type: string
 
 resources:
 
@@ -70,6 +74,27 @@
             $private_floating_interface_ip: { get_attr: [private_floating_server_port, fixed_ips, 0, ip_address] }
             $functions_override: { get_param: functions_override }
 
+  inject_files:
+    type: "OS::Heat::CloudConfig"
+    properties:
+      cloud_config:
+        write_files:
+          - path: /usr/sbin/prepare-metadata.py
+            owner: "root:root"
+            permissions: "0755"
+            content: {get_file: ../scripts/prepare-metadata.py}
+          - path: /usr/share/metadata/lab-metadata.yaml
+            owner: "root:root"
+            permissions: "0644"
+            content: { get_param: hardware_metadata}
+
+  install_config_agent:
+    type: "OS::Heat::MultipartMime"
+    properties:
+      parts:
+      - config: {get_resource: software_config}
+      - config: {get_resource: inject_files}
+
   server:
     type: OS::Nova::Server
     properties:
@@ -81,8 +106,8 @@
         - 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.
-      user_data_format: RAW
-      user_data: { get_resource: software_config }
+      user_data_format: SOFTWARE_CONFIG
+      user_data: { get_resource:  install_config_agent}
       metadata: { get_param: metadata }
 
   private_floating_server_port:
@@ -112,3 +137,6 @@
   server_public_ip:
     description: Floating IP address of server in public network
     value: { get_attr: [server, networks, { get_param: accessible_network}, 0]}
+  wc_data:
+    description: Metadata from instance
+    value: { get_attr: [wait_condition, data]}