Run tempest on tsrv node

Add new type of nodes to run tests like tempest

Related-Prod: https://mirantis.jira.com/browse/PRODX-21507
Change-Id: Ie313532e71446c74bcdb34041b023973adbd4054
diff --git a/de/heat-templates/top.yaml b/de/heat-templates/top.yaml
index 0b6f59a..68a725a 100644
--- a/de/heat-templates/top.yaml
+++ b/de/heat-templates/top.yaml
@@ -76,6 +76,10 @@
     type: number
     description: Number of nodes for virtualbmc BM node simulator
     default: 0
+  tsrv_size:
+    type: number
+    description: Number of nodes for test servers
+    default: 1
   ucp_boot_timeout:
     type: number
     description: Boot timeout for UCP instance
@@ -220,6 +224,9 @@
   vbmc_metadata:
     type: json
     default: {}
+  tsrv_metadata:
+    type: json
+    default: {"labels": {"tempest": "enabled"}}
   ucp_flavor:
     type: string
     default: 'kaas-bm.worker'
@@ -253,6 +260,9 @@
   vbmcs_flavor:
     type: string
     default: 'system.compact.openstack.control'
+  tsrvs_flavor:
+    type: string
+    default: 'mosk.s.testserver'
   functions_override:
     type: string
     default: ''
@@ -877,6 +887,46 @@
           ironic_mt_enabled: { get_param: ironic_mt_enabled }
           hardware_metadata: { get_param: hardware_metadata}
           availability_zone: { get_param: availability_zone }
+  tsrvs:
+    type: OS::Heat::ResourceGroup
+    depends_on:
+     - ucp
+    properties:
+      count: { get_param: tsrv_size }
+      resource_def:
+        type: MCP2::SrvInstancesCeph
+        properties:
+          metadata: { get_param: tsrv_metadata}
+          node_type: "worker"
+          kubernetes_installer: { get_param: kubernetes_installer }
+          key_name: { get_attr: [keypair_name, value] }
+          image: { get_param: image }
+          flavor: { get_param: tsrvs_flavor }
+          docker_ee_url: { get_param: docker_ee_url }
+          docker_ee_release: { get_param: docker_ee_release }
+          docker_ucp_image: { get_param: docker_ucp_image}
+          docker_default_address_pool: { get_param: docker_default_address_pool }
+          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 }
+          storage_frontend_interface: { get_param: storage_frontend_interface }
+          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_network_cidr: { get_param: ironic_baremetal_network_cidr }
+          ironic_baremetal_tunnel_cidr: { get_param: ironic_baremetal_tunnel_cidr }
+          ironic_mt_enabled: { get_param: ironic_mt_enabled }
+          hardware_metadata: { get_param: hardware_metadata}
+          availability_zone: { get_param: availability_zone }
 
 outputs:
   ucp_ips: