Zelfstudie: Dynamische inventarissen van uw Azure-resources configureren met Ansible
Belangrijk
Ansible 2.8 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.
De functie voor dynamische ansible-inventaris verwijdert de last van het onderhouden van statische inventarisbestanden.
In deze zelfstudie gebruikt u de invoegtoepassing voor dynamische voorraad van Azure om uw Ansible-inventaris te vullen.
In dit artikel leert u het volgende:
- Configureer twee virtuele machines testen.
- Tags toevoegen aan virtuele Azure-machines
- Een dynamische voorraad genereren
- Voorwaardelijke en sleutelgroepen gebruiken om groepslidmaatschappen te vullen
- Playbooks uitvoeren op groepen in de dynamische inventaris
Vereisten
- Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.
- Azure-service-principal: maak een service-principal, noteer de volgende waarden: appId, displayName, wachtwoord en tenant.
Ansible installeren: Voer een van de volgende opties uit:
- Ansible installeren en configureren op een virtuele Linux-machine
- Configureer Azure Cloud Shell en maak een virtuele machine met Ansible als u geen toegang hebt tot een virtuele Linux-machine.
Virtuele Azure-machines maken
Meld u aan bij het Azure-portaal.
Open Cloud Shell.
Maak een Azure-resourcegroep om de virtuele machines voor deze zelfstudie in op te slaan.
Belangrijk
De Azure-resourcegroep die u in deze stap u maakt, moet een naam hebben die volledig uit kleine letters bestaat. Anders mislukt het genereren van de dynamische voorraad.
az group create --resource-group ansible-inventory-test-rg --location eastus
Maak twee virtuele Linux-machines in Azure met een van de volgende technieken:
Ansible-playbook - Het artikel, Een eenvoudige virtuele Linux-machine maken in Azure met Ansible en een eenvoudige virtuele Windows-machine maken in Azure met Ansible laat zien hoe u een virtuele machine maakt op basis van een Ansible-playbook.
Azure CLI: voer elk van de volgende opdrachten in de Cloud Shell uit om de twee virtuele machines te maken:
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>
Vervang het
<password>
wachtwoord.
Toepassingsroltags toevoegen
Tags worden gebruikt om Azure-resources te organiseren en te categoriseren. Door de Azure-VM's een toepassingsrol toe te wijzen, kunt u de tags gebruiken als groepsnamen in de dynamische azure-inventaris.
Voer de volgende opdrachten uit om de VM-tags bij te werken:
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'
Meer informatie over strategieƫn voor Azure-tags vindt u in Uw tagstrategie definiƫren.
Een dynamische voorraad genereren
Ansible biedt een invoegtoepassing voor dynamische voorraad van Azure.
De volgende stappen helpen u bij het gebruik van de invoegtoepassing:
Een dynamische inventaris maken met de naam
myazure_rm.yml
plugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: auto
Sleutelpunt:
- Ansible gebruikt de naam en extensie van het inventarisbestand om te bepalen welke inventarisinvoegtoepassing moet worden gebruikt. Als u de invoegtoepassing dynamische voorraad van Azure wilt gebruiken, moet het bestand eindigen met
azure_rm
en een extensie hebben van ofyaml
yml
.
- Ansible gebruikt de naam en extensie van het inventarisbestand om te bepalen welke inventarisinvoegtoepassing moet worden gebruikt. Als u de invoegtoepassing dynamische voorraad van Azure wilt gebruiken, moet het bestand eindigen met
Voer de volgende opdracht uit om een query uit te voeren op de VM's in de resourcegroep:
ansible-inventory -i myazure_rm.yml --graph
Wanneer u de opdracht uitvoert, ziet u resultaten die vergelijkbaar zijn met de volgende uitvoer:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Beide VM's behoren tot de ungrouped
groep. Dit is een onderliggend element van de all
groep in de Ansible-inventaris.
Sleutelpunt:
- De invoegtoepassing voor dynamische voorraad van Azure retourneert standaard wereldwijd unieke namen. Daarom kunnen de namen van de VM's extra tekens bevatten. U kunt dat gedrag uitschakelen door deze toe te voegen aan
plain_host_names: yes
de dynamische inventaris.
Azure VM-hostvars zoeken
Voer de volgende opdracht uit om alle 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"
},
...
}
}
},
...
}
}
Door informatie op te halen uit Azure, wordt de dynamische inventaris ingevuld hostvars
voor elke Virtuele Azure-machine. Deze hostvars
zijn vervolgens om de lidmaatschappen van de VM-groep binnen de Ansible-inventaris te bepalen.
Groepslidmaatschap toewijzen met conditional_groups
Elke voorwaardelijke groep bestaat uit twee delen. De naam van de groep en de voorwaarde voor het toevoegen van een lid aan de groep.
Gebruik de eigenschap image.offer
om een voorwaardelijk groepslidmaatschap te maken voor de linux-vm.
Open de myazure_rm.yml
dynamische inventaris en voeg het volgende conditional_group
toe:
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"
Voer de ansible-inventory
opdracht uit met de --graph
optie:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
In de uitvoer ziet u dat de VM's niet meer aan de ungrouped
groep zijn gekoppeld. In plaats daarvan wordt elke VIRTUELE machine toegewezen aan een nieuwe groep die is gemaakt door de dynamische inventaris.
Sleutelpunt:
- Met voorwaardelijke groepen kunt u specifieke groepen binnen uw inventaris een naam geven en deze vullen met behulp van
hostvars
.
Groepslidmaatschap toewijzen met keyed_groups
Sleutelgroepen wijzen groepslidmaatschap op dezelfde manier toe als voorwaardelijke groepen, maar wanneer u een sleutelgroep gebruikt, wordt de groepsnaam ook dynamisch ingevuld.
Voeg de volgende keyed_group toe aan de myazure_rm.yml
dynamische inventaris:
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
Voer de ansible-inventory
opdracht uit met de --graph
optie:
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
In de uitvoer ziet u nog twee groepen _message_broker
en _web_server
. Met behulp van een sleutelgroep vult de applicationRole
tag de groepsnamen en groepslidmaatschappen in.
Sleutelpunt:
- Sleutelgroepen bevatten standaard een scheidingsteken. Als u het scheidingsteken wilt verwijderen, voegt u deze toe
separator: ""
onder de sleuteleigenschap.
Playbooks uitvoeren met groepsnaampatronen
Gebruik de groepen die door de dynamische inventaris zijn gemaakt om subgroepen te targeten.
Maak een playbook
win_ping.yml
met de volgende inhoud:--- - 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:
Voer het
win_ping.yml
playbook uit.ansible-playbook win_ping.yml -i myazure_rm.yml
Wanneer u hierom wordt gevraagd, voert u de
username
enpassword
voor de Virtuele Azure Windows-machine in.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
Belangrijk
Als u de fout
winrm or requests is not installed: No module named 'winrm'
krijgt, installeert u pywinrm met de volgende opdracht:pip install "pywinrm>=0.3.0"
Maak een tweede playbook met de naam
ping.yml
met de volgende inhoud:--- - 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:
Voer het
ping.yml
playbook uit.ansible-playbook ping.yml -i myazure_rm.yml
Wanneer u hierom wordt gevraagd, voert u de
username
enpassword
voor de Virtuele Linux-machine van Azure in.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
Resources opschonen
Voer az group delete uit om de resourcegroep te verwijderen. Alle resources in de resourcegroep worden verwijderd.
az group delete --name <resource_group>
Controleer of de resourcegroep is verwijderd met behulp van az group show.
az group show --name <resource_group>