Skip to content

Commit

Permalink
ACA-1500: Create a common resource management convention for all roles
Browse files Browse the repository at this point in the history
The following rules must be followed:
* The main file for each role should include the "Get Resource Group" task.
* In the "Create" tasks:
   - Verify that if the resource group doesn't exist, the user must provide the region name.
   - If the resource group doesn't exist, create it with the given region name.
* In the "Delete" tasks:
   - Verify that the resource group exists.
   - After all resources are deleted successfully, if the user requested to delete the resource group, delete it.
   - The role shouldn't include an option for force deleting non-empty resource groups.
Also changing the integration tests to have 2 tests cases:
1. Pre created Resource Group
2. Resource Group has to be created and deleted by role
  • Loading branch information
nirarg committed May 21, 2024
1 parent e0ec5a0 commit ad11dfe
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 66 deletions.
2 changes: 2 additions & 0 deletions roles/azure_load_balancer_with_public_ip/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ Role Variables
- **protocol**: IP protocol for the rule. Valid choices are: 'Tcp', 'Udp', 'All'.
- **sku**: Load balancer SKU. Valid choices are: 'Basic', 'Standard'. Will also be applied to the public ip generated for the load balancer.
- **tags**: Dictionary of string:string pairs to assign as metadata to the load balancer.
- **azure_load_balancer_with_public_ip_delete_resource_group**: Relevant for **create** operation. Delete the resource group.


Limitations
------------
Expand Down
1 change: 1 addition & 0 deletions roles/azure_load_balancer_with_public_ip/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
---
azure_load_balancer_with_public_ip_operation: create
azure_load_balancer_with_public_ip_delete_resource_group: false
8 changes: 7 additions & 1 deletion roles/azure_load_balancer_with_public_ip/tasks/create.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
---
- name: Check that Azure Region is known
ansible.builtin.fail:
msg: Azure region must be defined as azure_load_balancer_with_public_ip_region
when:
- azure_load_balancer_with_public_ip_region is not defined
- rg_info.resourcegroups | length == 0

- name: Create resource group
ansible.builtin.include_role:
name: cloud.azure_ops.azure_manage_resource_group
vars:
azure_manage_resource_group_operation: create
azure_manage_resource_group_name: "{{ azure_load_balancer_with_public_ip_resource_group }}"
azure_manage_resource_group_region: "{{ azure_load_balancer_with_public_ip_region }}"
azure_manage_resource_group_tags: "{{ azure_load_balancer_with_public_ip_region }}"
when: rg_info.resourcegroups | length == 0

- name: Ensure public ip exists
Expand Down
10 changes: 9 additions & 1 deletion roles/azure_load_balancer_with_public_ip/tasks/delete.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
- name: Assert resource group exists {{ azure_load_balancer_with_public_ip_resource_group }}
- name: Verify that Resource Group exists - `{{ azure_load_balancer_with_public_ip_resource_group }}`
ansible.builtin.fail:
msg: Resource group '{{ azure_load_balancer_with_public_ip_resource_group }}' does not exist.
when:
Expand All @@ -21,3 +21,11 @@
resource_group: "{{ azure_load_balancer_with_public_ip_resource_group }}"
name: "{{ pip.response[0].name }}"
state: absent

- name: Delete Resource Group if requested
ansible.builtin.include_role:
name: cloud.azure_ops.azure_manage_resource_group
vars:
azure_manage_resource_group_operation: delete
azure_manage_resource_group_name: "{{ azure_load_balancer_with_public_ip_resource_group }}"
when: azure_load_balancer_with_public_ip_delete_resource_group
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
azure_load_balancer_with_public_ip_resource_group: "{{ resource_group }}"
azure_load_balancer_with_public_ip_tags:
resource_prefix: "{{ resource_prefix }}"
load_balancer_name: "{{ resource_prefix }}-load-balancer"
load_balancer_public_ip_name: "{{ resource_prefix }}-publicIP"
load_balancer_sku: 'Basic'
load_balancer_sku: 'Basic'
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
- name: Test Create and Delete Load Balancer
block:
- name: Print test step details
ansible.builtin.debug:
msg: "Run test with resource_group={{ test_resource_group }}"

# Test: Create Load Balancer
- name: Create Load Balancer with Public IP
ansible.builtin.include_role:
name: cloud.azure_ops.azure_load_balancer_with_public_ip
vars:
azure_load_balancer_with_public_ip_resource_group: "{{ test_resource_group }}"
azure_load_balancer_with_public_ip_operation: create
azure_load_balancer_with_public_ip_load_balancer:
name: "{{ load_balancer_name }}"
public_ip_name: "{{ load_balancer_public_ip_name }}"
sku: "{{ load_balancer_sku }}"

- name: Gather Load Balancer info
azure.azcollection.azure_rm_loadbalancer_info:
name: "{{ load_balancer_name }}"
resource_group: "{{ test_resource_group }}"
register: _loadbalancer

- name: Ensure Load Balancer was created as expected
ansible.builtin.assert:
that:
- _loadbalancer.loadbalancers | length == 1

- name: Gather Public IP info
azure.azcollection.azure_rm_publicipaddress_info:
name: "{{ load_balancer_public_ip_name }}"
resource_group: "{{ test_resource_group }}"
register: _publicip

- name: Ensure Public IP was created
ansible.builtin.assert:
that:
- _publicip.publicipaddresses | length == 1

