Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
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ę do witryny 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, 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 eastusUtwó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:
Tworzenie spisu dynamicznego o nazwie
myazure_rm.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoKluczowy 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_rmi mieć jedno z rozszerzeńymllubyaml.
- 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
Uruchom następujące polecenie, aby wykonać zapytanie dotyczące maszyn wirtualnych w grupie zasobów:
ansible-inventory -i myazure_rm.yml --graphPo 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: yesdo 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.
Utwórz podręcznik o nazwie
win_ping.ymlz 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.ymlUruchom podręcznik.ansible-playbook win_ping.yml -i myazure_rm.ymlPo pojawieniu się monitu wprowadź
usernameipassworddla 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=0Waż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 playbook o nazwie
ping.ymlz 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:ping.ymlUruchom podręcznik.ansible-playbook ping.yml -i myazure_rm.ymlGdy zostaniesz poproszony, wprowadź wartość
usernameipassworddla 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
Uruchom 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>