Kurz: Konfigurace dynamických inventářů vašich prostředků Azure pomocí Ansible
Důležité
K spuštění ukázkových playbooků v tomto článku se vyžaduje Ansible 2.8 (nebo novější).
Funkce dynamického inventáře Ansible eliminuje zátěž při údržbě souborů statického inventáře.
V tomto kurzu použijete modul plug-in dynamického inventáře Azure k naplnění inventáře Ansible.
V tomto článku získáte informace o těchto tématech:
- Nakonfigurujte dva testovací virtuální počítače.
- Přidání značek do virtuálních počítačů Azure
- Generování dynamického inventáře
- Použití podmíněných skupin a skupin s klíči k naplnění členství ve skupinách
- Spouštění playbooků proti skupinám v rámci dynamického inventáře
Požadavky
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
- Instanční objekt Azure: Vytvořte instanční objekt a poznamenejte si následující hodnoty: appId, displayName, password a tenant.
Nainstalujte Ansible: Proveďte jednu z následujících možností:
- Instalace a konfigurace Ansible na virtuálním počítači s Linuxem
- Nakonfigurujte Azure Cloud Shell a – pokud nemáte přístup k virtuálnímu počítači s Linuxem – vytvořte virtuální počítač pomocí Ansible.
Vytvoření virtuálních počítačů Azure
Přihlaste se k portálu Azure.
Otevřete Cloud Shell.
Vytvořte skupinu prostředků Azure pro uložení virtuálních počítačů pro účely tohoto kurzu.
Důležité
Skupina prostředků Azure, kterou vytvoříte v tomto kroku, musí mít název, který je zcela malé. V opačném případě se generování dynamického inventáře nezdaří.
az group create --resource-group ansible-inventory-test-rg --location eastus
Pomocí jedné z následujících technik vytvořte dva virtuální počítače s Linuxem v Azure:
Playbook Ansible – Článek Vytvoření základního virtuálního počítače s Linuxem v Azure pomocí Ansible a vytvoření základního virtuálního počítače s Windows v Azure pomocí Ansible ukazuje, jak vytvořit virtuální počítač z playbooku Ansible .
Azure CLI – V Cloud Shellu zadejte následující příkazy pro vytvoření dvou virtuálních počítačů:
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>
<password>
Nahraďte heslo.
Přidání značek rolí aplikace
Značky slouží k uspořádání a kategorizaci prostředků Azure. Přiřazením virtuálních počítačů Azure roli aplikace můžete použít značky jako názvy skupin v rámci dynamického inventáře Azure.
Spuštěním následujících příkazů aktualizujte značky virtuálních počítačů:
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'
Další informace o strategiích označování Azure najdete v tématu Definování strategie označování.
Generování dynamického inventáře
Ansible poskytuje modul plug-in Dynamické inventáře Azure.
Následující kroky vás provedou použitím modulu plug-in:
Vytvoření dynamického inventáře s názvem
myazure_rm.yml
plugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: auto
Klíčový bod:
- Ansible používá název a příponu inventarizačního souboru k identifikaci modulu plug-in inventáře, který se má použít. Pokud chcete použít modul plug-in Dynamické inventáře Azure, musí soubor končit
azure_rm
a mít příponu neboyml
yaml
.
- Ansible používá název a příponu inventarizačního souboru k identifikaci modulu plug-in inventáře, který se má použít. Pokud chcete použít modul plug-in Dynamické inventáře Azure, musí soubor končit
Spuštěním následujícího příkazu zadejte dotaz na virtuální počítače v rámci skupiny prostředků:
ansible-inventory -i myazure_rm.yml --graph
Při spuštění příkazu se zobrazí výsledky podobné následujícímu výstupu:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Oba virtuální počítače patří do ungrouped
skupiny, což je podřízená skupina all
v inventáři Ansible.
Klíčový bod:
- Modul plug-in dynamického inventáře Azure ve výchozím nastavení vrací globálně jedinečné názvy. Z tohoto důvodu můžou názvy virtuálních počítačů obsahovat nadbytečné znaky. Toto chování můžete zakázat přidáním
plain_host_names: yes
do dynamického inventáře.
Vyhledání hostitelů virtuálních počítačů Azure
Spuštěním následujícího příkazu zobrazte všechny hostvars
tyto položky:
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"
},
...
}
}
},
...
}
}
Vyžádáním informací z Azure naplní dynamický inventář hostvars
pro každý virtuální počítač Azure. Ty hostvars
pak určí členství ve skupinách virtuálních počítačů v inventáři Ansible.
Přiřazení členství ve skupině pomocí conditional_groups
Každá podmíněná skupina je tvořená dvěma částmi. Název skupiny a podmínka pro přidání člena do skupiny.
Pomocí vlastnosti image.offer
můžete vytvořit členství v podmíněné skupině pro virtuální počítač s Linuxem.
myazure_rm.yml
Otevřete dynamický inventář a přidejte následující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"
ansible-inventory
Spusťte možnost s možností--graph
:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Z výstupu vidíte, že virtuální počítače už nejsou přidružené ke skupině ungrouped
. Místo toho se každý virtuální počítač přiřadí nové skupině vytvořené dynamickým inventářem.
Klíčový bod:
- Podmíněné skupiny umožňují pojmenovat konkrétní skupiny v inventáři a naplnit je pomocí
hostvars
.
Přiřazení členství ve skupině pomocí keyed_groups
Skupiny s klíči přiřazují členství ve skupinách stejným způsobem jako podmíněné skupiny, ale při použití skupiny s klíči je název skupiny také dynamicky vyplněný.
Do dynamického inventáře myazure_rm.yml
přidejte následující keyed_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"
keyed_groups:
- key: tags.applicationRole
ansible-inventory
Spusťte možnost s možností--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
Ve výstupu uvidíte dvě další skupiny _message_broker
a _web_server
. Pomocí skupiny applicationRole
s klíči značka naplní názvy skupin a členství ve skupinách.
Klíčový bod:
- Ve výchozím nastavení obsahují skupiny s klíči oddělovač. Chcete-li odebrat oddělovač, přidejte
separator: ""
pod vlastnost klíče.
Spouštění playbooků se vzory názvů skupin
Pomocí skupin vytvořených dynamickým inventářem můžete cílit na podskupiny.
Vytvořte playbook s následujícím
win_ping.yml
obsahem:--- - 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
Spusťte playbook.ansible-playbook win_ping.yml -i myazure_rm.yml
Po zobrazení výzvy zadejte
username
virtuální počítač Azure s Windows apassword
zadejte ho.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
Důležité
Pokud se zobrazí chyba
winrm or requests is not installed: No module named 'winrm'
, nainstalujte pywinrm pomocí následujícího příkazu:pip install "pywinrm>=0.3.0"
Vytvořte druhý playbook s názvem
ping.yml
s následujícím obsahem:--- - 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
Spusťte playbook.ansible-playbook ping.yml -i myazure_rm.yml
Po zobrazení výzvy zadejte
username
apassword
pro virtuální počítač Azure s Linuxem.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
Vyčištění prostředků
Spuštěním příkazu az group delete odstraňte skupinu prostředků. Odstraní se všechny prostředky v rámci skupiny prostředků.
az group delete --name <resource_group>
Pomocí příkazu az group show ověřte, že byla skupina prostředků odstraněna.
az group show --name <resource_group>