Udostępnij przez


Samouczek: konfigurowanie dynamicznych spisów zasobów platformy Azure przy użyciu rozwiązania Ansible

Ważne

Rozwiązanie Ansible w wersji 2.8 (lub nowszej) jest wymagane do uruchomienia przykładowych podręczników w tym artykule.

Funkcja spisu dynamicznego rozwiązania Ansible usuwa obciążenie konserwacją plików spisu statycznego.

W tym samouczku użyjesz wtyczki dynamicznej inwentaryzacji Azure, aby wypełnić inwentarz Ansible.

W tym artykule dowiesz się, jak:

  • Skonfiguruj dwie testowe maszyny wirtualne.
  • Dodawanie tagów do maszyn wirtualnych platformy Azure
  • Generowanie spisu dynamicznego
  • Używanie grup warunkowych i grup kluczowych do tworzenia członkostwa w grupach
  • Uruchamianie podręczników względem grup w ramach inwentarza dynamicznego

Wymagania wstępne

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Jednostka usługi platformy Azure: Utwórz jednostkę usługi, zanotuj następujące wartości: appId, displayName, password i tenant.

Tworzenie maszyn wirtualnych platformy Azure

  1. Zaloguj się do witryny Azure Portal.

  2. Otwórz usługę Cloud Shell.

  3. Utwórz grupę zasobów platformy Azure do przechowywania maszyn wirtualnych na potrzeby tego samouczka.

    Ważne

    Grupa zasobów platformy Azure, którą tworzysz w tym kroku, musi mieć nazwę z małych liter. W przeciwnym razie generowanie spisu dynamicznego zakończy się niepowodzeniem.

    az group create --resource-group ansible-inventory-test-rg --location eastus
    
  4. Utwórz dwie maszyny wirtualne z systemem Linux na platformie Azure przy użyciu jednej z następujących technik:

    • Podręcznik rozwiązania Ansible — artykuł Tworzenie podstawowej maszyny wirtualnej z systemem Linux na platformie Azure przy użyciu rozwiązania Ansible i Tworzenie podstawowej maszyny wirtualnej z systemem Windows na platformie Azure za pomocą rozwiązania Ansible ilustruje sposób tworzenia maszyny wirtualnej na podstawie podręcznika rozwiązania Ansible.

    • Interfejs wiersza polecenia platformy Azure — wydaj każde z następujących poleceń w usłudze Cloud Shell, aby utworzyć dwie maszyny wirtualne:

      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>
      

      Zastąp <password> swoje hasło.

Dodawanie tagów roli aplikacji

Tagi służą do organizowania i kategoryzowania zasobów platformy Azure. Przypisanie maszyn wirtualnych platformy Azure roli aplikacji umożliwia używanie tagów jako nazw grup w ramach dynamicznego spisu platformy Azure.

Uruchom następujące polecenia, aby zaktualizować tagi maszyny wirtualnej:

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' 

Dowiedz się więcej na temat strategii tagowania platformy Azure w części Definiowanie strategii tagowania.

Generowanie spisu dynamicznego

Usługa Ansible udostępnia wtyczkę dynamicznego spisu platformy Azure.

W poniższych krokach przedstawiono sposób korzystania z wtyczki:

  1. Tworzenie spisu dynamicznego o nazwie myazure_rm.yml

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

    Kluczowy punkt:

    • Usługa Ansible używa nazwy i rozszerzenia pliku spisu, aby zidentyfikować wtyczkę spisu do użycia. Aby użyć wtyczki spisu dynamicznego platformy Azure, plik musi kończyć się na azure_rm i mieć jedno z rozszerzeń yml lub yaml.
  2. Uruchom następujące polecenie, aby wykonać zapytanie dotyczące maszyn wirtualnych w grupie zasobów:

    ansible-inventory -i myazure_rm.yml --graph
    
  3. Po uruchomieniu polecenia zobaczysz wyniki podobne do następujących danych wyjściowych:

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

