Skip to content

Commit 1407689

Browse files
Merge pull request #57 from p3ck/integration_tests
Integration tests
2 parents d4a083d + f6a2c8d commit 1407689

File tree

19 files changed

+358
-27
lines changed

19 files changed

+358
-27
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Created by https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
22
# Edit at https://www.gitignore.io/?templates=git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv
3-
3+
tests/output
4+
tests/integration/inventory
45
### dotenv ###
56
.env
67

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
trivial:
2+
- Added Integration tests for load_balancer_with_public_ip, manage_network_interface, manage_security_group
3+
bugfixes:
4+
- playbooks/webapp_container.yml
5+
- fix variable names in roles/azure_load_balancer_with_public_ip/tasks/delete.yml
6+
- fix variable names in roles/azure_manage_security_group/tasks/delete.yml
7+
- fix variable names in roles/azure_manage_security_group/tasks/remove_rules.yml

playbooks/webapp_container.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,16 @@
9797
name: cloud.azure_ops.azure_load_balancer_with_public_ip
9898
vars:
9999
azure_load_balancer_with_public_ip_operation: delete
100-
azure_load_balancer_with_public_ip_lb_name: "{{ lb_info.ansible_info.azure_loadbalancers[0].name }}"
100+
azure_load_balancer_with_public_ip_lb_name: "{{ lb_info.loadbalancers[0].name }}"
101101
when:
102-
- lb_info.ansible_info.azure_loadbalancers[0].name is defined
102+
- lb_info.loadbalancers[0].name is defined
103103

104104
- name: Get lb ip
105105
azure.azcollection.azure_rm_resource_info:
106-
url: "{{ lb_info.ansible_info.azure_loadbalancers[0].properties.frontendIPConfigurations[0].properties.publicIPAddress.id }}"
106+
url: "{{ lb_info.loadbalancers[0].properties.frontendIPConfigurations[0].properties.publicIPAddress.id }}"
107107
register: lb_pip_info
108108
when:
109-
- lb_info.ansible_info.azure_loadbalancers[0].properties.frontendIPConfigurations[0].properties.publicIPAddress.id is defined
109+
- lb_info.loadbalancers[0].properties.frontendIPConfigurations[0].properties.publicIPAddress.id is defined
110110

111111
- name: Remove load balancer's public ip
112112
azure.azcollection.azure_rm_publicipaddress:

roles/azure_load_balancer_with_public_ip/tasks/delete.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
- name: Get lb's public ip info
99
azure.azcollection.azure_rm_resource_info:
10-
url: "{{ lb_info.ansible_info.azure_loadbalancers[0].properties.frontendIPConfigurations[0].properties.publicIPAddress.id }}"
10+
url: "{{ lb_info.loadbalancers[0].frontend_ip_configurations[0].public_ip_address.id }}"
1111
register: pip
1212

1313
- name: Delete load balancer

roles/azure_manage_security_group/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ Role Variables
1212
--------------
1313

1414
* **azure_manage_security_group_operation**: Operation to perform. Valid values are 'create', 'delete'. Default is 'create'.
15-
* **azure_manage_security_group_resource_group**: (Required) Resource group on/from which the security group will reside. When `operation='create'`, this resource group will be created if it does not exist.
16-
* **azure_manage_security_group_region**: (Required) Azure region.
15+
* **azure_manage_security_group_resource_group**: (Required) Resource group on/from which the security group will reside. When `azure_manage_security_group_operation='create'`, this resource group will be created if it does not exist.
16+
* **azure_manage_security_group_region**: Azure region, required when the provided resource group does not exist.
1717
* **azure_manage_security_group_security_group**: (Required) Object used to provide details for a security group. Contains the following:
1818
- **name**: (Required) Name of the security group.
1919
- **rules**: List of security rules to apply to a subnet or NIC. Each rule consists of:
@@ -41,12 +41,11 @@ Example Playbook
4141
----------------
4242

4343
- hosts: localhost
44-
vars:
45-
azure_resource_group: 'my_resource_group'
46-
azure_region: 'eastus'
4744
roles:
4845
- name: Create a security group with custom rules
4946
role: cloud.azure_ops.azure_manage_security_group
47+
azure_manage_security_group_resource_group: 'my_resource_group'
48+
azure_manage_security_group_region: eastus
5049
azure_manage_security_group_operation: 'create'
5150
azure_manage_security_group_security_group:
5251
name: "{{ azure_resource_group }}-sg"
@@ -69,6 +68,7 @@ Example Playbook
6968

