- name: Create storage account name set_fact: vm_name: "vm{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}x" storage_name: "st{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" storage_container_name: "sc{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" public_ip_name: "pip{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" security_group_name: "sg{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" blob_name: "blob{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" - name: Create storage account azure_rm_storageaccount: resource_group: "{{ resource_group }}" name: "{{ storage_name }}" account_type: Standard_LRS - name: Create virtual network azure_rm_virtualnetwork: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" address_prefixes: "10.10.0.0/16" - name: Add subnet azure_rm_subnet: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" address_prefix: "10.10.0.0/24" virtual_network: "{{ vm_name }}" - name: Create public ip azure_rm_publicipaddress: resource_group: "{{ resource_group }}" allocation_method: Static name: "{{ public_ip_name }}" - name: Create security group azure_rm_securitygroup: resource_group: "{{ resource_group }}" name: "{{ security_group_name }}" - name: Create NIC azure_rm_networkinterface: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" virtual_network: "{{ vm_name }}" subnet: "{{ vm_name }}" public_ip_name: "{{ public_ip_name }}" security_group: "{{ security_group_name }}" - name: Create virtual machine azure_rm_virtualmachine: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" vm_size: Standard_A0 storage_account: "{{ storage_name }}" storage_container: "{{ storage_container_name }}" storage_blob: "{{ blob_name }}.vhd" admin_username: adminuser admin_password: Password123! os_type: Linux network_interfaces: "{{ vm_name }}" image: offer: UbuntuServer publisher: Canonical sku: 16.04-LTS version: latest - name: Deallocate the virtual machine azure_rm_virtualmachine: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" allocated: no vm_size: Standard_A0 register: output - name: Start the virtual machine azure_rm_virtualmachine: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" vm_size: Standard_A0 - name: Create an image from VM (check mode) azure_rm_image: resource_group: "{{ resource_group }}" source: "https://{{ storage_name }}.blob.core.windows.net/{{ storage_container_name }}/{{ blob_name }}.vhd" name: testimage001 os_type: Linux check_mode: yes register: output - assert: that: output.changed - name: Create an image from VM azure_rm_image: resource_group: "{{ resource_group }}" source: "https://{{ storage_name }}.blob.core.windows.net/{{ storage_container_name }}/{{ blob_name }}.vhd" name: testimage001 os_type: Linux register: output - assert: that: - output.changed - output.id - name: Create an image from VM (idempotent) azure_rm_image: resource_group: "{{ resource_group }}" source: "https://{{ storage_name }}.blob.core.windows.net/{{ storage_container_name }}/{{ blob_name }}.vhd" name: testimage001 os_type: Linux register: output - assert: that: - not output.changed - output.id - name: Gather information about image created azure_rm_image_facts: resource_group: "{{ resource_group }}" name: testimage001 register: output - assert: that: - output.images != [] - name: Delete image (check mode) azure_rm_image: resource_group: "{{ resource_group }}" name: testimage001 state: absent register: output check_mode: yes - assert: that: - output.changed - name: Delete image azure_rm_image: resource_group: "{{ resource_group }}" name: testimage001 state: absent register: output - assert: that: - output.changed - name: Delete image (idempotent) azure_rm_image: resource_group: "{{ resource_group }}" name: testimage001 state: absent register: output - assert: that: - not output.changed - name: Delete VM azure_rm_virtualmachine: resource_group: "{{ resource_group }}" name: "{{ vm_name }}" state: absent vm_size: Standard_A0 register: output - name: Delete public ip azure_rm_publicipaddress: resource_group: "{{ resource_group }}" allocation_method: Static name: "{{ public_ip_name }}" state: absent