Skip to content

Commit 88d4cbd

Browse files
committed
Added Virtual network autocreation during Virual machine with public IP creation
1 parent f46ca6c commit 88d4cbd

File tree

7 files changed

+162
-5
lines changed

7 files changed

+162
-5
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
bugfixes:
2+
- Added Virtual network autocreation during Virual machine with public IP creation
3+
in case Virtual network doesn't exist for azure_virtual_machine_with_public_ip role

roles/azure_virtual_machine_with_public_ip/tasks/create.yml

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
azure_manage_resource_group_tags: "{{ azure_virtual_machine_with_public_ip_tags | default(omit) }}"
3333
when: rg_info.resourcegroups | length == 0
3434

35-
# If nic is not specified, assert virtual network exists and create default public ip & nic
35+
# If nic is not specified, create virtual network if needed and create default public ip & nic
3636
- name: Ensure default nic and default public ip
3737
when: azure_virtual_machine_with_public_ip_vm.network_interfaces is undefined
3838
block:
@@ -41,10 +41,30 @@
4141
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
4242
register: vnet_info
4343

44-
- name: Ensure vnet exists
45-
ansible.builtin.fail:
46-
msg: When no network interfaces are specified, a virtual network must exist
47-
when: vnet_info.virtualnetworks | length == 0
44+
- name: Specify either create a virtual network or to use existen
45+
ansible.builtin.set_fact:
46+
vnet_autocreated: "{{ vnet_info.virtualnetworks | length == 0 }}"
47+
48+
- name: Ensure virtual network exists
49+
when: vnet_autocreated
50+
block:
51+
- name: No virtual network exists -> create virtual network and subnet
52+
ansible.builtin.include_role:
53+
name: cloud.azure_ops.azure_manage_networking_stack
54+
vars:
55+
azure_manage_networking_stack_operation: create
56+
azure_manage_networking_stack_resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
57+
azure_manage_networking_stack_virtual_network: "{{ vm_name }}"
58+
azure_manage_networking_stack_subnet: "{{ vm_name }}"
59+
azure_manage_networking_stack_vnet_address_prefixes_cidr:
60+
- "10.1.0.0/16"
61+
azure_manage_networking_stack_subnet_address_prefixes_cidr:
62+
- "10.1.0.0/24"
63+
64+
- name: Refresh virtual network info
65+
azure.azcollection.azure_rm_virtualnetwork_info:
66+
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
67+
register: vnet_info
4868

4969
- name: Create default public ip for default nic
5070
azure.azcollection.azure_rm_publicipaddress:

roles/azure_virtual_machine_with_public_ip/tasks/delete.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@
1111
remove_on_absent: "{{ azure_virtual_machine_with_public_ip_remove_on_absent | default(omit) }}"
1212
state: absent
1313

