From f6fa5a11bb08c08db0f8f6c4a4ad0fa3bc5d0173 Mon Sep 17 00:00:00 2001
From: Yunge Zhu <37337818+yungezz@users.noreply.github.com>
Date: Fri, 31 Aug 2018 12:14:55 +0800
Subject: [PATCH] azure vm test: async second vm deletion (#44887)

* async second vm deletion

* fix typo

* random resource names, comment out disable steps

* fix syntax

* fix syntax error again

* fix test

* fix typo
---
 .../tasks/virtualmachine.yml                  | 145 +++++++++---------
 1 file changed, 72 insertions(+), 73 deletions(-)

diff --git a/test/integration/targets/azure_rm_virtualmachine/tasks/virtualmachine.yml b/test/integration/targets/azure_rm_virtualmachine/tasks/virtualmachine.yml
index 319d52fa84f..23d807559fb 100644
--- a/test/integration/targets/azure_rm_virtualmachine/tasks/virtualmachine.yml
+++ b/test/integration/targets/azure_rm_virtualmachine/tasks/virtualmachine.yml
@@ -1,19 +1,10 @@
-- name: Delete virtual machines
-  azure_rm_virtualmachine:
-      resource_group: "{{ resource_group }}"
-      name: "{{ vms }}"
-      state: absent
-      vm_size: Standard_A0
-  loop:
-    - testvm002
-    - testvm003
-  loop_control:
-    loop_var: vms
-  register: output
-
-- name: Create storage account name
+- name: Create random names
   set_fact:
       storage_account: "{{ resource_group | hash('md5') | truncate(24, True, '') }}"
+      vm_name1: "vm1{{ resource_group | hash('md5') | truncate(5, True, '') }}"
+      vm_name2: "vm2{{ resource_group | hash('md5') | truncate(5, True, '') }}"
+      abs_name1: "avbs1{{ resource_group | hash('md5') | truncate(3, True, '') }}"
+      abs_name2: "avbs2{{ resource_group | hash('md5') | truncate(3, True, '') }}"
 
 - name: Create storage account
   azure_rm_storageaccount:
@@ -23,32 +14,32 @@
 
 - name: Create an availability set
   azure_rm_availabilityset:
-    name: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
+    name: "{{ abs_name1 }}"
     resource_group: "{{ resource_group }}"
 
 - name: Create virtual network
   azure_rm_virtualnetwork:
       resource_group: "{{ resource_group }}"
-      name: testvm001
+      name: "{{ vm_name1 }}"
       address_prefixes: "10.10.0.0/16"
 
 - name: Add subnet
   azure_rm_subnet:
       resource_group: "{{ resource_group }}"
-      name: testvm001
+      name: "{{ vm_name1 }}"
       address_prefix: "10.10.0.0/24"
-      virtual_network: testvm001
+      virtual_network: "{{ vm_name1 }}"
 
 - name: Create public ip
   azure_rm_publicipaddress:
       resource_group: "{{ resource_group }}"
       allocation_method: Static
-      name: testvm001
+      name: "{{ vm_name1 }}"
 
 - name: Create security group
   azure_rm_securitygroup:
       resource_group: "{{ resource_group }}"
-      name: testvm001
+      name: "{{ vm_name1 }}"
       purge_rules: yes
       rules:
         - name: ALLOW_SSH
@@ -67,27 +58,27 @@
 - name: Create NIC for single nic VM
   azure_rm_networkinterface:
       resource_group: "{{ resource_group }}"
-      name: testvm001
-      virtual_network: testvm001
-      subnet: testvm001
-      public_ip_name: testvm001
-      security_group: testvm001
+      name: "{{ vm_name1 }}"
+      virtual_network: "{{ vm_name1 }}"
+      subnet: "{{ vm_name1 }}"
+      public_ip_name: "{{ vm_name1 }}"
+      security_group: "{{ vm_name1 }}"
 
 - name: Create virtual machine with a single NIC
   register: output
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm002
+      name: "{{ vm_name1 }}"
       vm_size: Standard_A0
       storage_account: "{{ storage_account }}"
-      storage_container: testvm001
-      storage_blob: testvm001.vhd
+      storage_container: "{{ vm_name1 }}"
+      storage_blob: "{{ vm_name1 }}.vhd"
       admin_username: adminuser
       admin_password: Password123!
       short_hostname: testvm
       os_type: Linux
-      network_interfaces: testvm001
-      availability_set: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
+      network_interfaces: "{{ vm_name1 }}"
+      availability_set: "{{ abs_name1 }}"
       image:
         offer: UbuntuServer
         publisher: Canonical
@@ -101,20 +92,20 @@
       that:
         - azure_vm.properties.availabilitySet.id
 
-- add_host:
-      name: new_azure_vm
-      ansible_host: '{{ output.ansible_facts.azure_vm.properties.networkProfile.networkInterfaces[0].properties.ipConfigurations[0].properties.publicIPAddress.properties.ipAddress }}'
-      ansible_connection: paramiko  # not guaranteed to have sshpass...
-      ansible_user: adminuser
-      ansible_password: Password123!
-      ansible_host_key_checking: false
+# - add_host:
+#       name: new_azure_vm
+#       ansible_host: '{{ output.ansible_facts.azure_vm.properties.networkProfile.networkInterfaces[0].properties.ipConfigurations[0].properties.publicIPAddress.properties.ipAddress }}'
+#       ansible_connection: paramiko  # not guaranteed to have sshpass...
+#       ansible_user: adminuser
+#       ansible_password: Password123!
+#       ansible_host_key_checking: false
 
-- name: wait for SSH port to be open
-  wait_for:
-      host: '{{ hostvars["new_azure_vm"].ansible_host }}'
-      port: 22
-      timeout: 60
-      state: started
+# - name: wait for SSH port to be open
+#   wait_for:
+#       host: '{{ hostvars["new_azure_vm"].ansible_host }}'
+#       port: 22
+#       timeout: 60
+#       state: started
 
 #- block:
 #   TODO: figure out how to make this work under ansible-test with the coverage injector
@@ -143,7 +134,7 @@
 - name: Restart the virtual machine
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm002
+      name: "{{ vm_name1 }}"
       restarted: yes
       vm_size: Standard_A0
   register: output
@@ -156,7 +147,7 @@
 - name: Deallocate the virtual machine
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm002
+      name: "{{ vm_name1 }}"
       allocated: no 
       vm_size: Standard_A0
   register: output
@@ -169,7 +160,7 @@
 - name: Start the virtual machine
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm002
+      name: "{{ vm_name1 }}"
       vm_size: Standard_A0
   register: output
 
@@ -181,16 +172,16 @@
 - name: Should be idempotent with a single NIC
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm002
+      name: "{{ vm_name1 }}"
       vm_size: Standard_A0
       storage_account: "{{ storage_account }}"
-      storage_container: testvm001
-      storage_blob: testvm001.vhd
+      storage_container: "{{ vm_name1 }}"
+      storage_blob: "{{ vm_name1 }}.vhd"
       admin_username: adminuser
       admin_password: Password123!
       short_hostname: testvm
       os_type: Linux
-      network_interfaces: testvm001
+      network_interfaces: "{{ vm_name1 }}"
       image:
         offer: UbuntuServer
         publisher: Canonical
@@ -204,7 +195,7 @@
 - name: Delete VM
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm002
+      name: "{{ vm_name1 }}"
       state: absent
       vm_size: Standard_A0
   register: output
@@ -212,7 +203,7 @@
 - name: NIC should be gone
   azure_rm_networkinterface_facts:
       resource_group: "{{ resource_group }}"
-      name: testvm001
+      name: "{{ vm_name1 }}"
   register: output
 
 - assert:
@@ -221,7 +212,7 @@
 - name: PIP should be gone
   azure_rm_publicipaddress_facts:
       resource_group: "{{ resource_group }}"
-      name: testvm001
+      name: "{{ vm_name1 }}"
   register: output
 
 - assert:
@@ -238,7 +229,7 @@
       short_hostname: testvm
       os_type: Linux
       public_ip_allocation_method: Disabled
-      availability_set: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
+      availability_set: "{{ abs_name1 }}"
       image:
         offer: UbuntuServer
         publisher: Canonical
@@ -255,53 +246,60 @@
       name: testvmnoip
       state: absent
       vm_size: Standard_A0
+  async: 5000
+  poll: 0
 
 - set_fact:
       niclist:
-         - name: testvm011
+         - name: testnic011
            resource_group: "{{ resource_group_secondary }}"
-         - name: testvm012
+         - name: testnic012
            resource_group: "{{ resource_group_secondary  }}"
 
+- name: Create an availability set
+  azure_rm_availabilityset:
+    name: "{{ abs_name2 }}"
+    resource_group: "{{ resource_group }}"
+
 - name: Create virtual network
   azure_rm_virtualnetwork:
       resource_group: "{{ resource_group_secondary }}"
-      name: testvm001
+      name: "{{ vm_name2 }}"
       address_prefixes: "10.10.0.0/16"
   register: vn
 
 - name: Add subnet
   azure_rm_subnet:
       resource_group: "{{ resource_group_secondary }}"
-      name: testvm001
+      name: "{{ vm_name2 }}"
       address_prefix: "10.10.0.0/24"
-      virtual_network: testvm001
+      virtual_network: "{{ vm_name2 }}"
 
 - name: Create NICs for dual nic VM
   azure_rm_networkinterface:
       resource_group: "{{ item.resource_group }}"
       name: "{{ item.name }}"
       virtual_network: "{{ vn.state.id }}"
-      subnet: testvm001
-      security_group: testvm001
+      subnet: "{{ vm_name2 }}"
+      security_group: "{{ vm_name1 }}"
   loop: "{{ niclist }}"
 
 - name: Create virtual machine with two NICs
   register: output
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm003
+      name: "{{ vm_name2 }}"
       vm_size: Standard_A0
       storage_account: "{{ storage_account }}"
-      storage_container: testvm001
-      storage_blob: testvm003.vhd
+      storage_container: "{{ vm_name2 }}"
+      storage_blob: "{{ vm_name2 }}.vhd"
       admin_username: adminuser
       admin_password: Password123!
       short_hostname: testvm
       os_type: Linux
       os_disk_size_gb: 64
       network_interfaces: "{{ niclist }}"
-      availability_set: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
+      availability_set: "{{ abs_name2 }}"
       image:
         offer: UbuntuServer
         publisher: Canonical
@@ -315,7 +313,7 @@
 - name: Retrieve vms facts (filtering by name)
   azure_rm_virtualmachine_facts:
     resource_group: "{{ resource_group }}"
-    name: testvm003
+    name: "{{ vm_name2 }}"
   register: results
 
 - name: Just dump output
@@ -326,25 +324,25 @@
   assert:
     that: 
       - results.vms | length == 1
-      - results.vms[0].name == 'testvm003'
+      - results.vms[0].name == "{{ vm_name2 }}"
       - results.vms[0].location == 'eastus'
       - results.vms[0].admin_username == 'adminuser'
 
 - name: Should be idempotent with a dual NICs
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm003
+      name: "{{ vm_name2 }}"
       vm_size: Standard_A0
       storage_account: "{{ storage_account }}"
-      storage_container: testvm001
-      storage_blob: testvm003.vhd
+      storage_container: "{{ vm_name2 }}"
+      storage_blob: "{{ vm_name2 }}.vhd"
       admin_username: adminuser
       admin_password: Password123!
       short_hostname: testvm
       os_type: Linux
       os_disk_size_gb: 64
       network_interfaces: "{{ niclist }}"
-      availability_set: "avbs{{ resource_group | hash('md5') | truncate(7, True, '') }}"
+      availability_set: "{{ abs_name2 }}"
       image:
         offer: UbuntuServer
         publisher: Canonical
@@ -358,10 +356,11 @@
 - name: Delete dual NIC VM
   azure_rm_virtualmachine:
       resource_group: "{{ resource_group }}"
-      name: testvm003
+      name: "{{ vm_name2 }}"
       state: absent
       vm_size: Standard_A0
-  register: output
+  async: 5000
+  poll: 0
 
 # TODO: Until we have a module to create/delete images this is the best tests
 # I can do