Självstudie: Konfigurera dynamiska inventeringar av dina Azure-resurser med Ansible

Viktigt!

Ansible 2.8 (eller senare) krävs för att köra exempelspelböckerna i den här artikeln.

Varning

Den här artikeln refererar till CentOS, en Linux-distribution som närmar sig EOL-status (End Of Life). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.

Funktionen Dynamiskt lager i Ansible tar bort belastningen för att underhålla statiska inventeringsfiler.

I den här självstudien använder du Azures plugin-program för dynamisk inventering för att fylla i ditt Ansible-lager.

I den här artikeln kan du se hur du:

  • Konfigurera två virtuella testdatorer.
  • Lägga till taggar till virtuella Azure-datorer
  • Generera ett dynamiskt lager
  • Använda villkorliga och nyckelade grupper för att fylla i gruppmedlemskap
  • Köra spelböcker mot grupper i det dynamiska lagret

Förutsättningar

  • Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
  • Azure-tjänstens huvudnamn: Skapa ett huvudnamn för tjänsten och anteckna följande värden: appId, displayName, lösenord och klientorganisation.

Skapa virtuella Azure-datorer

  1. Logga in på Azure-portalen.

  2. Öppna Cloud Shell.

  3. Skapa en Azure-resursgrupp för att lagra de virtuella datorerna för den här självstudien.

    Viktigt!

    Den Azure-resursgrupp som du skapar i det här steget måste ha ett namn som helt består av gemener. Annars misslyckas genereringen av det dynamiska lagret.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. Skapa två virtuella Linux-datorer på Azure med någon av följande metoder:

    • Ansible-spelbok – Artikeln Skapa en grundläggande virtuell Linux-dator i Azure med Ansible och Skapa en grundläggande virtuell Windows-dator i Azure med Ansible visar hur du skapar en virtuell dator från en Ansible-spelbok.

    • Azure CLI – Ange vart och ett av följande kommandon i Cloud Shell för att skapa de två virtuella datorerna:

      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> Ersätt lösenordet.

Lägga till programrolltaggar

Taggar används för att organisera och kategorisera Azure-resurser. Om du tilldelar de virtuella Azure-datorerna en programroll kan du använda taggarna som gruppnamn i det dynamiska Azure-lagret.

Kör följande kommandon för att uppdatera taggarna för virtuella datorer:

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' 

Läs mer om Azure-taggningsstrategier i Definiera din taggningsstrategi.

Generera ett dynamiskt lager

Ansible tillhandahåller ett Azure-plugin-program för dynamisk inventering.

Följande steg beskriver hur du använder plugin-programmet:

  1. Skapa ett dynamiskt lager med namnet myazure_rm.yml

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

    Nyckelpunkt:

    • Ansible använder inventeringsfilens namn och tillägg för att identifiera vilket plugin-program för inventering som ska användas. Om du vill använda azure dynamic inventory-plugin-programmet måste filen sluta med azure_rm och ha ett tillägg av antingen yml eller yaml.
  2. Kör följande kommando för att fråga de virtuella datorerna i resursgruppen:

    ansible-inventory -i myazure_rm.yml --graph
    
  3. När du kör kommandot visas resultat som liknar följande utdata:

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

Båda de virtuella datorerna ungrouped tillhör gruppen, som är underordnad gruppen all i Ansible-inventeringen.

Nyckelpunkt:

  • Som standard returnerar plugin-programmet för dynamiskt lager i Azure globalt unika namn. Det är orsaken till de extra tecknen efter namnen på den virtuella datorn. Du kan inaktivera det genom att lägga plain_host_names: yes till det dynamiska lagret.

Hitta värdservrar för virtuella Azure-datorer

Kör följande kommando för att visa alla 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"
                },
                ...
            }
        }
    },
    ...
    }
}

Genom att hämta information från Azure fylls det dynamiska lagret i hostvars för varje virtuell Azure-dator. Dessa hostvars är sedan för att fastställa medlemskap för den virtuella datorns grupp i Ansible-inventeringen.

Tilldela gruppmedlemskap med conditional_groups

Varje villkorsstyrd grupp består av två delar. Namnet på gruppen och villkoret för att lägga till en medlem i gruppen.

Använd egenskapen image.offer för att skapa villkorsstyrd gruppmedlemskap för linux-vm.

Öppna det myazure_rm.yml dynamiska lagret och lägg till följande 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 Kör med alternativet--graph:

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

Från utdata kan du se att de virtuella datorerna inte längre är associerade med ungrouped gruppen. I stället har var och en tilldelats en ny grupp som skapats av det dynamiska lagret.

Nyckelpunkt:

  • Med villkorsgrupper kan du namnge specifika grupper i lagret och fylla i dem med hjälp av hostvars.

Tilldela gruppmedlemskap med keyed_groups

Nyckelgrupper tilldelar gruppmedlemskap på samma sätt som villkorsgrupper, men när du använder en nyckelgrupp fylls även gruppnamnet dynamiskt i.

Lägg till följande keyed_group i det myazure_rm.yml dynamiska lagret:

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 Kör med alternativet--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

Från utdata ser du ytterligare två grupper _message_broker och _web_server. Med hjälp av en nyckelgrupp fyller taggen applicationRole gruppnamn och gruppmedlemskap.

Nyckelpunkt:

  • Nyckelgrupper innehåller som standard en avgränsare. Ta bort avgränsaren genom att lägga till separator: "" under nyckelegenskapen.

Köra spelböcker med gruppnamnsmönster

Använd de grupper som skapats av det dynamiska lagret för att rikta in sig på undergrupper.

  1. Skapa en spelbok med win_ping.yml namnet med följande innehåll:

    ---
    - 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 Kör spelboken.

    ansible-playbook win_ping.yml -i myazure_rm.yml
    

    När du uppmanas till det username anger du och password för den virtuella Azure Windows-datorn.

    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
    

    Viktigt!

    Om du får felet winrm or requests is not installed: No module named 'winrm'installerar du pywinrm med följande kommando: pip install "pywinrm>=0.3.0"

  3. Skapa en andra spelbok med namnet ping.yml med följande innehåll:

    ---
    - 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 Kör spelboken.

    ansible-playbook ping.yml -i myazure_rm.yml
    

    När du uppmanas till det username anger du och password för den virtuella Azure Linux-datorn.

    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  
    

Rensa resurser

  1. Kör az group delete för att ta bort resursgruppen. Alla resurser i resursgruppen tas bort.

    az group delete --name <resource_group>
    
  2. Kontrollera att resursgruppen har tagits bort med hjälp av az group show.

    az group show --name <resource_group>
    

Nästa steg