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 platformy Azure, aby wypełnić spis rozwiązania Ansible.
W tym artykule omówiono sposób wykonywania następujących zadań:
- Skonfiguruj dwie testowe maszyny wirtualne.
- Dodawanie tagów do maszyn wirtualnych platformy Azure
- Generowanie spisu dynamicznego
- Używanie grup warunkowych i grup kluczy do wypełniania członkostw w grupach
- Uruchamianie podręczników względem grup w ramach spisu 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.
Zainstaluj oprogramowanie Ansible: Wykonaj jedną z następujących opcji:
- Instalowanie i konfigurowanie rozwiązania Ansible na maszynie wirtualnej z systemem Linux
- Skonfiguruj usługę Azure Cloud Shell i — jeśli nie masz dostępu do maszyny wirtualnej z systemem Linux — utwórz maszynę wirtualną za pomocą rozwiązania Ansible.
Tworzenie maszyn wirtualnych platformy Azure
Zaloguj się w witrynie Azure Portal.
Otwórz usługę Cloud Shell.
Utwórz grupę zasobów platformy Azure do przechowywania maszyn wirtualnych na potrzeby tego samouczka.
Ważne
Grupa zasobów platformy Azure utworzona w tym kroku musi mieć nazwę składającą się wyłącznie z małych liter. W przeciwnym razie generowanie spisu dynamicznego nie powiedzie się.
az group create --resource-group ansible-inventory-test-rg --location eastus
Utwórz dwie maszyny wirtualne systemu 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 — aby utworzyć dwie maszyny wirtualne, uruchom każde z następujących poleceń w usłudze Cloud Shell:
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>
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:
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ę
azure_rm
rozszerzeniemyml
lubyaml
.
- 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ę
Uruchom następujące polecenie, aby wykonać zapytanie dotyczące maszyn wirtualnych w grupie zasobów:
ansible-inventory -i myazure_rm.yml --graph
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 spisie rozwiązania 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
je 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"
},
...
}
}
},
...
}
}
Ściągając informacje z platformy Azure, spis dynamiczny wypełnia hostvars
wartość dla każdej maszyny wirtualnej platformy Azure. Następnie hostvars
należy określić członkostwo w grupie maszyn wirtualnych w spisie rozwiązania 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 maszyny wirtualnej z systemem linux.
myazure_rm.yml
Otwórz spis dynamiczny i dodaj następujący conditional_group
kod:
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 applicationRole
kluczy tag wypełnia nazwy grup i członkostwa w grupach.
Kluczowy punkt:
- Domyślnie grupy kluczy zawierają separator. Aby usunąć separator, dodaj
separator: ""
element pod właściwością klucza.
Uruchamianie podręczników z wzorcami nazw grup
Użyj grup utworzonych przez spis dynamiczny do docelowych podgrup.
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:
win_ping.yml
Uruchom podręcznik.ansible-playbook win_ping.yml -i myazure_rm.yml
Po wyświetleniu monitu
username
wprowadź wartość ipassword
dla maszyny wirtualnej platformy Azure z systemem 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
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"
Utwórz drugi podręcznik o nazwie o
ping.yml
następującej 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:
ping.yml
Uruchom podręcznik.ansible-playbook ping.yml -i myazure_rm.yml
Po wyświetleniu monitu wprowadź wartość
username
ipassword
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
Czyszczenie zasobów
Uruchom polecenie az group delete , aby usunąć grupę zasobów. Wszystkie zasoby w grupie zasobów są usuwane.
az group delete --name <resource_group>
Sprawdź, czy grupa zasobów została usunięta przy użyciu polecenia az group show.
az group show --name <resource_group>