Tutorial: Mengonfigurasi inventaris dinamis sumber daya Azure Anda menggunakan Ansible

Penting

Ansible 2.8 (atau yang lebih baru) diperlukan untuk menjalankan sampel playbook dalam artikel ini.

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

Fitur inventaris dinamis Ansible menghilangkan beban pemeliharaan file inventaris statis.

Dalam tutorial ini, Anda akan menggunakan plug-in inventaris dinamis Azure untuk mengisi inventaris Ansible Anda.

Dalam artikel ini, Anda akan mempelajari cara:

  • Mengonfigurasi dua mesin virtual uji.
  • Menambahkan tag ke mesin virtual Azure
  • Menghasilkan inventaris dinamis
  • Menggunakan grup bersyarat dan berkunci untuk mengisi keanggotaan grup
  • Menjalankan playbook pada grup dalam inventaris dinamis

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
  • Perwakilan layanan Azure: Buat perwakilan layanan, catat nilai-nilai berikut: appId, displayName, kata sandi, dan penyewa.

Membuat VM Azure

  1. Masuk ke portal Azure.

  2. Buka Cloud Shell.

  3. Buat grup sumber daya Azure untuk membuat komputer virtual untuk tutorial ini.

    Penting

    Grup sumber daya Azure yang Anda buat dalam langkah ini harus memiliki nama yang semuanya huruf kecil. Jika tidak, pembuatan inventaris dinamis akan gagal.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. Buat dua mesin virtual Linux di Azure menggunakan salah satu teknik berikut:

    • Ansible playbook - Artikel, Buat mesin virtual Linux dasar di Azure dengan Ansible dan Buat mesin virtual Windows dasar di Azure dengan Ansible menjelaskan cara membuat mesin virtual dari playbook Ansible.

    • Azure CLI - Menerbitkan masing-masing perintah berikut di Cloud Shell untuk membuat dua mesin virtual:

      az vm create \
      --resource-group ansible-inventory-test-rg \
      --name win-vm \
      --image MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest \
      --admin-username azureuser \
      --admin-password <password>
      
      az vm create \
      --resource-group ansible-inventory-test-rg \
      --name linux-vm \
      --image CentOS85Gen2 \
      --admin-username azureuser \
      --admin-password <password>
      

      Ganti kata sandi Anda <password>.

Menambahkan tag peran aplikasi

Tag digunakan untuk mengatur dan mengategorikan sumber daya Azure. Menetapkan peran aplikasi Azure VM memungkinkan Anda menggunakan tag sebagai nama grup dalam inventaris dinamis Azure.

Jalankan perintah berikut untuk memperbarui tag VM:

az vm update \
--resource-group ansible-inventory-test-rg \
--name linux-vm \
--set tags.applicationRole='message-broker' 

az vm update \
--resource-group ansible-inventory-test-rg \
--name win-vm \
--set tags.applicationRole='web-server' 

Pelajari lebih lanjut strategi penandaan Azure di Tentukan strategi penandaan Anda.

Menghasilkan inventaris dinamis

Ansible menyediakan plug-in inventaris dinamis Azure.

Langkah-langkah berikut memandu Anda menggunakan plug-in:

  1. Membuat inventaris dinamis bernama myazure_rm.yml

    plugin: azure_rm
    include_vm_resource_groups:
      - ansible-inventory-test-rg
    auth_source: auto
    

    Poin kunci:

    • Ansible menggunakan nama dan ekstensi file inventaris untuk mengidentifikasi plug-in inventaris mana yang akan digunakan. Untuk menggunakan plug-in inventaris dinamis Azure, file harus diakhiri dengan azure_rm dan memiliki ekstensi yml atau yaml.
  2. Jalankan perintah berikut untuk mengkueri VM dalam grup sumber daya:

    ansible-inventory -i myazure_rm.yml --graph
    
  3. Saat menjalankan perintah tersebut, Anda melihat hasil yang mirip dengan output berikut:

    @all:
      |--@ungrouped:
      |  |--linux-vm_cdb4
      |  |--win-vm_3211
    

Kedua VM termasuk dalam grup ungrouped, yang merupakan anak dari grup all dalam inventaris Ansible.

Poin kunci:

  • Secara default plug-in inventaris dinamis Azure mengembalikan nama unik secara global. Itulah alasan untuk karakter tambahan setelah nama VM. Anda dapat menonaktifkannya dengan menambahkan plain_host_names: yes ke inventaris dinamis.

Menemukan Azure VM hostvars

Jalankan perintah berikut untuk melihat semua hostvars:

ansible-inventory -i myazure_rm.yml --list
{
    "_meta": {
        "hostvars": {
            "linux-vm_cdb4": {
                "ansible_host": "52.188.118.79",
                "availability_zone": null,
                "computer_name": "linux-vm",
                "default_inventory_hostname": "linux-vm_cdb4",
                "id": "/subscriptions/<subscriptionid>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/linux-vm",
                "image": {
                    "offer": "CentOS",
                    "publisher": "OpenLogic",
                    "sku": "7.7",
                    "version": "latest"
                },
                ...,
                "tags": {
                    "applicationRole": "message-broker"
                },
                ...
            },
            "win-vm_3211": {
                "ansible_host": "52.188.112.110",
                "availability_zone": null,
                "computer_name": "win-vm",
                "default_inventory_hostname": "win-vm_3211",
                "id": "/subscriptions/<subscriptionid>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/win-vm",
                "image": {
                    "offer": "WindowsServer",
                    "publisher": "MicrosoftWindowsServer",
                    "sku": "2019-Datacenter",
                    "version": "latest"
                },
                ...
                "tags": {
                    "applicationRole": "web-server"
                },
                ...
            }
        }
    },
    ...
    }
}

