From 78f3c55b0a0e70c78e48b8094135995de8842bd8 Mon Sep 17 00:00:00 2001
From: zhihui wu <wu.zhihui1@zte.com.cn>
Date: Sat, 24 Feb 2018 14:25:54 +0800
Subject: create VM via heat

JIRA: QTIP-290

Change-Id: I3b87b06e7f2b134c28d9cb046150fb000070a760
Signed-off-by: zhihui wu <wu.zhihui1@zte.com.cn>
---
 .../ansible_roles/openstack/defaults/main.yml      |  12 +--
 .../openstack/tasks/create_flavor.yml              |  19 ----
 .../ansible_roles/openstack/tasks/create_image.yml |  32 ------
 .../ansible_roles/openstack/tasks/create_stack.yml |  24 -----
 .../openstack/tasks/delete_flavor.yaml             |  16 ---
 .../ansible_roles/openstack/tasks/delete_image.yml |  17 ---
 .../ansible_roles/openstack/tasks/delete_stack.yml |  16 ---
 resources/ansible_roles/openstack/tasks/main.yml   |  76 ++++++++++++-
 .../ansible_roles/qtip-generator/defaults/main.yml |   4 +
 .../files/compute/group_vars/all.yml               |   4 +
 .../qtip-generator/files/compute/heat_template.yml | 117 +++++++++++++--------
 .../qtip-generator/files/compute/setup.yml         |   2 +-
 .../qtip-generator/files/compute/teardown.yml      |   6 --
 13 files changed, 163 insertions(+), 182 deletions(-)
 delete mode 100644 resources/ansible_roles/openstack/tasks/create_flavor.yml
 delete mode 100644 resources/ansible_roles/openstack/tasks/create_image.yml
 delete mode 100644 resources/ansible_roles/openstack/tasks/create_stack.yml
 delete mode 100644 resources/ansible_roles/openstack/tasks/delete_flavor.yaml
 delete mode 100644 resources/ansible_roles/openstack/tasks/delete_image.yml
 delete mode 100644 resources/ansible_roles/openstack/tasks/delete_stack.yml

diff --git a/resources/ansible_roles/openstack/defaults/main.yml b/resources/ansible_roles/openstack/defaults/main.yml
index 1e6d6e9e..830def62 100644
--- a/resources/ansible_roles/openstack/defaults/main.yml
+++ b/resources/ansible_roles/openstack/defaults/main.yml
@@ -9,12 +9,10 @@
 
 ---
 
-stack_name: qtip_stack
-image_name: qtip_image
-flavor_name: qtip_flavor
-net_name: qtip_net
-subnet_name: qtip_subnet
-inst_name: qtip
 image_url: https://cloud-images.ubuntu.com/releases/16.04/release-20180222/ubuntu-16.04-server-cloudimg-amd64-disk1.img
 checksum: 027b3e9d219f0f6c17b5448ed67dc41e
-download_dest: /tmp/qtip/images
\ No newline at end of file
+temp_dir: /tmp/qtip
+
+flavor_name: qtip_flavor
+stack_name: qtip_stack
+image_name: qtip_image
diff --git a/resources/ansible_roles/openstack/tasks/create_flavor.yml b/resources/ansible_roles/openstack/tasks/create_flavor.yml
deleted file mode 100644
index c5795e46..00000000
--- a/resources/ansible_roles/openstack/tasks/create_flavor.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 ZTE Corporation and others.
-# taseer94@gmail.com
-# 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
-##############################################################################
-
----
-
-- name: create QTIP flavor
-  os_nova_flavor:
-    name: "{{ flavor_name }}"
-    endpoint_type: admin
-    ram: 2048
-    vcpus: 3
-    disk: 4
-    state: present
\ No newline at end of file
diff --git a/resources/ansible_roles/openstack/tasks/create_image.yml b/resources/ansible_roles/openstack/tasks/create_image.yml
deleted file mode 100644
index b67595ce..00000000
--- a/resources/ansible_roles/openstack/tasks/create_image.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 ZTE Corporation and others.
-# taseer94@gmail.com
-# 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
-##############################################################################
-
----
-
-- name: create directories for image
-  file:
-    path: "{{ download_dest }}"
-    state: directory
-
-- name: download image as qtip image
-  get_url:
-    url: "{{ image_url }}"
-    dest: "{{ download_dest }}/{{ image_name }}.img"
-    checksum: "md5:{{ checksum }}"
-  when: image_url | search("https://")
-
-- name: upload qtip image
-  os_image:
-    name: "{{ image_name }}"
-    container_format: bare
-    disk_format: qcow2
-    state: present
-    endpoint_type: admin
-    filename: "{{ download_dest }}/{{ image_name }}.img"
-
diff --git a/resources/ansible_roles/openstack/tasks/create_stack.yml b/resources/ansible_roles/openstack/tasks/create_stack.yml
deleted file mode 100644
index 33e8f148..00000000
--- a/resources/ansible_roles/openstack/tasks/create_stack.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 ZTE Corporation and others.
-# taseer94@gmail.com
-# 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
-##############################################################################
-
----
-
-- name: create qtip stack
-  os_stack:
-    name: "{{ stack_name }}"
-    state: present
-    template: ../template/heat_template.yml
-    endpoint_type: admin
-    parameters:
-      image_name: "{{ image_name }}"
-      flavor_name: "{{ flavor_name }}"
-      net_name: "{{ net_name }}"
-      subnet_name: "{{ subnet_name }}"
-      instance_name: "{{ inst_name }}"
-    timeout: 600
diff --git a/resources/ansible_roles/openstack/tasks/delete_flavor.yaml b/resources/ansible_roles/openstack/tasks/delete_flavor.yaml
deleted file mode 100644
index a2816b83..00000000
--- a/resources/ansible_roles/openstack/tasks/delete_flavor.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 ZTE Corporation and others.
-# taseer94@gmail.com
-# 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
-##############################################################################
-
----
-
-- name: delete QTIP flavor
-  os_nova_flavor:
-    name: "{{ flavor_name }}"
-    endpoint_type: admin
-    state: absent
diff --git a/resources/ansible_roles/openstack/tasks/delete_image.yml b/resources/ansible_roles/openstack/tasks/delete_image.yml
deleted file mode 100644
index 46653080..00000000
--- a/resources/ansible_roles/openstack/tasks/delete_image.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 ZTE Corporation 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
-##############################################################################
-
----
-
-- name: delete qtip image
-  os_image:
-    name: "{{ image_name }}"
-    state: absent
-    endpoint_type: admin
-
diff --git a/resources/ansible_roles/openstack/tasks/delete_stack.yml b/resources/ansible_roles/openstack/tasks/delete_stack.yml
deleted file mode 100644
index 63739345..00000000
--- a/resources/ansible_roles/openstack/tasks/delete_stack.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 ZTE Corporation and others.
-# wu.zhihui1@zte.com.cn
-# 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
-##############################################################################
-
----
-
-- name: cleanup qtip stack
-  os_stack:
-    name: "{{ stack_name }}"
-    state: absent
-    endpoint_type: admin
diff --git a/resources/ansible_roles/openstack/tasks/main.yml b/resources/ansible_roles/openstack/tasks/main.yml
index 0b84923e..ed043831 100644
--- a/resources/ansible_roles/openstack/tasks/main.yml
+++ b/resources/ansible_roles/openstack/tasks/main.yml
@@ -9,4 +9,78 @@
 
 ---
 