# Test: Delete Load Balancer
- name: Delete Load Balancer with Public IP
ansible.builtin.include_role:
name: cloud.azure_ops.azure_load_balancer_with_public_ip
vars:
azure_load_balancer_with_public_ip_resource_group: "{{ test_resource_group }}"
azure_load_balancer_with_public_ip_operation: delete
azure_load_balancer_with_public_ip_load_balancer:
name: "{{ load_balancer_name }}"
public_ip_name: "{{ load_balancer_public_ip_name }}"
sku: "{{ load_balancer_sku }}"

- name: Ensure Load Balancer was deleted
azure.azcollection.azure_rm_loadbalancer_info:
name: "{{ load_balancer_name }}"
resource_group: "{{ test_resource_group }}"
register: _loadbalancer
failed_when: _loadbalancer.loadbalancers | length > 0

- name: Ensure Public IP was deleted
azure.azcollection.azure_rm_publicipaddress_info:
name: "{{ load_balancer_public_ip_name }}"
resource_group: "{{ test_resource_group }}"
register: _publicip
failed_when: _publicip.publicipaddresses | length > 0

- name: Ensure Resource Group was deleted - {{ test_resource_group }}
azure.azcollection.azure_rm_resourcegroup_info:
name: "{{ test_resource_group }}"
when: azure_load_balancer_with_public_ip_delete_resource_group is defined and azure_load_balancer_with_public_ip_delete_resource_group
register: _resourcegroup
failed_when: _resourcegroup.resourcegroups | length > 0
Original file line number Diff line number Diff line change
Expand Up @@ -5,79 +5,47 @@
name: "{{ resource_group }}"
register: __rg_info

- name: Set Azure Region for azure_load_balancer_with_public_ip Role
ansible.builtin.set_fact:
azure_load_balancer_with_public_ip_region: "{{ __rg_info.resourcegroups.0.location }}"

- name: Test Create and Delete Load Balancer
- name: Test with pre created Resource Group
block:
# Test: Create Load Balancer
- name: Create Load Balancer with Public IP
ansible.builtin.include_role:
name: cloud.azure_ops.azure_load_balancer_with_public_ip
vars:
azure_load_balancer_with_public_ip_operation: create
azure_load_balancer_with_public_ip_load_balancer:
name: "{{ load_balancer_name }}"
public_ip_name: "{{ load_balancer_public_ip_name }}"
sku: "{{ load_balancer_sku }}"

- name: Gather Load Balancer info
azure.azcollection.azure_rm_loadbalancer_info:
name: "{{ load_balancer_name }}"
resource_group: "{{ resource_group }}"
register: _loadbalancer

- name: Ensure Load Balancer was created as expected
ansible.builtin.assert:
that:
- _loadbalancer.loadbalancers | length == 1

- name: Gather Public IP info
azure.azcollection.azure_rm_publicipaddress_info:
name: "{{ load_balancer_public_ip_name }}"
resource_group: "{{ resource_group }}"
register: _publicip

- name: Ensure Public IP was created
ansible.builtin.assert:
that:
- _publicip.publicipaddresses | length == 1
- name: Test with pre created Resource Group
ansible.builtin.include_tasks: "create_and_delete_lb.yml"
vars:
test_resource_group: "{{ resource_group }}"

# Test: Delete Load Balancer
- name: Delete Load Balancer with Public IP
ansible.builtin.include_role:
name: cloud.azure_ops.azure_load_balancer_with_public_ip
- name: Test with create and delete Resource Group
block:
- name: Generate new resource group name
ansible.builtin.set_fact:
new_resource_group: "{{ resource_prefix }}-{{ resource_group }}"

- name: Validate resource group doesn't exist before test - {{ new_resource_group }}
azure.azcollection.azure_rm_resourcegroup_info:
name: "{{ new_resource_group }}"
register: _resourcegroup
failed_when: _resourcegroup.resourcegroups | length > 0

- name: Test with create and delete Resource Group
ansible.builtin.include_tasks: "create_and_delete_lb.yml"
vars:
azure_load_balancer_with_public_ip_operation: delete
azure_load_balancer_with_public_ip_load_balancer:
name: "{{ load_balancer_name }}"
public_ip_name: "{{ load_balancer_public_ip_name }}"
sku: "{{ load_balancer_sku }}"

- name: Ensure Load Balancer was deleted
azure.azcollection.azure_rm_loadbalancer_info:
name: "{{ load_balancer_name }}"
resource_group: "{{ resource_group }}"
register: _loadbalancer
failed_when: _loadbalancer.loadbalancers | length > 0

- name: Ensure Public IP was deleted
azure.azcollection.azure_rm_publicipaddress_info:
name: "{{ load_balancer_public_ip_name }}"
resource_group: "{{ resource_group }}"
register: _publicip
failed_when: _publicip.publicipaddresses | length > 0
test_resource_group: "{{ new_resource_group }}"
azure_load_balancer_with_public_ip_region: "{{ __rg_info.resourcegroups.0.location }}"
azure_load_balancer_with_public_ip_delete_resource_group: true

always:
- name: Delete Public IP
- name: Cleanup - make sure Public IP deleted, resource_group={{ resource_group }}
azure.azcollection.azure_rm_publicipaddress:
resource_group: "{{ resource_group }}"
name: "{{ load_balancer_public_ip_name }}"
state: absent

- name: Delete Load Balancer
- name: Cleanup - make sure Load Balancer deleted, resource_group={{ resource_group }}
azure.azcollection.azure_rm_loadbalancer:
resource_group: "{{ resource_group }}"
name: "{{ load_balancer_name }}"
state: absent

- name: Cleanup - make sure Resource Group deleted - {{ new_resource_group }}
azure.azcollection.azure_rm_resourcegroup:
name: "{{ new_resource_group }}"
force_delete_nonempty: true
state: absent

0 comments on commit ad11dfe

Please sign in to comment.