Add ability to create QOS policy with het template

Related-PRODX: PRODX-13966

Change-Id: Ieff299130164a268c62d097ed077aebd200d7546
diff --git a/de/heat-templates/multirack.yaml b/de/heat-templates/multirack.yaml
index 8e37448..abcae03 100644
--- a/de/heat-templates/multirack.yaml
+++ b/de/heat-templates/multirack.yaml
@@ -163,6 +163,28 @@
   rack_functions_override:
     type: string
     default: ''
+  lmas_size:
+    type: number
+  lmas_metadata:
+    type: json
+  lmas_flavor:
+    type: string
+  default_interface:
+    type: string
+    default: ''
+  qos_max_burst_kbps_ingress:
+    type: number
+    default: 0
+  qos_max_kbps_ingress:
+    type: number
+    default: 0
+  qos_max_burst_kbps_egress:
+    type: number
+    default: 0
+  qos_max_kbps_egress:
+    type: number
+    default: 0
+
 
 resources:
   keypair_name:
@@ -178,6 +200,42 @@
       public_key: { get_param: cluster_public_key }
       save_private_key: false
 
+  qos_policy_gen_name:
+    type: OS::Heat::RandomString
+    properties:
+      character_classes: [{"class": "hexdigits", "min": 1}]
+      length: 8
+      salt: constant
+
+  rack_qos_policy:
+    type: OS::Neutron::QoSPolicy
+    properties:
+      description: String
+      name:
+        list_join:
+        - '-'
+        - [ { get_param: "OS::stack_name" }, { get_attr: [qos_policy_gen_name, value] } ]
+      shared: True
+
+  rack_bandwith_rule_egress:
+    type: OS::Neutron::QoSBandwidthLimitRule
+    properties:
+      max_burst_kbps: { get_param: qos_max_burst_kbps_egress }
+      max_kbps: { get_param: qos_max_kbps_egress }
+      policy: { get_resource: rack_qos_policy }
+# NOTE (ohryhorov): section below with "direction" should be uncommented once cloud is
+# upgraded to OpenStack Train version.
+#
+#      direction: 'egress'
+#
+#  rack_bandwith_rule_ingress:
+#    type: OS::Neutron::QoSBandwidthLimitRule
+#    properties:
+#      max_burst_kbps: { get_param: qos_max_burst_kbps_ingress }
+#      max_kbps: { get_param: qos_max_kbps_ingress }
+#      policy: { get_resource: rack_qos_policy }
+#      direction: 'ingress'
+
   central_site:
     type: MCP2::CentralSite
     properties:
@@ -206,6 +264,11 @@
       worker_hardware_metadata: { get_param: main_worker_hardware_metadata }
       dns_nameservers: { get_param: dns_nameservers }
       boot_timeout: { get_param: central_boot_timeout }
+      lmas_size: { get_param: lmas_size }
+      lmas_metadata: { get_param: lmas_metadata }
+      lmas_flavor: { get_param: lmas_flavor }
+      lmas_hardware_metadata: { get_param: main_worker_hardware_metadata }
+      default_interface: { get_param: default_interface }
 
   rack01_router_routes:
     type: MCP2::RackRouterRoutes
@@ -237,6 +300,7 @@
       boot_timeout: { get_param: rack_boot_timeout }
       private_floating_interface: { get_param: rack_private_floating_interface }
       functions_override: { get_param: rack_functions_override }
+      qos_policy_name: { get_resource: rack_qos_policy }
 
   rack02_router_routes:
     depends_on:
@@ -270,6 +334,7 @@
       boot_timeout: { get_param: rack_boot_timeout }
       private_floating_interface: { get_param: rack_private_floating_interface }
       functions_override: { get_param: rack_functions_override }
+      qos_policy_name: { get_resource: rack_qos_policy }
 
 outputs:
   central_site_worker_public_ip: