diff --git a/roles/azure_load_balancer_with_public_ip/README.md b/roles/azure_load_balancer_with_public_ip/README.md index f8f207e..1157d82 100644 --- a/roles/azure_load_balancer_with_public_ip/README.md +++ b/roles/azure_load_balancer_with_public_ip/README.md @@ -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 ------------ diff --git a/roles/azure_load_balancer_with_public_ip/defaults/main.yml b/roles/azure_load_balancer_with_public_ip/defaults/main.yml index 134e2d9..7443c10 100644 --- a/roles/azure_load_balancer_with_public_ip/defaults/main.yml +++ b/roles/azure_load_balancer_with_public_ip/defaults/main.yml @@ -1,2 +1,3 @@ --- azure_load_balancer_with_public_ip_operation: create +azure_load_balancer_with_public_ip_delete_resource_group: false diff --git a/roles/azure_load_balancer_with_public_ip/tasks/create.yml b/roles/azure_load_balancer_with_public_ip/tasks/create.yml index 331f731..62d6f7b 100644 --- a/roles/azure_load_balancer_with_public_ip/tasks/create.yml +++ b/roles/azure_load_balancer_with_public_ip/tasks/create.yml @@ -1,4 +1,11 @@ --- +- 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 @@ -6,7 +13,6 @@ 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 diff --git a/roles/azure_load_balancer_with_public_ip/tasks/delete.yml b/roles/azure_load_balancer_with_public_ip/tasks/delete.yml index ace04c6..58f4508 100644 --- a/roles/azure_load_balancer_with_public_ip/tasks/delete.yml +++ b/roles/azure_load_balancer_with_public_ip/tasks/delete.yml @@ -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: @@ -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 diff --git a/tests/integration/targets/test_azure_load_balancer_with_public_ip/defaults/main.yml b/tests/integration/targets/test_azure_load_balancer_with_public_ip/defaults/main.yml index 9a91bdb..aec784f 100644 --- a/tests/integration/targets/test_azure_load_balancer_with_public_ip/defaults/main.yml +++ b/tests/integration/targets/test_azure_load_balancer_with_public_ip/defaults/main.yml @@ -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' \ No newline at end of file +load_balancer_sku: 'Basic' diff --git a/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/create_and_delete_lb.yml b/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/create_and_delete_lb.yml new file mode 100644 index 0000000..9bd801b --- /dev/null +++ b/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/create_and_delete_lb.yml @@ -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 diff --git a/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/main.yml b/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/main.yml index 70df880..b40bdd8 100644 --- a/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/main.yml +++ b/tests/integration/targets/test_azure_load_balancer_with_public_ip/tasks/main.yml @@ -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