add unittest for basic heat api management and template creation functions 55/11755/5
authorMatthewLi <matthew.lijun@huawei.com>
Fri, 1 Apr 2016 07:05:14 +0000 (03:05 -0400)
committerMatthewLi <matthew.lijun@huawei.com>
Fri, 8 Apr 2016 09:16:20 +0000 (05:16 -0400)
JIRA: BOTTLENECK-58

Change-Id: Ie563f3f5e42f43bc9ac379b56bed23f33d96791d
Signed-off-by: MatthewLi <matthew.lijun@huawei.com>
utils/infra_setup/heat/tests/data/generated_templates/experiment_1.yaml [new file with mode: 0644]
utils/infra_setup/heat/tests/data/generated_templates/experiment_2.yaml [new file with mode: 0644]
utils/infra_setup/heat/tests/data/generated_templates/rubbos_1-1-1_template.tmp [new file with mode: 0755]
utils/infra_setup/heat/tests/data/test_templates/test_template_1.yaml [new file with mode: 0755]
utils/infra_setup/heat/tests/generate_template_test.py [new file with mode: 0755]

diff --git a/utils/infra_setup/heat/tests/data/generated_templates/experiment_1.yaml b/utils/infra_setup/heat/tests/data/generated_templates/experiment_1.yaml
new file mode 100644 (file)
index 0000000..5360044
--- /dev/null
@@ -0,0 +1,300 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template to create a new neutron network plus a router to the public
+  network, and for deploying nine servers into the new network. The template also
+  assigns floating IP addresses to rubbos_control server so it is routable from the
+  public network.
+parameters:
+  key_name:
+    type: string
+    description: Name of keypair to assign to servers
+    default: bottlenecks-key
+  image:
+    type: string
+    description: Name of image to use for servers
+    default: bottlenecks-trusty-server
+  flavor:
+    type: string
+    description: Flavor to use for servers
+    default: bottlenecks-flavor
+  public_net:
+    type: string
+    description: >
+      ID or name of public network for which floating IP addresses will be allocated
+    default: net04_ext
+  private_net_name:
+    type: string
+    description: Name of private network to be created
+    default: bottlenecks-private
+  private_net_cidr:
+    type: string
+    description: Private network address (CIDR notation)
+    default: "10.0.10.0/24"
+  private_net_gateway:
+    type: string
+    description: Private network gateway address
+    default: "10.0.10.1"
+  private_net_pool_start:
+    type: string
+    description: Start of private network IP address allocation pool
+    default: "10.0.10.2"
+  private_net_pool_end:
+    type: string
+    description: End of private network IP address allocation pool
+    default: "10.0.10.199"
+
+resources:
+  private_net:
+    type: OS::Neutron::Net
+    properties:
+      name: { get_param: private_net_name }
+
+  private_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: private_net }
+      cidr: { get_param: private_net_cidr }
+      gateway_ip: { get_param: private_net_gateway }
+      allocation_pools:
+        - start: { get_param: private_net_pool_start }
+          end: { get_param: private_net_pool_end }
+
+  router:
+    type: OS::Neutron::Router
+    properties:
+      external_gateway_info:
+        network: { get_param: public_net }
+
+  router_interface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router_id: { get_resource: router }
+      subnet_id: { get_resource: private_subnet }
+
+  rubbos_control:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_control
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_control_port }
+      admin_user: ubuntu
+
+  rubbos_control_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_control_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network: { get_param: public_net }
+      port_id: { get_resource: rubbos_control_port }
+
+  rubbos_httpd:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_httpd
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_httpd_port }
+      admin_user: ubuntu
+
+  rubbos_httpd_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_mysql1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_mysql1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_mysql1_port }
+      admin_user: ubuntu
+
+  rubbos_mysql1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_tomcat1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_tomcat1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_tomcat1_port }
+      admin_user: ubuntu
+
+  rubbos_tomcat1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client1_port }
+      admin_user: ubuntu
+
+  rubbos_client1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client2:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client2
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client2_port }
+      admin_user: ubuntu
+
+  rubbos_client2_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client3:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client3
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client3_port }
+      admin_user: ubuntu
+
+  rubbos_client3_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client4:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client4
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client4_port }
+      admin_user: ubuntu
+
+  rubbos_client4_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_benchmark:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_benchmark
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_benchmark_port }
+      admin_user: ubuntu
+
+  rubbos_benchmark_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  server_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Rubbos group for servers access.
+      name: rubbos-security-group
+      rules: [
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: tcp,
+        port_range_min: 1,
+        port_range_max: 65535},
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: udp,
+        port_range_min: 1,
+        port_range_max: 65535},
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: icmp}]
+
+outputs:
+  rubbos_control_private_ip:
+    description: IP address of rubbos_control in private network
+    value: { get_attr: [ rubbos_control, first_address ] }
+  rubbos_control_public_ip:
+    description: Floating IP address of rubbos_control in public network
+    value: { get_attr: [ rubbos_control_floating_ip, floating_ip_address ] }
+  rubbos_httpd_private_ip:
+    description: IP address of rubbos_httpd in private network
+    value: { get_attr: [ rubbos_httpd, first_address ] }
+  rubbos_mysql1_private_ip:
+    description: IP address of rubbos_mysql1 in private network
+    value: { get_attr: [ rubbos_mysql1, first_address ] }
+  rubbos_tomcat1_private_ip:
+    description: IP address of rubbos_tomcat1 in private network
+    value: { get_attr: [ rubbos_tomcat1, first_address ] }
+  rubbos_client1_private_ip:
+    description: IP address of rubbos_client1 in private network
+    value: { get_attr: [ rubbos_client1, first_address ] }
+  rubbos_client2_private_ip:
+    description: IP address of rubbos_client2 in private network
+    value: { get_attr: [ rubbos_client2, first_address ] }
+  rubbos_client3_private_ip:
+    description: IP address of rubbos_client3 in private network
+    value: { get_attr: [ rubbos_client3, first_address ] }
+  rubbos_client4_private_ip:
+    description: IP address of rubbos_client4 in private network
+    value: { get_attr: [ rubbos_client4, first_address ] }
+  rubbos_benchmark_private_ip:
+    description: IP address of rubbos_benchmark in private network
+    value: { get_attr: [ rubbos_benchmark, first_address ] }
+
diff --git a/utils/infra_setup/heat/tests/data/generated_templates/experiment_2.yaml b/utils/infra_setup/heat/tests/data/generated_templates/experiment_2.yaml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/utils/infra_setup/heat/tests/data/generated_templates/rubbos_1-1-1_template.tmp b/utils/infra_setup/heat/tests/data/generated_templates/rubbos_1-1-1_template.tmp
new file mode 100755 (executable)
index 0000000..0f417dd
--- /dev/null
@@ -0,0 +1,311 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template to create a new neutron network plus a router to the public
+  network, and for deploying nine servers into the new network. The template also
+  assigns floating IP addresses to rubbos_control server so it is routable from the
+  public network.
+parameters:
+  key_name:
+    type: string
+    description: Name of keypair to assign to servers
+    default: bottlenecks-key
+  image:
+    type: string
+    description: Name of image to use for servers
+    default: bottlenecks-trusty-server
+  flavor:
+    type: string
+    description: Flavor to use for servers
+    default: bottlenecks-flavor
+  public_net:
+    type: string
+    description: >
+      ID or name of public network for which floating IP addresses will be allocated
+    default: net04_ext
+  private_net_name:
+    type: string
+    description: Name of private network to be created
+    default: bottlenecks-private
+  private_net_cidr:
+    type: string
+    description: Private network address (CIDR notation)
+    default: "10.0.10.0/24"
+  private_net_gateway:
+    type: string
+    description: Private network gateway address
+    default: "10.0.10.1"
+  private_net_pool_start:
+    type: string
+    description: Start of private network IP address allocation pool
+    default: "10.0.10.2"
+  private_net_pool_end:
+    type: string
+    description: End of private network IP address allocation pool
+    default: "10.0.10.199"
+
+resources:
+  private_net:
+    type: OS::Neutron::Net
+    properties:
+      name: { get_param: private_net_name }
+
+  private_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: private_net }
+      cidr: { get_param: private_net_cidr }
+      gateway_ip: { get_param: private_net_gateway }
+      allocation_pools:
+        - start: { get_param: private_net_pool_start }
+          end: { get_param: private_net_pool_end }
+
+  router:
+    type: OS::Neutron::Router
+    properties:
+      external_gateway_info:
+        network: { get_param: public_net }
+
+  router_interface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router_id: { get_resource: router }
+      subnet_id: { get_resource: private_subnet }
+
+  rubbos_control:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_control
+      image: { get_param: image }
+      flavor: #flavor
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_control_port }
+      admin_user: ubuntu
+
+  rubbos_control_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_control_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network: { get_param: public_net }
+      port_id: { get_resource: rubbos_control_port }
+
+  rubbos_httpd:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_httpd
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_httpd_port }
+      admin_user: ubuntu
+
+  rubbos_httpd_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_mysql1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_mysql1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_mysql1_port }
+      admin_user: ubuntu
+
+  rubbos_mysql1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_tomcat1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_tomcat1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_tomcat1_port }
+      admin_user: ubuntu
+
+  rubbos_tomcat1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client1_port }
+      admin_user: ubuntu
+
+  rubbos_client1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client2:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client2
+      image: #image
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client2_port }
+      admin_user: ubuntu
+
+  rubbos_client2_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client3:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client3
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client3_port }
+      admin_user: ubuntu
+
+  rubbos_client3_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client4:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client4
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client4_port }
+      admin_user: ubuntu
+
+  rubbos_client4_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  #rubbos_client5:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client4
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client4_port }
+      admin_user: ubuntu
+
+  rubbos_benchmark:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_benchmark
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_benchmark_port }
+      admin_user: ubuntu
+
+  rubbos_benchmark_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  server_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Rubbos group for servers access.
+      name: rubbos-security-group
+      rules: [
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: tcp,
+        port_range_min: 1,
+        port_range_max: 65535},
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: udp,
+        port_range_min: 1,
+        port_range_max: 65535},
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: icmp}]
+
+outputs:
+  rubbos_control_private_ip:
+    description: IP address of rubbos_control in private network
+    value: { get_attr: [ rubbos_control, first_address ] }
+  rubbos_control_public_ip:
+    description: Floating IP address of rubbos_control in public network
+    value: { get_attr: [ rubbos_control_floating_ip, floating_ip_address ] }
+  rubbos_httpd_private_ip:
+    description: IP address of rubbos_httpd in private network
+    value: { get_attr: [ rubbos_httpd, first_address ] }
+  rubbos_mysql1_private_ip:
+    description: IP address of rubbos_mysql1 in private network
+    value: { get_attr: [ rubbos_mysql1, first_address ] }
+  rubbos_tomcat1_private_ip:
+    description: IP address of rubbos_tomcat1 in private network
+    value: { get_attr: [ rubbos_tomcat1, first_address ] }
+  rubbos_client1_private_ip:
+    description: IP address of rubbos_client1 in private network
+    value: { get_attr: [ rubbos_client1, first_address ] }
+  rubbos_client2_private_ip:
+    description: IP address of rubbos_client2 in private network
+    value: { get_attr: [ rubbos_client2, first_address ] }
+  rubbos_client3_private_ip:
+    description: IP address of rubbos_client3 in private network
+    value: { get_attr: [ rubbos_client3, first_address ] }
+  rubbos_client4_private_ip:
+    description: IP address of rubbos_client4 in private network
+    value: { get_attr: [ rubbos_client4, first_address ] }
+  rubbos_benchmark_private_ip:
+    description: IP address of rubbos_benchmark in private network
+    value: { get_attr: [ rubbos_benchmark, first_address ] }
+
diff --git a/utils/infra_setup/heat/tests/data/test_templates/test_template_1.yaml b/utils/infra_setup/heat/tests/data/test_templates/test_template_1.yaml
new file mode 100755 (executable)
index 0000000..ca347e0
--- /dev/null
@@ -0,0 +1,311 @@
+heat_template_version: 2013-05-23
+
+description: >
+  HOT template to create a new neutron network plus a router to the public
+  network, and for deploying nine servers into the new network. The template also
+  assigns floating IP addresses to rubbos_control server so it is routable from the
+  public network.
+parameters:
+  key_name:
+    type: string
+    description: Name of keypair to assign to servers
+    default: bottlenecks-key
+  image:
+    type: string
+    description: Name of image to use for servers
+    default: bottlenecks-trusty-server
+  flavor:
+    type: string
+    description: Flavor to use for servers
+    default: bottlenecks-flavor
+  public_net:
+    type: string
+    description: >
+      ID or name of public network for which floating IP addresses will be allocated
+    default: net04_ext
+  private_net_name:
+    type: string
+    description: Name of private network to be created
+    default: bottlenecks-private
+  private_net_cidr:
+    type: string
+    description: Private network address (CIDR notation)
+    default: "10.0.10.0/24"
+  private_net_gateway:
+    type: string
+    description: Private network gateway address
+    default: "10.0.10.1"
+  private_net_pool_start:
+    type: string
+    description: Start of private network IP address allocation pool
+    default: "10.0.10.2"
+  private_net_pool_end:
+    type: string
+    description: End of private network IP address allocation pool
+    default: "10.0.10.199"
+
+resources:
+  private_net:
+    type: OS::Neutron::Net
+    properties:
+      name: { get_param: private_net_name }
+
+  private_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: private_net }
+      cidr: { get_param: private_net_cidr }
+      gateway_ip: { get_param: private_net_gateway }
+      allocation_pools:
+        - start: { get_param: private_net_pool_start }
+          end: { get_param: private_net_pool_end }
+
+  router:
+    type: OS::Neutron::Router
+    properties:
+      external_gateway_info:
+        network: { get_param: public_net }
+
+  router_interface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router_id: { get_resource: router }
+      subnet_id: { get_resource: private_subnet }
+
+  rubbos_control:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_control
+      image: { get_param: image }
+      flavor: medium
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_control_port }
+      admin_user: ubuntu
+
+  rubbos_control_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_control_floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network: { get_param: public_net }
+      port_id: { get_resource: rubbos_control_port }
+
+  rubbos_httpd:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_httpd
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_httpd_port }
+      admin_user: ubuntu
+
+  rubbos_httpd_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_mysql1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_mysql1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_mysql1_port }
+      admin_user: ubuntu
+
+  rubbos_mysql1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_tomcat1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_tomcat1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_tomcat1_port }
+      admin_user: ubuntu
+
+  rubbos_tomcat1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client1:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client1_port }
+      admin_user: ubuntu
+
+  rubbos_client1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client2:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client2
+      image: #image
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client2_port }
+      admin_user: ubuntu
+
+  rubbos_client2_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client3:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client3
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client3_port }
+      admin_user: ubuntu
+
+  rubbos_client3_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  rubbos_client4:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client4
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client4_port }
+      admin_user: ubuntu
+
+  rubbos_client4_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  #rubbos_client5:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_client4
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_client4_port }
+      admin_user: ubuntu
+
+  rubbos_benchmark:
+    type: OS::Nova::Server
+    properties:
+      name: rubbos_benchmark
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      networks:
+        - port: { get_resource: rubbos_benchmark_port }
+      admin_user: ubuntu
+
+  rubbos_benchmark_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  server_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Rubbos group for servers access.
+      name: rubbos-security-group
+      rules: [
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: tcp,
+        port_range_min: 1,
+        port_range_max: 65535},
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: udp,
+        port_range_min: 1,
+        port_range_max: 65535},
+        {remote_ip_prefix: 0.0.0.0/0,
+        protocol: icmp}]
+
+outputs:
+  rubbos_control_private_ip:
+    description: IP address of rubbos_control in private network
+    value: { get_attr: [ rubbos_control, first_address ] }
+  rubbos_control_public_ip:
+    description: Floating IP address of rubbos_control in public network
+    value: { get_attr: [ rubbos_control_floating_ip, floating_ip_address ] }
+  rubbos_httpd_private_ip:
+    description: IP address of rubbos_httpd in private network
+    value: { get_attr: [ rubbos_httpd, first_address ] }
+  rubbos_mysql1_private_ip:
+    description: IP address of rubbos_mysql1 in private network
+    value: { get_attr: [ rubbos_mysql1, first_address ] }
+  rubbos_tomcat1_private_ip:
+    description: IP address of rubbos_tomcat1 in private network
+    value: { get_attr: [ rubbos_tomcat1, first_address ] }
+  rubbos_client1_private_ip:
+    description: IP address of rubbos_client1 in private network
+    value: { get_attr: [ rubbos_client1, first_address ] }
+  rubbos_client2_private_ip:
+    description: IP address of rubbos_client2 in private network
+    value: { get_attr: [ rubbos_client2, first_address ] }
+  rubbos_client3_private_ip:
+    description: IP address of rubbos_client3 in private network
+    value: { get_attr: [ rubbos_client3, first_address ] }
+  rubbos_client4_private_ip:
+    description: IP address of rubbos_client4 in private network
+    value: { get_attr: [ rubbos_client4, first_address ] }
+  rubbos_benchmark_private_ip:
+    description: IP address of rubbos_benchmark in private network
+    value: { get_attr: [ rubbos_benchmark, first_address ] }
+
diff --git a/utils/infra_setup/heat/tests/generate_template_test.py b/utils/infra_setup/heat/tests/generate_template_test.py
new file mode 100755 (executable)
index 0000000..d4e0a23
--- /dev/null
@@ -0,0 +1,78 @@
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import os
+import unittest
+import mock
+
+import sys
+sys.path.append("..")
+import template
+import common
+
+def reset_common():
+    common.LOG = None
+    common.CONF_FILE = None
+    common.DEPLOYMENT_UNIT = None
+    common.ITERATIONS = None
+    common.BASE_DIR = None
+    common.TEMPLATE_DIR = None
+    common.TEMPLATE_NAME = None
+    common.TEMPLATE_EXTENSION = None
+
+class TestGeneratesTemplate(unittest.TestCase):
+    def setUp(self):
+        self.deployment_configuration = {
+            'flavor': ['medium']
+        }
+        self.template_name = 'rubbos_1-1-1_template.tmp'
+        # common.init()
+
+    def tearDown(self):
+        reset_common()
+
+    @mock.patch('common.LOG')
+    @mock.patch('common.get_template_dir')
+    def test_generates_template_for_success(self, mock_template_dir,
+                                            mock_log):
+        tmp_generated_templates_dir = '/data/generated_templates/'
+        generated_templates_dir = "{}{}".format(os.getcwd(), tmp_generated_templates_dir)
+        mock_template_dir.return_value = generated_templates_dir
+        tmp_test_templates = '/data/test_templates/'
+        test_templates = "{}{}".format(os.getcwd(), tmp_test_templates)
+        template.generates_templates(self.template_name,
+                                     self.deployment_configuration)
+        for dirname, dirnames, filenames in os.walk(test_templates):
+            for filename in filenames:
+                with open(test_templates + filename) as test:
+                    with open(generated_templates_dir + filename) as generated:
+                        self.assertListEqual(test.readlines(),
+                                             generated.readlines())
+
+        t_name = '/data/generated_templates/rubbos_1-1-1_template.tmp'
+        self.template_name = "{}{}".format(os.getcwd(), t_name)
+        template.generates_templates(self.template_name,
+                                     self.deployment_configuration)
+        for dirname, dirnames, filenames in os.walk(test_templates):
+            for filename in filenames:
+                with open(test_templates + filename) as test:
+                    with open(generated_templates_dir + filename) as generated:
+                        self.assertListEqual(test.readlines(),
+                                             generated.readlines())
+
+    @mock.patch('common.get_template_dir')
+    def test_get_all_heat_templates_for_success(self, template_dir):
+        tmp_generated_templates = '/data/generated_templates/'
+        generated_templates = "{}{}".format(os.getcwd(), tmp_generated_templates)
+        template_dir.return_value = generated_templates
+        extension = '.yaml'
+        expected = ['test_template_1.yaml']
+        result = template.get_all_heat_templates(generated_templates,
+                                                 extension)
+        self.assertListEqual(expected, result)