Delen via


Zelfstudie: Dynamische inventarissen van uw Azure-resources configureren met Ansible

Belangrijk

Ansible 2.8 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.

De functie voor dynamische ansible-inventaris verwijdert de last van het onderhouden van statische inventarisbestanden.

In deze zelfstudie gebruikt u de invoegtoepassing voor dynamische voorraad van Azure om uw Ansible-inventaris te vullen.

In dit artikel leert u het volgende:

  • Configureer twee virtuele machines testen.
  • Tags toevoegen aan virtuele Azure-machines
  • Een dynamische voorraad genereren
  • Voorwaardelijke en sleutelgroepen gebruiken om groepslidmaatschappen te vullen
  • Playbooks uitvoeren op groepen in de dynamische inventaris

Vereisten

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

Virtuele Azure-machines maken

  1. Meld u aan bij het Azure-portaal.

  2. Open Cloud Shell.

  3. Maak een Azure-resourcegroep om de virtuele machines voor deze zelfstudie in op te slaan.

    Belangrijk

    De Azure-resourcegroep die u in deze stap u maakt, moet een naam hebben die volledig uit kleine letters bestaat. Anders mislukt het genereren van de dynamische voorraad.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. Maak twee virtuele Linux-machines in Azure met een van de volgende technieken:

    • Ansible-playbook - Het artikel, Een eenvoudige virtuele Linux-machine maken in Azure met Ansible en een eenvoudige virtuele Windows-machine maken in Azure met Ansible laat zien hoe u een virtuele machine maakt op basis van een Ansible-playbook.

    • Azure CLI: voer elk van de volgende opdrachten in de Cloud Shell uit om de twee virtuele machines te maken:

      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>
      

      Vervang het <password> wachtwoord.

Toepassingsroltags toevoegen

Tags worden gebruikt om Azure-resources te organiseren en te categoriseren. Door de Azure-VM's een toepassingsrol toe te wijzen, kunt u de tags gebruiken als groepsnamen in de dynamische azure-inventaris.

Voer de volgende opdrachten uit om de VM-tags bij te werken:

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' 

Meer informatie over strategieƫn voor Azure-tags vindt u in Uw tagstrategie definiƫren.

Een dynamische voorraad genereren

Ansible biedt een invoegtoepassing voor dynamische voorraad van Azure.

De volgende stappen helpen u bij het gebruik van de invoegtoepassing:

  1. Een dynamische inventaris maken met de naam myazure_rm.yml

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

    Sleutelpunt:

    • Ansible gebruikt de naam en extensie van het inventarisbestand om te bepalen welke inventarisinvoegtoepassing moet worden gebruikt. Als u de invoegtoepassing dynamische voorraad van Azure wilt gebruiken, moet het bestand eindigen met azure_rm en een extensie hebben van ofyamlyml.
  2. Voer de volgende opdracht uit om een query uit te voeren op de VM's in de resourcegroep:

    ansible-inventory -i myazure_rm.yml --graph
    
  3. Wanneer u de opdracht uitvoert, ziet u resultaten die vergelijkbaar zijn met de volgende uitvoer:

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

Beide VM's behoren tot de ungrouped groep. Dit is een onderliggend element van de all groep in de Ansible-inventaris.

Sleutelpunt:

  • De invoegtoepassing voor dynamische voorraad van Azure retourneert standaard wereldwijd unieke namen. Daarom kunnen de namen van de VM's extra tekens bevatten. U kunt dat gedrag uitschakelen door deze toe te voegen aan plain_host_names: yes de dynamische inventaris.

Azure VM-hostvars zoeken

Voer de volgende opdracht uit om alle 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"
                },
                ...
            }
        }
    },
    ...
    }
}

Door informatie op te halen uit Azure, wordt de dynamische inventaris ingevuld hostvars voor elke Virtuele Azure-machine. Deze hostvars zijn vervolgens om de lidmaatschappen van de VM-groep binnen de Ansible-inventaris te bepalen.

Groepslidmaatschap toewijzen met conditional_groups

Elke voorwaardelijke groep bestaat uit twee delen. De naam van de groep en de voorwaarde voor het toevoegen van een lid aan de groep.

Gebruik de eigenschap image.offer om een voorwaardelijk groepslidmaatschap te maken voor de linux-vm.

Open de myazure_rm.yml dynamische inventaris en voeg het volgende conditional_grouptoe:

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"

Voer de ansible-inventory opdracht uit met de --graph optie:

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

In de uitvoer ziet u dat de VM's niet meer aan de ungrouped groep zijn gekoppeld. In plaats daarvan wordt elke VIRTUELE machine toegewezen aan een nieuwe groep die is gemaakt door de dynamische inventaris.

Sleutelpunt:

  • Met voorwaardelijke groepen kunt u specifieke groepen binnen uw inventaris een naam geven en deze vullen met behulp van hostvars.

Groepslidmaatschap toewijzen met keyed_groups

Sleutelgroepen wijzen groepslidmaatschap op dezelfde manier toe als voorwaardelijke groepen, maar wanneer u een sleutelgroep gebruikt, wordt de groepsnaam ook dynamisch ingevuld.

Voeg de volgende keyed_group toe aan de myazure_rm.yml dynamische inventaris:

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

Voer de ansible-inventory opdracht uit met de --graph optie:

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

In de uitvoer ziet u nog twee groepen _message_broker en _web_server. Met behulp van een sleutelgroep vult de applicationRole tag de groepsnamen en groepslidmaatschappen in.

Sleutelpunt:

  • Sleutelgroepen bevatten standaard een scheidingsteken. Als u het scheidingsteken wilt verwijderen, voegt u deze toe separator: "" onder de sleuteleigenschap.

Playbooks uitvoeren met groepsnaampatronen

Gebruik de groepen die door de dynamische inventaris zijn gemaakt om subgroepen te targeten.

  1. Maak een playbook win_ping.yml met de volgende inhoud:

    ---
    - 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. Voer het win_ping.yml playbook uit.

    ansible-playbook win_ping.yml -i myazure_rm.yml
    

    Wanneer u hierom wordt gevraagd, voert u de username en password voor de Virtuele Azure Windows-machine in.

    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
    

    Belangrijk

    Als u de fout winrm or requests is not installed: No module named 'winrm'krijgt, installeert u pywinrm met de volgende opdracht: pip install "pywinrm>=0.3.0"

  3. Maak een tweede playbook met de naam ping.yml met de volgende inhoud:

    ---
    - 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. Voer het ping.yml playbook uit.

    ansible-playbook ping.yml -i myazure_rm.yml
    

    Wanneer u hierom wordt gevraagd, voert u de username en password voor de Virtuele Linux-machine van Azure in.

    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  
    

Resources opschonen

  1. Voer az group delete uit om de resourcegroep te verwijderen. Alle resources in de resourcegroep worden verwijderd.

    az group delete --name <resource_group>
    
  2. Controleer of de resourcegroep is verwijderd met behulp van az group show.

    az group show --name <resource_group>
    

Volgende stappen