-- include_tasks: "{{ tasks }}.yml"
+- name: Delete QTIP stack
+  os_stack:
+    name: "{{ stack_name }}"
+    state: absent
+
+- name: Delete QTIP keypair
+  os_keypair:
+      name: QtipKey
+      state: absent
+
+- name: Delete QTIP flavor
+  os_nova_flavor:
+    name: "{{ flavor_name }}"
+    state: absent
+
+- name: Delete qtip image
+  os_image:
+    name: "{{ image_name }}"
+    state: absent
+
+- name: Create temp directory for QTIP
+  file:
+    path: "{{ temp_dir }}"
+    state: directory
+
+- name: Clean the existing SSH keypair
+  file:
+    state: absent
+    path: "{{ temp_dir }}/{{ item }}"
+  with_items:
+    - QtipKey.pub
+    - QtipKey
+
+- name: Generate a SSH key for QTIP VM
+  shell: ssh-keygen -t rsa -N "" -f "{{ temp_dir }}/QtipKey" -q
+
+- name: Create QTIP keypair
+  os_keypair:
+      name: QtipKey
+      public_key_file: "{{ temp_dir }}/QtipKey.pub"
+      state: present
+
+- name: Create QTIP flavor
+  os_nova_flavor:
+    name: "{{ flavor_name }}"
+    ram: 2048
+    vcpus: 3
+    disk: 4
+    state: present
+
+- name: Download image as qtip image
+  get_url:
+    url: "{{ image_url }}"
+    dest: "{{ temp_dir }}/{{ image_name }}.img"
+    checksum: "md5:{{ checksum }}"
+  when: image_url | search("https://")
+
+- name: Upload qtip image
+  os_image:
+    name: "{{ image_name }}"
+    container_format: bare
+    disk_format: qcow2
+    state: present
+    filename: "{{ temp_dir }}/{{ image_name }}.img"
+
+- name: create qtip stack
+  os_stack:
+    name: "{{ stack_name }}"
+    state: present
+    template: "{{ heat_template }}"
+    parameters:
+      image: "{{ image_name }}"
+      flavor: "{{ flavor_name }}"
+      keypair: QtipKey
+      external_network: "{{ external_network }}"
diff --git a/resources/ansible_roles/qtip-generator/defaults/main.yml b/resources/ansible_roles/qtip-generator/defaults/main.yml
index b7616486..300dadf0 100644
--- a/resources/ansible_roles/qtip-generator/defaults/main.yml
+++ b/resources/ansible_roles/qtip-generator/defaults/main.yml
@@ -16,6 +16,10 @@ installer_group:
   apex: apex-underclouds
   mcp: salt-master
 
+network_group:
+  mcp: floating_net
+  apex: external
+
 project_name: 'qtip-project'
 project_template: 'compute'
 
diff --git a/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml b/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml
index efb2bdb7..1b34fd69 100644
--- a/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml
+++ b/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml
@@ -21,3 +21,7 @@ installer_group:
   fuel: fuel-masters
   apex: apex-underclouds
   mcp: salt-master
+
+network_group:
+  mcp: floating_net
+  apex: external
diff --git a/resources/ansible_roles/qtip-generator/files/compute/heat_template.yml b/resources/ansible_roles/qtip-generator/files/compute/heat_template.yml
index d476c8f5..cb67e624 100644
--- a/resources/ansible_roles/qtip-generator/files/compute/heat_template.yml
+++ b/resources/ansible_roles/qtip-generator/files/compute/heat_template.yml
@@ -1,70 +1,101 @@
 ##############################################################################
-# Copyright (c) 2017 ZTE Corporation and others.
-# taseer94@gmail.com
+# Copyright (c) 2018 ZTE Corporation 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
 ##############################################################################
-
----
-
 heat_template_version: 2015-04-30
 
-description: Simple template to deploy a single compute instance
+description: >
+  Used to run VMs for QTIP
 
 parameters:
-  image_name:
+  image:
     type: string
-    label: Image ID
-    description: Image to be used for compute instance
-    default: Ubuntu 16.04 x86_64
-  flavor_name:
-    type: string
-    label: Instance Type
-    description: Type of instance (flavor) to be used
-    default: m1.large
-  net_name:
+    description: Name of the image
+    default: qtip_image
+
+  flavor:
     type: string
-    label: Test network name
-    description: The name of the stack's network
-    default: qtip_net
-  subnet_name:
+    description: Name of flavor
+    default: qtip_flavor
+
+  keypair:
     type: string
