Sdílet prostřednictvím


Kurz: Konfigurace dynamických inventářů vašich prostředků Azure pomocí Ansible

Důležité

K spuštění ukázkových playbooků v tomto článku se vyžaduje Ansible 2.8 (nebo novější).

Funkce dynamického inventáře Ansible eliminuje zátěž při údržbě souborů statického inventáře.

V tomto kurzu použijete modul plug-in dynamického inventáře Azure k naplnění inventáře Ansible.

V tomto článku se naučíte:

  • Nakonfigurujte dva testovací virtuální počítače.
  • Přidání značek do virtuálních počítačů Azure
  • Generování dynamického inventáře
  • Použití podmíněných skupin a skupin s klíči pro naplnění členství ve skupinách
  • Spouštění playbooků proti skupinám v rámci dynamického inventáře

Požadavky

  • Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Vytvoření virtuálních počítačů Azure

  1. Přihlaste se do Azure Portalu.

  2. Otevřete Cloud Shell.

  3. Vytvořte skupinu prostředků Azure pro uložení virtuálních počítačů pro účely tohoto kurzu.

    Důležité

    Skupina prostředků Azure, kterou vytvoříte v tomto kroku, musí mít název, který je zcela malými písmeny. V opačném případě se generování dynamického inventáře nezdaří.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. Pomocí jedné z následujících technik vytvořte dva virtuální počítače s Linuxem v Azure:

    • Playbook Ansible – Článek Vytvoření základního virtuálního počítače s Linuxem v Azure pomocí Ansible a vytvoření základního virtuálního počítače s Windows v Azure pomocí Ansible ukazuje, jak vytvořit virtuální počítač z playbooku Ansible.

    • Azure CLI – V Cloud Shellu zadejte následující příkazy pro vytvoření dvou virtuálních počítačů:

      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 Ubuntu2204 \
      --admin-username azureuser \
      --admin-password <password>
      

      <password> Nahraďte heslo.

Přidání značek rolí aplikace

Značky slouží k uspořádání a kategorizaci prostředků Azure. Přiřazením aplikace role virtuálním počítačům Azure můžete použít značky jako názvy skupin v dynamickém inventáři Azure.

Spuštěním následujících příkazů aktualizujte značky virtuálních počítačů:

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' 

Další informace o strategiích označování Azure najdete v tématu Definování strategie označování.

Generování dynamického inventáře

Ansible poskytuje modul plug-in Dynamické inventáře Azure.

Následující kroky vás provedou použitím modulu plug-in:

  1. Vytvoření dynamického inventáře s názvem myazure_rm.yml

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

    Klíčový bod:

    • Ansible používá název a příponu inventarizačního souboru k rozpoznání, který inventarizační plug-in se má použít. Chcete-li použít plug-in dynamické inventury služby Azure, soubor musí končit na azure_rm a mít příponu buď yml nebo yaml.
  2. Pro dotazování virtuálních počítačů ve skupině prostředků spusťte následující příkaz:

    ansible-inventory -i myazure_rm.yml --graph
    
  3. Při spuštění příkazu se zobrazí výsledky podobné následujícímu výstupu:

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

Oba virtuální počítače patří do ungrouped skupiny, což je podřízená skupina all v inventáři Ansible.

Klíčový bod:

  • Modul plug-in dynamického inventáře Azure ve výchozím nastavení vrací globálně jedinečné názvy. Z tohoto důvodu můžou názvy virtuálních počítačů obsahovat nadbytečné znaky. Toto chování můžete zakázat přidáním plain_host_names: yes do dynamického inventáře.

Vyhledání hostitelů virtuálních počítačů Azure

Spuštěním následujícího příkazu zobrazíte všechny 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": "0001-com-ubuntu-server-jammy",
                    "publisher": "Canonical",
                    "sku": "22_04-lts-gen2",
                    "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"
                },
                ...
            }
        }
    },
    ...
    }
}

Vyžádáním informací z Azure naplní dynamický inventář hostvars pro každý virtuální počítač Azure. Ty hostvars pak určí členství ve skupinách virtuálních počítačů v inventáři Ansible.

Přiřazení členství ve skupině pomocí conditional_groups

Každá podmíněná skupina je tvořená dvěma částmi. Název skupiny a podmínka pro přidání člena do skupiny.

Pomocí vlastnosti image.offer vytvořte členství v podmíněné skupině pro Linux VM.

myazure_rm.yml Otevřete dynamický inventář a přidejte následujícíconditional_group:

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

Spusťte ansible-inventory s možností --graph.

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

Z výstupu vidíte, že virtuální počítače už nejsou přidružené ke skupině ungrouped . Místo toho se každý virtuální počítač přiřadí nové skupině vytvořené dynamickým inventářem.

Klíčový bod:

  • Podmíněné skupiny umožňují pojmenovat konkrétní skupiny v inventáři a naplnit je pomocí hostvars.

Přiřazení členství ve skupině pomocí keyed_groups

Skupiny s klíči přiřazují členství ve skupinách stejným způsobem jako podmíněné skupiny, ale při použití skupiny s klíči je název skupiny také dynamicky vyplněný.

Do dynamického inventáře myazure_rm.yml přidejte následující keyed_group:

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

Spusťte ansible-inventory s možností --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

Ve výstupu uvidíte dvě další skupiny _message_broker a _web_server. Použitím skupiny s klíčem applicationRole tento tag naplní názvy skupin a členství ve skupinách.

Klíčový bod:

  • Ve výchozím nastavení obsahují skupiny s klíči oddělovač. Chcete-li odebrat oddělovač, přidejte separator: "" pod vlastnost klíče.

Spouštějte playbooky s vzory názvů skupin

Pomocí skupin vytvořených dynamickým inventářem můžete cílit na podskupiny.

  1. Vytvořte playbook win_ping.yml s následujícím obsahem:

    ---
    - 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. win_ping.yml Spusťte skript.

    ansible-playbook win_ping.yml -i myazure_rm.yml
    

    Po zobrazení výzvy zadejte username a password pro Azure VM s Windows.

    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
    

    Důležité

    Pokud se zobrazí chyba winrm or requests is not installed: No module named 'winrm', nainstalujte pywinrm pomocí následujícího příkazu: pip install "pywinrm>=0.3.0"

  3. Vytvořte druhý playbook s názvem ping.yml s následujícím obsahem:

    ---
    - 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. ping.yml Spusťte skript.

    ansible-playbook ping.yml -i myazure_rm.yml
    

    Po zobrazení výzvy zadejte username a password pro virtuální počítač Azure s Linuxem.

    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  
    

Vyčistěte zdroje

  1. Spuštěním příkazu az group delete odstraňte skupinu prostředků. Odstraní se všechny prostředky v rámci skupiny prostředků.

    az group delete --name <resource_group>
    
  2. Pomocí příkazu az group show ověřte, že byla skupina prostředků odstraněna.

    az group show --name <resource_group>
    

Další kroky