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ší).

Upozornění

Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu Konec životnosti (EOL). Zvažte své použití a odpovídajícím způsobem naplánujte. Další informace najdete v doprovodných materiálech CentOS End Of Life.

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é inventáře Azure k naplnění inventáře Ansible.

V tomto článku získáte informace o těchto tématech:

  • 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 k 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 k portálu Azure.

  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é. 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 CentOS85Gen2 \
      --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 virtuálních počítačů Azure roli aplikace můžete použít značky jako názvy skupin v rámci dynamického inventáře 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 identifikaci modulu plug-in inventáře, který se má použít. Pokud chcete použít modul plug-in Dynamické inventáře Azure, musí soubor končit azure_rm a mít příponu nebo ymlyaml.
  2. Spuštěním následujícího příkazu zadejte dotaz na virtuální počítače v rámci skupiny prostředků:

    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. To je důvod pro nadbytečné znaky za názvy virtuálních počítačů. Můžete to 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 zobrazte všechny hostvarstyto položky:

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"
                },
                ...
            }
        }
    },
    ...
    }
}

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 můžete vytvořit členství v podmíněné skupině pro virtuální počítač s Linuxem.

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: "'CentOS' in image.offer"
  windows: "'WindowsServer' in image.offer"

ansible-inventory Spusťte možnost 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 byl každý přiřazen k 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: "'CentOS' in image.offer"
  windows: "'WindowsServer' in image.offer"
keyed_groups:
 - key: tags.applicationRole

ansible-inventory Spusťte možnost 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. Pomocí skupiny s klíči applicationRole naplní značka názvy skupin a členství ve skupinách.

Klíčový bod:

  • Ve výchozím nastavení obsahují skupiny s klíči oddělovač. Odebrání oddělovače přidejte separator: "" pod vlastnost klíče.

Spouštění playbooků se vzory názvů skupin

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

  1. Vytvořte playbook s následujícím win_ping.yml 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 playbook.

    ansible-playbook win_ping.yml -i myazure_rm.yml
    

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

    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 playbook.

    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čištění prostředků

  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