Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 inventaris genereren
- Gebruik voorwaardelijke en gesleutelde groepen om groepslidmaatschappen toe te wijzen
- Playbooks uitvoeren op groepen binnen de dynamische inventaris
Vereiste voorwaarden
- Azure-abonnement: als u geen Azure-abonnement hebt, maakt u een gratis account 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 voor het opslaan van de virtuele machines voor deze zelfstudie.
Belangrijk
De Azure-resourcegroep die u in deze stap maakt, moet een naam hebben die volledig kleine letters bevat. Anders mislukt het genereren van de dynamische inventaris.
az group create --resource-group ansible-inventory-test-rg --location eastusMaak twee virtuele Linux-machines in Azure met behulp van 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 : geef elk van de volgende opdrachten in 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 inventaris 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.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoSleutelpunt:
- Ansible gebruikt de naam en extensie van het inventarisbestand om te bepalen welke inventarisinvoegtoepassing moet worden gebruikt. Als u de Azure dynamische inventaris plug-in wilt gebruiken, moet het bestand eindigen met
azure_rmen een extensie hebben van ofymlofyaml.
- Ansible gebruikt de naam en extensie van het inventarisbestand om te bepalen welke inventarisinvoegtoepassing moet worden gebruikt. Als u de Azure dynamische inventaris plug-in 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 --graphWanneer 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
plain_host_names: yesaan de dynamische inventaris toe te voegen.
Azure VM-hostvars zoeken
Voer het volgende commando uit om alle hostvars te bekijken:
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 worden vervolgens gebruikt om de lidmaatschappen van de VM-groep binnen de Ansible-inventory 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_grouptoe:
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. Om het scheidingsteken te verwijderen, voegt u
separator: ""toe onder de sleuteleigenschap.
Playbooks uitvoeren met groepsnaampatronen
Gebruik de groepen die door de dynamische inventaris zijn gemaakt om subgroepen te targeten.
Maak een speelboek genaamd
win_ping.ymlmet 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.ymlplaybook uit.ansible-playbook win_ping.yml -i myazure_rm.ymlWanneer u hierom wordt gevraagd, voert u de
usernameenpasswordvoor 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=0Belangrijk
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.ymlmet 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.ymlplaybook uit.ansible-playbook ping.yml -i myazure_rm.ymlWanneer u hierom wordt gevraagd, voert u de
usernameenpasswordvoor 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
De hulpbronnen 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>