Obie maszyny wirtualne należą do ungrouped grupy, która jest elementem podrzędnym all grupy w inwentarzu Ansible.

Kluczowy punkt:

  • Domyślnie wtyczka magazynu dynamicznego platformy Azure zwraca globalnie unikatowe nazwy. Z tego powodu nazwy maszyn wirtualnych mogą zawierać dodatkowe znaki. To zachowanie można wyłączyć, dodając plain_host_names: yes do spisu dynamicznego.

Znajdowanie hostów maszyn wirtualnych platformy Azure

Uruchom następujące polecenie, aby wyświetlić wszystkie elementy 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"
                },
                ...
            }
        }
    },
    ...
    }
}

Pobierając informacje z Azure, spis dynamiczny wypełnia hostvars dla każdej maszyny wirtualnej Azure. Następnie hostvars należy określić członkostwo maszyn wirtualnych w grupach w inwentarzu Ansible.

Przypisywanie członkostwa w grupie przy użyciu conditional_groups

Każda grupa warunkowa składa się z dwóch części. Nazwa grupy i warunek dodawania członka do grupy.

Użyj właściwości image.offer, aby utworzyć członkostwo w grupie warunkowej dla Linux VM.

myazure_rm.yml Otwórz inwentarz dynamiczny i dodaj następujące 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"

Uruchom polecenie ansible-inventory z opcją --graph :

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

Z danych wyjściowych widać, że maszyny wirtualne nie są już skojarzone z grupą ungrouped . Zamiast tego każda maszyna wirtualna jest przypisywana do nowej grupy utworzonej przez spis dynamiczny.

Kluczowy punkt:

  • Grupy warunkowe umożliwiają nadawanie nazw określonym grupom w spisie i wypełnianie ich przy użyciu polecenia hostvars.

Przypisywanie członkostwa w grupie przy użyciu keyed_groups

Grupy kluczy przypisują członkostwo w grupach w taki sam sposób, jak grupy warunkowe, ale w przypadku używania grupy kluczy nazwa grupy jest również dynamicznie wypełniana.

Dodaj następujące keyed_group do spisu dynamicznego myazure_rm.yml :

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

Uruchom polecenie ansible-inventory z opcją --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

W danych wyjściowych zobaczysz jeszcze dwie grupy _message_broker i _web_server. Za pomocą grupy opartej na kluczach tag applicationRole wypełnia nazwy grup i członkostwa w grupach.

Kluczowy punkt:

  • Domyślnie grupy kluczowe zawierają separator. Aby usunąć separator, dodaj separator: "" pod właściwością klucz.

Uruchamianie podręczników z wzorcami nazw grup

Użyj grup utworzonych przez spis dynamiczny, aby kierować na podgrupy.

  1. Utwórz podręcznik o nazwie win_ping.yml z następującą zawartością:

    ---
    - 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 Uruchom podręcznik.

    ansible-playbook win_ping.yml -i myazure_rm.yml
    

    Po pojawieniu się monitu wprowadź username i password dla maszyny wirtualnej systemu Windows na platformie 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
    

    Ważne

    Jeśli wystąpi błąd winrm or requests is not installed: No module named 'winrm', zainstaluj narzędzie pywinrm za pomocą następującego polecenia: pip install "pywinrm>=0.3.0"

  3. Utwórz drugi playbook o nazwie ping.yml z następującą zawartością:

    ---
    - 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 Uruchom podręcznik.

    ansible-playbook ping.yml -i myazure_rm.yml
    

    Gdy zostaniesz poproszony, wprowadź wartość username i password dla maszyny wirtualnej z systemem Linux platformy Azure.

    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  
    

Uprzątnij zasoby

  1. Uruchom az group delete, aby usunąć grupę zasobów. Wszystkie zasoby w grupie zasobów są usuwane.

    az group delete --name <resource_group>
    
  2. Sprawdź, czy grupa zasobów została usunięta przy użyciu polecenia az group show.

    az group show --name <resource_group>
    

Dalsze kroki