14+
- name: Delete Virtual network if requested
15+
azure.azcollection.azure_rm_virtualnetwork:
16+
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
17+
name: "{{ vm_name }}"
18+
state: absent
19+
when:
20+
- vnet_autocreated
21+
- azure_virtual_machine_with_public_ip_remove_on_absent in ['all', 'all_autocreated']
22+
1423
- name: Delete Resource group if requested
1524
ansible.builtin.include_role:
1625
name: cloud.azure_ops.azure_manage_resource_group
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cloud/azure
2+
role/azure_virtual_machine_with_public_ip
3+
time=10m
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
azure_virtual_machine_with_public_ip_vm_name: "{{ resource_prefix }}-vm"
3+
azure_virtual_machine_with_public_ip_vm_image:
4+
offer: RHEL
5+
publisher: RedHat
6+
sku: 8-LVM
7+
version: latest
8+
azure_virtual_machine_with_public_ip_vm_username: 'azureuser'
9+
azure_virtual_machine_with_public_ip_vm_admin_password: 'Password123!'
10+
azure_virtual_machine_with_public_ip_vm_size: Standard_B1s
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
- name: Ensure VM doesn't exist
3+
block:
4+
- name: Get VM by name
5+
azure.azcollection.azure_rm_virtualmachine_info:
6+
resource_group: "{{ vm_resource_group }}"
7+
name: "{{ vm_name }}"
8+
register: no_vm_info
9+
rescue:
10+
- name: VM doesn't exist as expected
11+
when: ansible_failed_task.name == 'Get VM by name'
12+
ansible.builtin.debug:
13+
msg: VM doesn't exist as expected
14+
15+
- name: Force failure if VM was found or unexpected failure occurred
16+
ansible.builtin.fail:
17+
msg: "'{{ vm_name }}' exists and/or collected info is '{{ no_vm_info }}'"
18+
when: no_vm_info.msg is not contains 'ResourceNotFound'
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
---
2+
- name: Test azure_virtual_machine_with_public_ip role with default create/delete options
3+
block:
4+
- name: Ensure VM doesn't exist
5+
ansible.builtin.include_tasks: "ensure_no_vm_found.yml"
6+
vars:
7+
vm_resource_group: "{{ resource_group }}"
8+
vm_name: "{{ azure_virtual_machine_with_public_ip_vm_name }}"
9+
10+
- name: Set vars for test
11+
ansible.builtin.set_fact:
12+
azure_virtual_machine_with_public_ip_resource_group: "{{ resource_group }}"
13+
azure_virtual_machine_with_public_ip_vm:
14+
name: "{{ azure_virtual_machine_with_public_ip_vm_name }}"
15+
admin_username: "{{ azure_virtual_machine_with_public_ip_vm_username }}"
16+
admin_password: "{{ azure_virtual_machine_with_public_ip_vm_admin_password }}"
17+
image: "{{ azure_virtual_machine_with_public_ip_vm_image }}"
18+
size: "{{ azure_virtual_machine_with_public_ip_vm_size }}"
19+
20+
# Test: Create Virtual machine with default options
21+
- name: Create Virtual machine with with a default network interface
22+
ansible.builtin.include_role:
23+
name: cloud.azure_ops.azure_virtual_machine_with_public_ip
24+
vars:
25+
azure_virtual_machine_with_public_ip_operation: create
26+
27+
# Verify VM has been created
28+
- name: Ensure VM has been created
29+
azure.azcollection.azure_rm_virtualmachine_info:
30+
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
31+
name: "{{ azure_virtual_machine_with_public_ip_vm.name }}"
32+
register: vm_info
33+
34+
- name: Verify VM parameters
35+
ansible.builtin.assert:
36+
that:
37+
- vm_info.vms[0].name == azure_virtual_machine_with_public_ip_vm.name
38+
- vm_info.vms[0].network_interface_names[0] == azure_virtual_machine_with_public_ip_vm.name
39+
- vm_info.vms[0].vm_size == azure_virtual_machine_with_public_ip_vm.size
40+
- vm_info.vms[0].image.offer == azure_virtual_machine_with_public_ip_vm.image.offer
41+
- vm_info.vms[0].power_state == "running"
42+
- vm_info.vms[0].provisioning_state == "Succeeded"
43+
44+
# Test: Delete Virtual machine with default options
45+
- name: Delete Virtual machine and all autocreated resources
46+
ansible.builtin.include_role:
47+
name: cloud.azure_ops.azure_virtual_machine_with_public_ip
48+
vars:
49+
azure_virtual_machine_with_public_ip_operation: delete
50+
51+
- name: Ensure VM doesn't exist
52+
ansible.builtin.include_tasks: "ensure_no_vm_found.yml"
53+
vars:
54+
vm_resource_group: "{{ resource_group }}"
55+
vm_name: "{{ azure_virtual_machine_with_public_ip_vm.name }}"
56+
57+
# Ensure all aurocreted resources have been deleted
58+
- name: Get auto created NIC
59+
azure_rm_networkinterface_info:
60+
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
61+
name: "{{ azure_virtual_machine_with_public_ip_vm.name }}"
62+
register: nic_info
63+
64+
- name: Get auto created public IP
65+
azure_rm_publicipaddress_info:
66+
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
67+
name: "{{ azure_virtual_machine_with_public_ip_vm.name }}"
68+
register: pip_info
69+
70+
- name: Get auto created Virtual network
71+
azure.azcollection.azure_rm_virtualnetwork_info:
72+
resource_group: "{{ azure_virtual_machine_with_public_ip_resource_group }}"
73+
name: "{{ azure_virtual_machine_with_public_ip_vm.name }}"
74+
register: vnet_info
75+
76+
- name: Assert that autocreated resources were deleted
77+
ansible.builtin.assert:
78+
that:
79+
- nic_info.networkinterfaces | length == 0
80+
- pip_info.publicipaddresses | length == 0
81+
- vnet_info.virtualnetworks | length == 0
82+
83+
always:
84+
- name: Delete Virtual Machine and specified associated resources
85+
azure.azcollection.azure_rm_virtualmachine:
86+
resource_group: "{{ resource_group }}"
87+
name: "{{ azure_virtual_machine_with_public_ip_vm_name }}"
88+
state: absent
89+
90+
- name: Delete autocreted virtual network
91+
azure.azcollection.azure_rm_virtualnetwork:
92+
state: absent
93+
resource_group: "{{ resource_group }}"
94+
name: "{{ azure_virtual_machine_with_public_ip_vm_name }}"

0 commit comments

Comments
 (0)