Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 se naučíte:
- 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 pro 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 do Azure Portalu.
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ými písmeny. V opačném případě se generování dynamického inventáře nezdaří.
az group create --resource-group ansible-inventory-test-rg --location eastusPomocí 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 aplikace role virtuálním počítačům Azure můžete použít značky jako názvy skupin v dynamickém inventáři 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.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoKlíčový bod:
- Ansible používá název a příponu inventarizačního souboru k rozpoznání, který inventarizační plug-in se má použít. Chcete-li použít plug-in dynamické inventury služby Azure, soubor musí končit na
azure_rma mít příponu buďymlneboyaml.
- Ansible používá název a příponu inventarizačního souboru k rozpoznání, který inventarizační plug-in se má použít. Chcete-li použít plug-in dynamické inventury služby Azure, soubor musí končit na
Pro dotazování virtuálních počítačů ve skupině prostředků spusťte následující příkaz:
ansible-inventory -i myazure_rm.yml --graphPř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: yesdo dynamického inventáře.
Vyhledání hostitelů virtuálních počítačů Azure
Spuštěním následujícího příkazu zobrazíte všechny 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"
},
...
}
}
},
...
}
}
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 vytvořte členství v podmíněné skupině pro Linux VM.
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"
Spusťte ansible-inventory 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
Spusťte ansible-inventory 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. Použitím skupiny s klíčem applicationRole tento tag 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ějte playbooky s vzory názvů skupin
Pomocí skupin vytvořených dynamickým inventářem můžete cílit na podskupiny.
Vytvořte playbook
win_ping.ymls následujícím 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.ymlSpusťte skript.ansible-playbook win_ping.yml -i myazure_rm.ymlPo zobrazení výzvy zadejte
usernameapasswordpro Azure VM s 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=0Dů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.ymls 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.ymlSpusťte skript.ansible-playbook ping.yml -i myazure_rm.ymlPo zobrazení výzvy zadejte
usernameapasswordpro 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čistěte zdroje
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>