Add multirack context

Related-Prod: PRODX-3456
Change-Id: If9a79e0727407a759b42bbdcc74d597226cae3bb
diff --git a/de/heat-templates/multirack.yaml b/de/heat-templates/multirack.yaml
new file mode 100644
index 0000000..6886747
--- /dev/null
+++ b/de/heat-templates/multirack.yaml
@@ -0,0 +1,218 @@
+heat_template_version: queens
+
+parameters:
+  image:
+    type: string
+    description: Name of image to use for servers
+  public_net_id:
+    type: string
+    default: ''
+    description: >
+      ID of public network for which floating IP addresses will be allocated/
+      for baremetal case flat provision network for nodes
+  lab_network_cidr:
+    type: string
+    default: '10.0.0.0/8'
+  main_network_cidr:
+    type: string
+    default: '10.0.0.0/16'
+  main_control_network_cidr:
+    type: string
+    description: The CIDR of control network, used to detect control interface.
+    default: '10.0.1.0/24'
+  main_tunnel_network_cidr:
+    type: string
+    default: '10.0.2.0/24'
+  main_storage_frontend_network_cidr:
+    type: string
+    default: '10.0.3.0/24'
+  main_storage_backend_network_cidr:
+    type: string
+    default: '10.0.4.0/24'
+  main_private_floating_network_cidr:
+    type: string
+    default: '10.0.5.0/24'
+  main_private_floating_network_interface:
+    type: string
+    default: 'ens4'
+  rack01_network_cidr:
+    type: string
+    default: '10.1.0.0/16'
+  rack01_control_network_cidr:
+    type: string
+    description: The CIDR of control network, used to detect control interface.
+    default: '10.1.1.0/24'
+  rack01_central_router_uplink_network_cidr:
+    type: string
+    default: '192.168.0.0/28'
+  rack02_network_cidr:
+    type: string
+    default: '10.2.0.0/16'
+  rack02_control_network_cidr:
+    type: string
+    description: The CIDR of control network, used to detect control interface.
+    default: '10.2.1.0/24'
+  rack02_central_router_uplink_network_cidr:
+    type: string
+    default: '192.168.0.16/28'
+  main_worker_size:
+    type: number
+    description: Number of workers to deploy
+    default: 3
+  rack01_cmp_size:
+    type: number
+    description: Number of cmp workers to deploy
+    default: 0
+  rack02_cmp_size:
+    type: number
+    description: Number of cmp workers to deploy
+    default: 0
+  cluster_public_key:
+    type: string
+  ucp_metadata:
+    type: json
+    default: {"role":"ucp"}
+  main_worker_metadata:
+    type: json
+    default: {}
+  rack01_cmp_metadata:
+    type: json
+    default: {}
+  rack02_cmp_metadata:
+    type: json
+    default: {}
+  ucp_flavor:
+    type: string
+    default: 'kaas-bm.worker'
+  main_worker_flavor:
+    type: string
+    default: 'system.compact.openstack.control'
+  rack01_cmp_flavor:
+    type: string
+    default: 'system.compact.openstack.control'
+  rack02_cmp_flavor:
+    type: string
+    default: 'system.compact.openstack.control'
+  docker_ee_url:
+    type: string
+    default: 'http://mirror-us.mcp.mirantis.net/.snapshots/docker-ee-bionic-latest'
+#    default: 'https://s3-us-west-2.amazonaws.com/internal-docker-ee-builds/docker-ee-linux/ubuntu'
+  docker_ee_release:
+    type: string
+    default: 'stable-19.03'
+  docker_ucp_image:
+    type: string
+    default: 'docker/ucp:3.2.4'
+  tunnel_interface:
+    type: string
+    default: ''
+  main_worker_hardware_metadata:
+    type: string
+    default: ''
+
+resources:
+  keypair_name:
+    type: OS::Heat::RandomString
+    properties:
+      character_classes: [{"class": "hexdigits", "min": 1}]
+      length: 128
+      salt: constant
+  key_pair:
+    type: OS::Nova::KeyPair
+    properties:
+      name: { get_attr: [keypair_name, value] }
+      public_key: { get_param: cluster_public_key }
+      save_private_key: false
+
+  central_site:
+    type: MCP2::CentralSite
+    properties:
+      ucp_metadata: { get_param: ucp_metadata}
+      docker_ee_url: { get_param: docker_ee_url }
+      docker_ee_release: { get_param: docker_ee_release }
+      docker_ucp_image: { get_param: docker_ucp_image}
+      key_name: { get_attr: [keypair_name, value] }
+      image: { get_param: image }
+      ucp_flavor: { get_param: ucp_flavor }
+      public_net_id: { get_param: public_net_id }
+      control_network_cidr: { get_param: main_control_network_cidr }
+      tunnel_network_cidr: { get_param: main_tunnel_network_cidr }
+      storage_frontend_network_cidr: { get_param: main_storage_frontend_network_cidr }
+      storage_backend_network_cidr: { get_param: main_storage_backend_network_cidr }
+      private_floating_network_cidr: { get_param: main_private_floating_network_cidr }
+      private_floating_network_interface: { get_param: main_private_floating_network_interface }
+      worker_size: { get_param: main_worker_size }
+      worker_flavor: { get_param: main_worker_flavor }
+      worker_metadata: { get_param: main_worker_metadata }
+      worker_hardware_metadata: { get_param: main_worker_hardware_metadata }
+
+  rack01_router_routes:
+    type: MCP2::RackRouterRoutes
+    properties:
+      central_router: { get_attr: [central_site, router_id] }
+      central_router_uplink_network_cidr: { get_param: rack01_central_router_uplink_network_cidr }
+      site_cidr: { get_param: rack01_network_cidr }
+      lab_network_cidr: { get_param: lab_network_cidr }
+      public_net_id: { get_param: public_net_id }
+
+  rack01:
+    depends_on:
+    - central_site
+    type: MCP2::Rack
+    properties:
+      docker_ee_url: { get_param: docker_ee_url }
+      docker_ee_release: { get_param: docker_ee_release }
+      docker_ucp_image: { get_param: docker_ucp_image}
+      key_name: { get_attr: [keypair_name, value] }
+      image: { get_param: image }
+      public_net_id: { get_param: public_net_id }
+      control_network_cidr: { get_param: rack01_control_network_cidr }
+      cmp_size: { get_param: rack01_cmp_size }
+      cmp_flavor: { get_param: rack01_cmp_flavor }
+      cmp_metadata: { get_param: rack01_cmp_metadata }
+      ucp_master_host: { get_attr: [central_site, ucp_control_ip] }
+      rack_router: {get_attr: [rack01_router_routes, router_id] }
+
+  rack02_router_routes:
+    depends_on:
+    - rack01_router_routes
+    type: MCP2::RackRouterRoutes
+    properties:
+      central_router: { get_attr: [central_site, router_id] }
+      central_router_uplink_network_cidr: { get_param: rack02_central_router_uplink_network_cidr }
+      site_cidr: { get_param: rack02_network_cidr }
+      lab_network_cidr: { get_param: lab_network_cidr }
+      public_net_id: { get_param: public_net_id }
+
+  rack02:
+    depends_on:
+    - central_site
+    type: MCP2::Rack
+    properties:
+      docker_ee_url: { get_param: docker_ee_url }
+      docker_ee_release: { get_param: docker_ee_release }
+      docker_ucp_image: { get_param: docker_ucp_image}
+      key_name: { get_attr: [keypair_name, value] }
+      image: { get_param: image }
+      public_net_id: { get_param: public_net_id }
+      control_network_cidr: { get_param: rack02_control_network_cidr }
+      cmp_size: { get_param: rack02_cmp_size }
+      cmp_flavor: { get_param: rack02_cmp_flavor }
+      cmp_metadata: { get_param: rack02_cmp_metadata }
+      ucp_master_host: { get_attr: [central_site, ucp_control_ip] }
+      rack_router: {get_attr: [rack02_router_routes, router_id] }
+
+outputs:
+  central_site_worker_public_ip:
+    description: IP address of server in private network
+    value: { get_attr: [central_site, worker_public_ip] }
+  ucp_public_ip:
+    description: IP address of server in private network
+    value: { get_attr: [central_site, ucp_public_ip] }
+  central_site_worker_wc_data:
+    description: Metadata from instance
+    value: { get_attr: [central_site, worker_wc_data]}
+  rack01_cmp_public_ip:
+    value: { get_attr: [rack01, cmp_public_ip] }
+  rack02_cmp_public_ip:
+    value: { get_attr: [rack02, cmp_public_ip] }