てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible/Azure] 含まれるリソースまるごとリソースグループを削除する

はじめに

azure.azcollection.azure_rm_resourcegroupモジュールは、Azureのリソースグループを作成したり削除したりできます。

削除したいときは、state: absent を指定しればよいですが、リソースグループ内にリソースが含まれていると削除できません。

どうやろうかなと思っていたのですが、force_delete_nonempty: true を併用すればいいようでした。

取り扱いにはとても注意が必要ですが、検証時などで作ったり削除したりするときは便利です。

かんたんなサンプルで紹介します。

  • 動作検証環境
    • ansible 5.1.0 (ansible-core 2.12.1)
    • azure.azcollection collection 1.10.0

サンプルPlaybook

以下の通り、state: absentforce_delete_nonempty: true を併用します。

---
- hosts: localhost
  connection: local
  gather_facts: false

  tasks:
    - name: delete resource group (with included resources)
      azure.azcollection.azure_rm_resourcegroup:
        name: ansible_azure
        state: absent
        force_delete_nonempty: true

おためし

削除前

ansible_azure というリソースグループを対象とします。削除前はいくつかのリソースが含まれている状態です。

$ az resource list -g ansible_azure -o yaml  
- changedTime: '2021-12-30T07:28:38.834843+00:00'
  # ...(略)...
  resourceGroup: ANSIBLE_AZURE
  # ...(略)...
  type: Microsoft.Compute/disks
- changedTime: '2021-12-30T07:30:38.798837+00:00'
  #. ..(略)...
  resourceGroup: ansible_azure
  type: Microsoft.Compute/virtualMachines
- changedTime: '2021-12-30T07:28:05.527039+00:00'
  # ...(略)...
  resourceGroup: ansible_azure
  type: Microsoft.Network/networkInterfaces
- changedTime: '2021-12-30T07:29:51.633415+00:00'
  # ...(略)...
  resourceGroup: ansible_azure
  # ...(略)...
  type: Microsoft.Network/networkSecurityGroups
- changedTime: '2021-12-30T07:30:01.912170+00:00'
  resourceGroup: ansible_azure
  # ...(略)...
  type: Microsoft.Network/publicIPAddresses
- changedTime: '2021-12-30T07:29:45.735572+00:00'
  # ...(略)...
  resourceGroup: ansible_azure
  # ...(略)...
  type: Microsoft.Network/virtualNetworks

削除実行

先程のPlaybookを実行します。

$ ansible-playbook -i localhost, delrg.yml 

PLAY [localhost] ***********************************************************************************

TASK [delete resource group (with included resources)] *********************************************
changed: [localhost]

PLAY RECAP *****************************************************************************************
localhost   : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

数分かかりました。

削除後

リソースグループごと削除されました。

$ az resource list -g ansible_azure -o yaml         
(ResourceGroupNotFound) Resource group 'ansible_azure' could not be found.
Code: ResourceGroupNotFound
Message: Resource group 'ansible_azure' could not be found.