Dengan menarik informasi dari Azure, inventaris dinamis mengisi hostvars untuk setiap VM Azure. Mereka hostvars kemudian menentukan keanggotaan grup VM dalam inventaris Ansible.

Tetapkan keanggotaan grup dengan conditional_groups

Setiap kelompok bersyarat terdiri dari dua bagian. Nama grup dan syarat untuk menambahkan anggota ke grup.

Gunakan properti image.offer untuk membuat keanggotaan grup bersyarat untuk linux-vm.

Buka myazure_rm.ymlinventaris dinamis dan tambahkan conditional_group berikut:

plugin: azure_rm
include_vm_resource_groups:
  - ansible-inventory-test-rg
auth_source: auto
conditional_groups:
  linux: "'CentOS' in image.offer"
  windows: "'WindowsServer' in image.offer"

Jalankan ansible-inventorydengan opsi --graph:

ansible-inventory -i myazure_rm.yml --graph
@all:
  |--@linux:
  |  |--linux-vm_cdb4
  |--@ungrouped:
  |--@windows:
  |  |--win-vm_3211

Dari output itu, Anda dapat melihat VM tidak lagi terkait dengan grup ungrouped. Sebagai gantinya, masing-masing telah ditetapkan ke grup baru yang dibuat oleh inventaris dinamis.

Poin kunci:

  • Grup bersyarat memungkinkan Anda memberi nama grup tertentu dalam inventaris Anda dan mengisinya menggunakan hostvars.

Tetapkan keanggotaan grup dengan keyed_groups

Grup kunci menetapkan keanggotaan grup dengan cara yang sama seperti grup bersyarat, tetapi saat menggunakan grup berkunci, nama grup juga diisi secara dinamis.

Tambahkan keyed_group berikut ke myazure_rm.yml inventaris dinamis:

plugin: azure_rm
include_vm_resource_groups:
  - ansible-inventory-test-rg
auth_source: auto
conditional_groups:
  linux: "'CentOS' in image.offer"
  windows: "'WindowsServer' in image.offer"
keyed_groups:
 - key: tags.applicationRole

Jalankan ansible-inventorydengan opsi --graph:

ansible-inventory -i myazure_rm.yml --graph
@all:
  |--@_message_broker:
  |  |--linux-vm_cdb4
  |--@_web_server:
  |  |--win-vm_3211
  |--@linux:
  |  |--linux-vm_cdb4
  |--@ungrouped:
  |--@windows:
  |  |--win-vm_3211

Dari output itu, Anda akan melihat dua grup lainnya _message_broker dan _web_server. Dengan menggunakan grup berkunci, tag applicationRole mengisi nama grup dan keanggotaan grup.

Poin kunci:

  • Secara default, grup berkunci memiliki pemisah. Untuk menghapus pemisah tambahkan separator: "" di bawah properti kunci.

Menjalankan playbook dengan pola nama grup

Gunakan grup yang dibuat oleh inventaris dinamis untuk menargetkan subkelompok.

  1. Buat playbook bernama win_ping.yml dengan konten berikut:

    ---
    - hosts: windows
      gather_facts: false
    
      vars_prompt:
        - name: username
          prompt: "Enter local username"
          private: false
        - name: password
          prompt: "Enter password"
    
      vars:
        ansible_user: "{{ username }}"
        ansible_password: "{{ password }}"
        ansible_connection: winrm
        ansible_winrm_transport: ntlm
        ansible_winrm_server_cert_validation: ignore
    
      tasks:
        - name: run win_ping
          win_ping:
    
  2. Jalankan playbook win_ping.yml.

    ansible-playbook win_ping.yml -i myazure_rm.yml
    

    Saat diminta, masukkan username dan password untuk VM Windows Azure.

    Enter local username: azureuser
    Enter password:
    
    PLAY [windows] **************************************************************************************************************************************
    
    TASK [run win_ping] *********************************************************************************************************************************
    ok: [win-vm_3211]
    
    PLAY RECAP ******************************************************************************************************************************************
    win-vm_3211                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    

    Penting

    Jika Anda mendapatkan kesalahan winrm or requests is not installed: No module named 'winrm', instal pywinrm dengan perintah berikut: pip install "pywinrm>=0.3.0"

  3. Buat playbook kedua bernama ping.yml dengan konten berikut:

    ---
    - hosts: all
      gather_facts: false
    
      vars_prompt:
        - name: username
          prompt: "Enter ssh user"
        - name: password
          prompt: "Enter password for ssh user"
    
      vars:
        ansible_user: "{{ username }}"
        ansible_password: "{{ password }}"
        ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
    
      tasks:
        - name: run ping
          ping:
    
  4. Jalankan playbook ping.yml.

    ansible-playbook ping.yml -i myazure_rm.yml
    

    Saat diminta, masukkan username dan password untuk VM Azure Linux.

    Enter ssh username: azureuser
    Enter password for ssh user:
    
    PLAY [linux] *******************************************************************************************************
    
    TASK [run ping] ****************************************************************************************************
    ok: [linux-vm_cdb4]
    
    PLAY RECAP *********************************************************************************************************
    linux-vm_cdb4              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
    

Membersihkan sumber daya

  1. Jalankan az group delete untuk menghapus grup sumber daya. Semua sumber daya dalam grup sumber daya akan dihapus.

    az group delete --name <resource_group>
    
  2. Pastikan grup sumber daya telah dihapus dengan menggunakan az group show.

    az group show --name <resource_group>
    

Langkah berikutnya