7069
- name: Remove rules from security group
7170
role: cloud.azure_ops.azure_manage_security_group
71+
azure_manage_security_group_resource_group: 'my_resource_group'
7272
azure_manage_security_group_security_group:
7373
name: "{{ azure_resource_group }}-sg"
7474
rules_to_remove:

roles/azure_manage_security_group/tasks/delete.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@
1313

1414
- name: Detach any NICs from security group prior to deletion
1515
ansible.builtin.include_tasks: detach_from_nic.yml
16-
with_items: "{{ sg_info.securitygroups[0].properties.networkInterfaces }}"
16+
with_items: "{{ sg_info.securitygroups[0].network_interfaces }}"
1717
loop_control:
1818
loop_var: nic_id
1919
when:
2020
- sg_info.securitygroups | length > 0
21-
- sg_info.securitygroups[0].properties.networkInterfaces is defined
21+
- sg_info.securitygroups[0].network_interfaces is defined
2222

2323
- name: Detach any subnets from security group prior to deletion
2424
ansible.builtin.include_tasks: detach_from_subnet.yml
25-
with_items: "{{ sg_info.securitygroups[0].properties.subnets }}"
25+
with_items: "{{ sg_info.securitygroups[0].subnets }}"
2626
loop_control:
2727
loop_var: subnet_id
2828
when:
2929
- sg_info.securitygroups | length > 0
30-
- sg_info.securitygroups[0].properties.subnets is defined
30+
- sg_info.securitygroups[0].subnets is defined
3131

3232
- name: Delete security group
3333
azure.azcollection.azure_rm_securitygroup:

roles/azure_manage_security_group/tasks/detach_from_nic.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
- name: Get nic info
88
azure.azcollection.azure_rm_networkinterface_info:
9-
resource_group: "{{ azure_resource_group }}"
9+
resource_group: "{{ azure_manage_security_group_resource_group }}"
1010
name: "{{ nic_obj.response[0].name }}"
1111
register: nic_result
1212

roles/azure_manage_security_group/tasks/detach_from_subnet.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
- name: Get subnet info
88
azure.azcollection.azure_rm_subnet_info:
9-
resource_group: "{{ azure_resource_group }}"
9+
resource_group: "{{ azure_manage_security_group_resource_group }}"
1010
name: "{{ subnet_name }}"
1111
virtual_network_name: "{{ vnet_name }}"
1212
register: subnet_result

roles/azure_manage_security_group/tasks/main.yml

+7
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,12 @@
44
name: "{{ azure_manage_security_group_resource_group }}"
55
register: rg_info
66

7+
- name: Check azure region
8+
ansible.builtin.fail:
9+
msg: Azure region must be defined as azure_manage_security_group_region
10+
when:
11+
- azure_manage_security_group_region is not defined
12+
- rg_info.resourcegroups | length == 0
13+
714
- name: Create or delete security group
815
ansible.builtin.include_tasks: "{{ azure_manage_security_group_operation }}.yml"
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
---
22
- name: Get security group resource
33
azure.azcollection.azure_rm_securitygroup_info:
4-
resource_group: "{{ azure_resource_group }}"
5-
name: "{{ azure_security_group.name }}"
4+
resource_group: "{{ azure_manage_security_group_resource_group }}"
5+
name: "{{ azure_manage_security_group_security_group.name }}"
66
register: sg_info
77

88
- name: Init empty list of rules
99
ansible.builtin.set_fact:
1010
new_sg_rules: []
11+
1112
- name: Persist rules that will not be removed # noqa jinja[spacing] see: https://github.com/ansible/ansible-lint/issues/2684
1213
ansible.builtin.set_fact:
13-
new_sg_rules: "{{ new_sg_rules + [{ 'name': rule.name, 'protocol': rule.properties.protocol, 'access': rule.properties.access, 'destination_address_prefix': rule.properties.destinationAddressPrefix,\
14-
\ 'destination_port_range': rule.properties.destinationPortRanges, 'direction': rule.properties.direction, 'priority': rule.properties.priority, 'source_address_prefix':\
15-
\ rule.properties.sourceAddressPrefix, 'source_port_range': rule.properties.sourcePortRange, }] }}"
16-
with_items: "{{ sg_info.securitygroups[0].properties.securityRules }}"
14+
new_sg_rules: "{{ new_sg_rules + [{ 'name': rule.name, 'protocol': rule.protocol, 'access': rule.access, 'destination_address_prefix': rule.destination_address_prefix,\
15+
\ 'destination_port_range': rule.destination_port_ranges, 'direction': rule.direction, 'priority': rule.priority, 'source_address_prefix':\
16+
\ rule.source_address_prefix, 'source_port_range': rule.source_port_range, }] }}"
17+
with_items: "{{ sg_info.securitygroups[0].rules }}"
1718
loop_control:
1819
loop_var: rule
19-
when: rule.name not in azure_security_group.rules_to_remove
20+
when: rule.name not in azure_manage_security_group_security_group.rules_to_remove
2021