-    label: Test subnet name
-    description: The name of the stack's subnet
-    default: qtip_subnet
-  instance_name:
+    description: Name of keypair
+    default: QtipKey
+
+  external_network:
     type: string
-    label: Test VM name
-    description: The name of the spawned vm
-    default: qtip_vm
+    description: Name of the external network
 
 resources:
-  private_net:
+
+  network:
     type: OS::Neutron::Net
     properties:
-      name: { get_param: net_name }
+      name: qtip_net
 
-  private_subnet:
+  subnet:
     type: OS::Neutron::Subnet
     properties:
-      name: { get_param: subnet_name }
-      network_id: { get_resource: private_net }
-      cidr: 10.0.0.0/24
+      name: qtip_subnet
+      ip_version: 4
+      cidr: 192.168.0.0/24
+      network: { get_resource: network }
+      dns_nameservers: [8.8.8.8]
+
+  management_router:
+    type: OS::Neutron::Router
+    properties:
+      name: qtip_router
+      external_gateway_info:
+        network: { get_param: external_network }
+
+  management_router_interface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router: { get_resource: management_router }
+      subnet: { get_resource: subnet }
+
+  floating_ip:
+    type: OS::Neutron::FloatingIP
+    properties:
+      floating_network: { get_param: external_network }
+
+  floating_ip_association:
+    type: OS::Nova::FloatingIPAssociation
+    properties:
+      floating_ip: { get_resource: floating_ip }
+      server_id: { get_resource: qtip_instance }
 
-  server1_port:
-    type: OS::Neutron::Port
+  security_group:
+    type: OS::Neutron::SecurityGroup
     properties:
-      network_id: { get_resource: private_net }
-      fixed_ips:
-        - subnet_id: { get_resource: private_subnet }
+      name: qtip_security_group
+      rules:
+          - port_range_min: 22
+            port_range_max: 5201
+            protocol: tcp
+          - port_range_min: 22
+            port_range_max: 5201
+            protocol: udp
+          - protocol: icmp
 
-  my_instance:
+  qtip_instance:
     type: OS::Nova::Server
+    depends_on: [subnet]
     properties:
-      name: { get_param: instance_name }
-      image: { get_param: image_name }
-      flavor: { get_param: flavor_name }
+      name: { get_param: "OS::stack_name" }
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: keypair }
+      security_groups: [{ get_resource: security_group }]
       networks:
-        - port: { get_resource: server1_port }
+        - network: { get_resource: network }
+outputs:
+  instance_ip:
+    description: The IP address of the instance
+    value: { get_attr: [floating_ip, floating_ip_address] }
diff --git a/resources/ansible_roles/qtip-generator/files/compute/setup.yml b/resources/ansible_roles/qtip-generator/files/compute/setup.yml
index d7f2b875..10537615 100644
--- a/resources/ansible_roles/qtip-generator/files/compute/setup.yml
+++ b/resources/ansible_roles/qtip-generator/files/compute/setup.yml
@@ -15,7 +15,7 @@
 - hosts: localhost
   gather_facts: no
   roles:
-    - { role: openstack, tasks: create_image }
+    - { role: openstack, external_network: {{ network_group[installer_type] }}, heat_template: heat_template.yml }
 {% endif %}
 
 {% if installer_type == 'manual' %}
diff --git a/resources/ansible_roles/qtip-generator/files/compute/teardown.yml b/resources/ansible_roles/qtip-generator/files/compute/teardown.yml
index 84d9c8c1..e483d7f6 100644
--- a/resources/ansible_roles/qtip-generator/files/compute/teardown.yml
+++ b/resources/ansible_roles/qtip-generator/files/compute/teardown.yml
@@ -7,12 +7,6 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-{% if sut_type == 'vnf' %}
-- hosts: localhost
-  gather_facts: no
-  roles:
-    - { role: openstack, tasks: delete_image }
-{% endif %}
 
 - hosts: SUT
 
-- 
cgit