- name: Prepare random number set_fact: rpfx: "{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}" parameter: {} run_once: yes - name: Clearing (if) previous disks were created azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "{{ item }}" state: absent with_items: - "md{{ rpfx }}os" - "md{{ rpfx }}2" - "md{{ rpfx }}1" - name: Create managed disk (Check Mode) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" storage_account_type: "Standard_LRS" disk_size_gb: 1 tags: testing: testing delete: never register: output check_mode: yes - name: Assert status succeeded (Check Mode) assert: that: - output.changed - output.state - name: Test invalid account name (should give error) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "invalid_char$" disk_size_gb: 1 state: present register: output ignore_errors: yes check_mode: no - name: Assert task failed assert: { that: "output['failed'] == True" } - name: Create new managed disk succesfully azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" storage_account_type: "Standard_LRS" disk_size_gb: 1 tags: testing: testing delete: never register: output - name: Assert status succeeded and results include an Id value assert: that: - output.changed - output.state.id is defined - output.state.os_type == None - name: Change the operating system type of the managed disk to linux azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 1 os_type: linux storage_account_type: "Standard_LRS" tags: testing: testing delete: never register: output - assert: that: - output.changed - output.state.os_type == 'linux' - name: Create new managed disk with an os_type specified at creation azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}os" storage_account_type: "Standard_LRS" disk_size_gb: 1 os_type: windows register: win - name: Assert status of os_type specified at creation assert: that: - win.changed - win.state.os_type == 'windows' - name: Clean up managed disk created with os_type azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}os" state: absent - name: Copy disk to a new managed disk azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}2" create_option: "copy" source_uri: "{{ output.state.id }}" disk_size_gb: 1 register: copy - name: Assert status succeeded and results include an Id value assert: that: - copy.changed - copy.state.id is defined - name: Update a new disk without changes azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" storage_account_type: "Standard_LRS" disk_size_gb: 1 register: output - name: Assert status succeeded and results include an Id value assert: that: - not output.changed - output.state.id is defined - name: Change storage account type to an invalid type azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" storage_account_type: "PremiumL" disk_size_gb: 1 register: output ignore_errors: yes - name: Assert storage account type change failed assert: { that: "output['failed'] == True" } - name: Change disk size to incompatible size azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 30000 register: output ignore_errors: yes - name: Assert disk size change to incompatible size (>4095) failure assert: { that: "output['failed'] == True" } - name: Change disk to bigger size azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 register: output - name: Assert status succeeded assert: that: - output.changed - name: Change disk to Premium azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" storage_account_type: "Premium_LRS" disk_size_gb: 2 register: output - name: Assert status succeeded assert: that: - output.changed - name: Update disk tags azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 tags: testing: testing delete: never galaxy: 'no' register: output - name: Assert disk incremented tags assert: that: - "output.state.tags | length == 3" - "output.state.tags.galaxy == 'no'" - name: Update disk tags azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 tags: testing: testing delete: never register: output - name: Assert disk tags are 2 assert: that: - "output.state.tags | length == 2" - "output.state.tags.testing == 'testing'" - "output.state.tags.delete == 'never'" - name: Gather facts to one specific disk azure_rm_managed_disk_facts: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" - assert: that: - "azure_managed_disk | length == 1" - azure_managed_disk[0].storage_account_type == "Premium_LRS" - azure_managed_disk[0].disk_size_gb == 2 - "azure_managed_disk[0].os_type == 'linux'" - name: Gather facts azure_rm_managed_disk_facts: resource_group: "{{ resource_group }}" - assert: that: - "azure_managed_disk | length > 0" - set_fact: parameter: "{{parameter |combine({item.key: item.value})}}" when: "{{item.key not in ['id', 'changed'] and item.value != None}}" with_dict: "{{ azure_managed_disk[0] }}" - name: Create disk with facts return value azure_rm_managed_disk: resource_group: "{{ resource_group }}" location: "{{ parameter.location }}" name: "{{ parameter.name }}" storage_account_type: "{{ parameter.storage_account_type }}" disk_size_gb: "{{ parameter.disk_size_gb }}" create_option: "{{ parameter.create_option }}" tags: "{{ parameter.tags }}" register: output - assert: that: - not output.changed - name: Create virtual network azure_rm_virtualnetwork: resource_group: "{{ resource_group }}" name: "tr{{ rpfx }}" address_prefixes: "10.10.0.0/16" - name: Add subnet azure_rm_subnet: resource_group: "{{ resource_group }}" name: "tr{{ rpfx }}" address_prefix: "10.10.0.0/24" virtual_network: "tr{{ rpfx }}" - name: Create public ip azure_rm_publicipaddress: resource_group: "{{ resource_group }}" allocation_method: Static name: "tr{{ rpfx }}" - name: Create security group azure_rm_securitygroup: resource_group: "{{ resource_group }}" name: "tr{{ rpfx }}" - name: Create NIC azure_rm_networkinterface: resource_group: "{{ resource_group }}" name: "tr{{ rpfx }}" virtual_network: "tr{{ rpfx }}" subnet: "tr{{ rpfx }}" public_ip_name: "tr{{ rpfx }}" security_group: "tr{{ rpfx }}" - name: Create virtual machine azure_rm_virtualmachine: resource_group: "{{ resource_group }}" name: "tr{{ rpfx }}" admin_username: adminuser admin_password: Password123! os_type: Linux managed_disk_type: Premium_LRS vm_size: Standard_DS1_v2 network_interfaces: "tr{{ rpfx }}" image: offer: UbuntuServer publisher: Canonical sku: 16.04-LTS version: latest - name: Mount the disk to virtual machine (check mode) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 managed_by: "tr{{ rpfx }}" tags: testing: testing delete: never register: mounted check_mode: yes - assert: that: - not mounted.state.managed_by - name: Mount the disk to virtual machine azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 managed_by: "tr{{ rpfx }}" tags: testing: testing delete: never register: mounted - assert: that: - "'tr{{ rpfx }}' in mounted.state.managed_by" - name: Mount the disk to virtual machine (idempotent) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 tags: testing: testing delete: never register: mounted - assert: that: - not mounted.changed - "'tr{{ rpfx }}' in mounted.state.managed_by" - name: Unmount the disk to virtual machine (check mode) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 managed_by: '' tags: testing: testing delete: never check_mode: yes register: mounted - assert: that: - mounted.changed - name: Unmount the disk to virtual machine azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 2 managed_by: '' tags: testing: testing delete: never register: mounted - assert: that: - mounted.changed - not mounted.state.managed_by - name: Unmount the disk to virtual machine (idempotent) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" managed_by: '' disk_size_gb: 2 tags: testing: testing delete: never register: mounted - assert: that: - not mounted.changed - not mounted.state.managed_by - name: Update disk size azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 4 tags: testing: testing delete: never register: output - assert: that: - output.state.disk_size_gb == 4 - name: Attach the disk to virtual machine again azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" disk_size_gb: 4 managed_by: "tr{{ rpfx }}" tags: testing: testing delete: never register: mounted - assert: that: - mounted.changed - "'tr{{ rpfx }}' in mounted.state.managed_by" - name: Change disk size to incompatible size azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" state: absent managed_by: "tr{{ rpfx }}" register: output ignore_errors: yes - name: Assert delete failed since disk is attached to VM assert: { that: "output['failed'] == True" } - name: Delete managed disk (Check Mode) azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}1" state: absent register: output check_mode: yes - name: Assert status succeeded assert: that: - output.changed - output.state - name: Delete all managed disk azure_rm_managed_disk: resource_group: "{{ resource_group }}" name: "md{{ rpfx }}{{ item }}" managed_by: '' state: absent with_items: - 1 - 2 - name: Delete virtual machine azure_rm_virtualmachine: resource_group: "{{ resource_group }}" name: "tr{{ rpfx }}" state: absent vm_size: Standard_DS1_v2 - name: Delete public ip azure_rm_publicipaddress: resource_group: "{{ resource_group }}" allocation_method: Static name: "tr{{ rpfx }}" state: absent