2122
- name: Update security group with specified rules removed
2223
azure.azcollection.azure_rm_securitygroup:
23-
resource_group: "{{ azure_resource_group }}"
24-
name: "{{ azure_security_group.name }}"
24+
resource_group: "{{ azure_manage_security_group_resource_group }}"
25+
name: "{{ azure_manage_security_group_security_group.name }}"
2526
purge_rules: true
2627
rules: "{{ new_sg_rules }}"
27-
tags: "{{ azure_tags | default(omit) }}"
28+
tags: "{{ azure_manage_security_group_security_group.tags | default(omit) }}"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cloud/azure
2+
role/azure_load_balancer_with_public_ip
3+
time=2m
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
azure_load_balancer_with_public_ip_resource_group: "{{ resource_group }}"
3+
azure_load_balancer_with_public_ip_tags:
4+
resource_prefix: "{{ resource_prefix }}"
5+
load_balancer_name: "{{ resource_prefix }}-load-balancer"
6+
load_balancer_public_ip_name: "{{ resource_prefix }}-publicIP"
7+
load_balancer_sku: 'Basic'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
# Determine Azure Region
3+
- name: Gather Resource Group info
4+
azure.azcollection.azure_rm_resourcegroup_info:
5+
name: "{{ resource_group }}"
6+
register: __rg_info
7+
8+
- name: Set Azure Region for azure_load_balancer_with_public_ip Role
9+
ansible.builtin.set_fact:
10+
azure_load_balancer_with_public_ip_region: "{{ __rg_info.resourcegroups.0.location }}"
11+
12+
- name: Test Create and Delete Load Balancer
13+
block:
14+
# Test: Create Load Balancer
15+
- name: Create Load Balancer with Public IP
16+
ansible.builtin.include_role:
17+
name: cloud.azure_ops.azure_load_balancer_with_public_ip
18+
vars:
19+
azure_load_balancer_with_public_ip_operation: create
20+
azure_load_balancer_with_public_ip_load_balancer:
21+
name: "{{ load_balancer_name }}"
22+
public_ip_name: "{{ load_balancer_public_ip_name }}"
23+
sku: "{{ load_balancer_sku }}"
24+
25+
- name: Gather Load Balancer info
26+
azure.azcollection.azure_rm_loadbalancer_info:
27+
name: "{{ load_balancer_name }}"
28+
resource_group: "{{ resource_group }}"
29+
register: _loadbalancer
30+
31+
- name: Ensure Load Balancer was created as expected
32+
ansible.builtin.assert:
33+
that:
34+
- _loadbalancer.loadbalancers | length == 1
35+
36+
- name: Gather Public IP info
37+
azure.azcollection.azure_rm_publicipaddress_info:
38+
name: "{{ load_balancer_public_ip_name }}"
39+
resource_group: "{{ resource_group }}"
40+
register: _publicip
41+
42+
- name: Ensure Public IP was created
43+
ansible.builtin.assert:
44+
that:
45+
- _publicip.publicipaddresses | length == 1
46+
47+
# Test: Delete Load Balancer
48+
- name: Create Load Balancer with Public IP
49+
ansible.builtin.include_role:
50+
name: cloud.azure_ops.azure_load_balancer_with_public_ip
51+
vars:
52+
azure_load_balancer_with_public_ip_operation: delete
53+
azure_load_balancer_with_public_ip_load_balancer:
54+
name: "{{ load_balancer_name }}"
55+
public_ip_name: "{{ load_balancer_public_ip_name }}"
56+
sku: "{{ load_balancer_sku }}"
57+
58+
- name: Ensure Load Balancer was deleted
59+
azure.azcollection.azure_rm_loadbalancer_info:
60+
name: "{{ load_balancer_name }}"
61+
resource_group: "{{ resource_group }}"
62+
register: _loadbalancer
63+
failed_when: _loadbalancer.loadbalancers | length > 0
64+
65+
- name: Ensure Public IP was deleted
66+
azure.azcollection.azure_rm_publicipaddress_info:
67+
name: "{{ load_balancer_public_ip_name }}"
68+
resource_group: "{{ resource_group }}"
69+
register: _publicip
70+
failed_when: _publicip.publicipaddresses | length > 0
71+
72+
always:
73+
- name: Delete Public IP
74+
azure.azcollection.azure_rm_publicipaddress:
75+
resource_group: "{{ resource_group }}"
76+
name: "{{ load_balancer_public_ip_name }}"
77+
state: absent
78+
79+
- name: Delete Load Balancer
80+
azure.azcollection.azure_rm_loadbalancer:
81+
resource_group: "{{ resource_group }}"
82+
name: "{{ load_balancer_name }}"
83+
state: absent
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cloud/azure
2+
role/azure_manage_network_interface
3+
time=2m
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
network_interface_name: "{{ resource_prefix }}-nic"
3+
network_interface_ip_config:
4+
- name: "{{ resource_prefix }}-nic"
5+
primary: true
6+
public_ip_allocation_method: 'Dynamic'
7+
network_interface_virtual_network: "{{ resource_prefix }}-nic-vnet"
8+
network_interface_subnet: "{{ resource_prefix }}-nic-subnet"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
- name: Ensure Network interface does not already exists
3+
azure.azcollection.azure_rm_networkinterface_info:
4+
name: "{{ network_interface_name }}"
5+
resource_group: "{{ resource_group }}"
6+
register: __interfaces
7+
failed_when: __interfaces.networkinterfaces | length > 0
8+
9+
- name: Test role cloud.azure_ops.azure_manage_network_interface
10+
block:
11+
- name: Create Virtual network
12+
azure.azcollection.azure_rm_virtualnetwork:
13+
name: "{{ network_interface_virtual_network }}"
14+
address_prefixes_cidr:
15+
- 10.1.0.0/24
16+
resource_group: "{{ resource_group }}"
17+
18+
- name: Create azure subnet
19+
azure.azcollection.azure_rm_subnet:
20+
name: "{{ network_interface_subnet }}"
21+
virtual_network: "{{ network_interface_virtual_network }}"
22+
address_prefix_cidr: 10.1.0.0/26
23+
resource_group: "{{ resource_group }}"
24+
25+
# Test: create Network interface
26+
- name: Create security group with required rules
27+
ansible.builtin.include_role:
28+
name: cloud.azure_ops.azure_manage_network_interface
29+
vars:
30+
azure_manage_network_interface_operation: create
31+
azure_manage_network_interface_resource_group: "{{ resource_group }}"
32+
azure_manage_network_interface_interface:
33+
name: "{{ network_interface_name }}"
34+
vnet_name: "{{ network_interface_virtual_network }}"
35+
subnet_name: "{{ network_interface_subnet }}"
36+
ip_configurations: "{{ network_interface_ip_config }}"
37+
38+
- name: Gather Network interface info
39+
azure.azcollection.azure_rm_networkinterface_info:
40+
name: "{{ network_interface_name }}"
41+
resource_group: "{{ resource_group }}"
42+
register: __interfaces
43+
44+
- name: Ensure Network interface has been created
45+
ansible.builtin.assert:
46+
that:
47+
- __interfaces.networkinterfaces | length == 1
48+
- __interfaces.networkinterfaces.0.subnet == network_interface_subnet
49+
- __interfaces.networkinterfaces.0.virtual_network.name == network_interface_virtual_network
50+
- __interfaces.networkinterfaces.0.ip_configurations | length == network_interface_ip_config | length
51+
52+
# Delete Network interface
53+
- name: Create security group with required rules
54+
ansible.builtin.include_role:
55+
name: cloud.azure_ops.azure_manage_network_interface
56+
vars:
57+
azure_manage_network_interface_operation: delete
58+
azure_manage_network_interface_resource_group: "{{ resource_group }}"
59+
azure_manage_network_interface_interface:
60+
name: "{{ network_interface_name }}"
61+
vnet_name: "{{ network_interface_virtual_network }}"
62+
subnet_name: "{{ network_interface_subnet }}"
63+
64+
- name: Gather Network interface info
65+
azure.azcollection.azure_rm_networkinterface_info:
66+
name: "{{ network_interface_name }}"
67+
resource_group: "{{ resource_group }}"
68+
register: __interfaces
69+
70+
- name: Ensure Network interface was created
71+
ansible.builtin.assert:
72+
that:
73+
- __interfaces.networkinterfaces | length == 0
74+
75+
always:
76+
- name: Delete Subnet
77+
azure.azcollection.azure_rm_subnet:
78+
name: "{{ network_interface_subnet }}"
79+
virtual_network: "{{ network_interface_virtual_network }}"
80+
resource_group: "{{ resource_group }}"
81+
state: absent
82+
83+
- name: Delete Virtual network
84+
azure.azcollection.azure_rm_virtualnetwork:
85+
name: "{{ network_interface_virtual_network }}"
86+
resource_group: "{{ resource_group }}"
87+
state: absent
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cloud/azure
2+
role/azure_manage_security_group
3+
time=1m

0 commit comments

Comments
 (0)