Självstudie: Konfigurera dynamiska inventeringar av dina Azure-resurser med Ansible
Viktigt!
Ansible 2.8 (eller senare) krävs för att köra exempelspelböckerna i den här artikeln.
Funktionen Dynamiskt lager i Ansible tar bort belastningen för att underhålla statiska inventeringsfiler.
I den här självstudien använder du Azures plugin-program för dynamisk inventering för att fylla i ditt Ansible-lager.
I den här artikeln kan du se hur du:
- Konfigurera två virtuella testdatorer.
- Lägga till taggar till virtuella Azure-datorer
- Generera ett dynamiskt lager
- Använda villkorliga och nyckelade grupper för att fylla i gruppmedlemskap
- Köra spelböcker mot grupper i det dynamiska lagret
Förutsättningar
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
- Azure-tjänstens huvudnamn: Skapa ett huvudnamn för tjänsten och anteckna följande värden: appId, displayName, lösenord och klientorganisation.
Installera Ansible: Gör något av följande alternativ:
- Installera och konfigurera Ansible på en virtuell Linux-dator
- Konfigurera Azure Cloud Shell och – om du inte har åtkomst till en virtuell Linux-dator – skapa en virtuell dator med Ansible.
Skapa virtuella Azure-datorer
Logga in på Azure-portalen.
Öppna Cloud Shell.
Skapa en Azure-resursgrupp för att lagra de virtuella datorerna för den här självstudien.
Viktigt!
Den Azure-resursgrupp som du skapar i det här steget måste ha ett namn som helt består av gemener. Annars misslyckas genereringen av det dynamiska lagret.
az group create --resource-group ansible-inventory-test-rg --location eastus
Skapa två virtuella Linux-datorer på Azure med någon av följande metoder:
Ansible-spelbok – Artikeln Skapa en grundläggande virtuell Linux-dator i Azure med Ansible och Skapa en grundläggande virtuell Windows-dator i Azure med Ansible visar hur du skapar en virtuell dator från en Ansible-spelbok.
Azure CLI – Ange vart och ett av följande kommandon i Cloud Shell för att skapa de två virtuella datorerna:
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>
Ersätt lösenordet.
Lägga till programrolltaggar
Taggar används för att organisera och kategorisera Azure-resurser. Om du tilldelar de virtuella Azure-datorerna en programroll kan du använda taggarna som gruppnamn i det dynamiska Azure-lagret.
Kör följande kommandon för att uppdatera taggarna för virtuella datorer:
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'
Läs mer om Azure-taggningsstrategier i Definiera din taggningsstrategi.
Generera ett dynamiskt lager
Ansible tillhandahåller ett Azure-plugin-program för dynamisk inventering.
Följande steg beskriver hur du använder plugin-programmet:
Skapa ett dynamiskt lager med namnet
myazure_rm.yml
plugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: auto
Nyckelpunkt:
- Ansible använder inventeringsfilens namn och tillägg för att identifiera vilket plugin-program för inventering som ska användas. Om du vill använda azure dynamic inventory-plugin-programmet måste filen sluta med
azure_rm
och ha ett tillägg av antingenyml
elleryaml
.
- Ansible använder inventeringsfilens namn och tillägg för att identifiera vilket plugin-program för inventering som ska användas. Om du vill använda azure dynamic inventory-plugin-programmet måste filen sluta med
Kör följande kommando för att fråga de virtuella datorerna i resursgruppen:
ansible-inventory -i myazure_rm.yml --graph
När du kör kommandot visas resultat som liknar följande utdata:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Båda de virtuella datorerna ungrouped
tillhör gruppen, som är underordnad gruppen all
i Ansible-inventeringen.
Nyckelpunkt:
- Som standard returnerar plugin-programmet för dynamiskt lager i Azure globalt unika namn. Därför kan de virtuella datornamnen innehålla extra tecken. Du kan inaktivera det beteendet genom att lägga
plain_host_names: yes
till det dynamiska lagret.
Hitta värdservrar för virtuella Azure-datorer
Kör följande kommando för att visa alla 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"
},
...
}
}
},
...
}
}
Genom att hämta information från Azure fylls det dynamiska lagret i hostvars
för varje virtuell Azure-dator. Dessa hostvars
är sedan för att fastställa medlemskap för den virtuella datorns grupp i Ansible-inventeringen.
Tilldela gruppmedlemskap med conditional_groups
Varje villkorsstyrd grupp består av två delar. Namnet på gruppen och villkoret för att lägga till en medlem i gruppen.
Använd egenskapen image.offer
för att skapa villkorsstyrd gruppmedlemskap för linux-vm.
Öppna det myazure_rm.yml
dynamiska lagret och lägg till följande 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
Kör med alternativet--graph
:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Från utdata kan du se att de virtuella datorerna inte längre är associerade med ungrouped
gruppen. I stället tilldelas varje virtuell dator till en ny grupp som skapats av det dynamiska lagret.
Nyckelpunkt:
- Med villkorsgrupper kan du namnge specifika grupper i lagret och fylla i dem med hjälp av
hostvars
.
Tilldela gruppmedlemskap med keyed_groups
Nyckelgrupper tilldelar gruppmedlemskap på samma sätt som villkorsgrupper, men när du använder en nyckelgrupp fylls även gruppnamnet dynamiskt i.
Lägg till följande keyed_group i det myazure_rm.yml
dynamiska lagret:
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
Kör med alternativet--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
Från utdata ser du ytterligare två grupper _message_broker
och _web_server
. Med hjälp av en nyckelgrupp fyller taggen applicationRole
gruppnamnen och gruppmedlemskapen.
Nyckelpunkt:
- Nyckelgrupper innehåller som standard en avgränsare. Om du vill ta bort avgränsaren lägger du till
separator: ""
under nyckelegenskapen.
Köra spelböcker med gruppnamnsmönster
Använd de grupper som skapats av det dynamiska lagret för att rikta in sig på undergrupper.
Skapa en spelbok med
win_ping.yml
namnet med följande innehåll:--- - 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
Kör spelboken.ansible-playbook win_ping.yml -i myazure_rm.yml
När du uppmanas till det
username
anger du ochpassword
för den virtuella Azure Windows-datorn.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
Viktigt!
Om du får felet
winrm or requests is not installed: No module named 'winrm'
installerar du pywinrm med följande kommando:pip install "pywinrm>=0.3.0"
Skapa en andra spelbok med namnet
ping.yml
med följande innehåll:--- - 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
Kör spelboken.ansible-playbook ping.yml -i myazure_rm.yml
När du uppmanas till det
username
anger du ochpassword
för den virtuella Azure Linux-datorn.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
Rensa resurser
Kör az group delete för att ta bort resursgruppen. Alla resurser i resursgruppen tas bort.
az group delete --name <resource_group>
Kontrollera att resursgruppen har tagits bort med hjälp av az group show.
az group show --name <resource_group>