Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Ansible 2.8 (oder höher) ist erforderlich, um die Beispiel-Playbooks in diesem Artikel auszuführen.
Das Feature "Ansible dynamic inventory " entfernt die Last, statische Bestandsdateien beizubehalten.
In diesem Lernprogramm verwenden Sie das Dynamische Inventar-Plug-In von Azure zum Auffüllen Ihres ansiblen Inventars.
In diesem Artikel erfahren Sie, wie Sie:
- Konfigurieren Sie zwei virtuelle Testcomputer.
- Hinzufügen von Tags zu virtuellen Azure-Computern
- Generieren eines dynamischen Inventars
- Verwenden von bedingten und schlüsselierten Gruppen zum Auffüllen von Gruppenmitgliedschaften
- Playbooks für Gruppen innerhalb des dynamischen Inventars ausführen
Voraussetzungen
- Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
- Azure-Dienstprinzipal: Erstellen Sie einen Dienstprinzipal, und notieren Sie sich die folgenden Werte: appId, displayName, Kennwort und Mandant.
Installieren Sie Ansible: Führen Sie eine der folgenden Optionen aus:
- Installieren und Konfigurieren von Ansible auf einem virtuellen Linux-Computer
- Konfigurieren Sie Azure Cloud Shell, und erstellen Sie – wenn Sie keinen Zugriff auf einen virtuellen Linux-Computer haben – einen virtuellen Computer mit Ansible.
Erstellen von Azure-VMs
Melden Sie sich beim Azure-Portal an.
Öffnen Sie Cloud Shell.
Erstellen Sie eine Azure-Ressourcengruppe, um die virtuellen Computer für dieses Lernprogramm zu halten.
Von Bedeutung
Die azure-Ressourcengruppe, die Sie in diesem Schritt erstellen, muss einen Vollständig kleingeschriebenen Namen aufweisen. Andernfalls schlägt die Generierung des dynamischen Inventars fehl.
az group create --resource-group ansible-inventory-test-rg --location eastusErstellen Sie zwei virtuelle Linux-Computer in Azure mithilfe einer der folgenden Techniken:
Ansible playbook – Der Artikel " Erstellen eines einfachen virtuellen Linux-Computers in Azure mit Ansible und Erstellen eines einfachen virtuellen Windows-Computers in Azure mit Ansible veranschaulicht, wie ein virtueller Computer aus einem ansible Playbook erstellt wird.
Azure CLI – Stellen Sie jeden der folgenden Befehle in der Cloud Shell aus, um die beiden virtuellen Computer zu erstellen:
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>Ersetzen Sie das
<password>Kennwort.
Anwendungs-Rollentags hinzufügen
Tags werden verwendet, um Azure-Ressourcen zu organisieren und zu kategorisieren. Wenn Sie die Azure-VMs einer Anwendungsrolle zuweisen, können Sie die Tags als Gruppennamen innerhalb des dynamischen Azure-Inventars verwenden.
Führen Sie die folgenden Befehle aus, um die VM-Tags zu aktualisieren:
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'
Erfahren Sie mehr über Azure-Kategorisierungsstrategien bei Define your tagging strategy.
Generieren eines dynamischen Inventars
Ansible stellt ein Azure Dynamic Inventory Plug-In bereit.
Die folgenden Schritte führen Sie durch die Verwendung des Plug-Ins:
Erstellen eines dynamischen Inventars mit dem Namen
myazure_rm.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoKernpunkt:
- Ansible verwendet den Inventardateinamen und die Erweiterung, um zu identifizieren, welches Inventar-Plugin verwendet werden soll. Um das dynamische Azure-Inventar-Plug-In zu verwenden, muss die Datei mit
azure_rmenden und eine Erweiterung von entwederymloderyamlhaben.
- Ansible verwendet den Inventardateinamen und die Erweiterung, um zu identifizieren, welches Inventar-Plugin verwendet werden soll. Um das dynamische Azure-Inventar-Plug-In zu verwenden, muss die Datei mit
Führen Sie den folgenden Befehl aus, um die virtuellen Computer in der Ressourcengruppe abzufragen:
ansible-inventory -i myazure_rm.yml --graphWenn Sie den Befehl ausführen, sehen Sie Ergebnisse, die der folgenden Ausgabe ähneln:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Beide VMs gehören zur ungrouped Gruppe, die ein untergeordnetes Element der all Gruppe im Ansible-Bestand ist.
Schlüsselpunkt:
- Standardmäßig gibt das dynamische Azure-Bestands-Plug-In global eindeutige Namen zurück. Aus diesem Grund können die VM-Namen zusätzliche Zeichen enthalten. Sie können dieses Verhalten deaktivieren, indem Sie
plain_host_names: yeszum dynamischen Bestand hinzufügen.
Azure VM hostvars finden
Führen Sie den folgenden Befehl aus, um alle hostvars anzuzeigen:
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"
},
...
}
}
},
...
}
}
Durch das Abrufen von Informationen aus Azure füllt das dynamische Inventar die hostvars für jede Azure-VM. Diese hostvars sollen dann die VM-Gruppenmitgliedschaften innerhalb des Ansible-Inventars bestimmen.
Zuweisen einer Gruppenmitgliedschaft mit conditional_groups
Jede bedingte Gruppe besteht aus zwei Teilen. Der Name der Gruppe und die Bedingung zum Hinzufügen eines Mitglieds zur Gruppe.
Verwenden Sie die Eigenschaft image.offer , um eine bedingte Gruppenmitgliedschaft für die linux-vm zu erstellen.
Öffnen Sie den myazure_rm.yml dynamischen Bestand, und fügen Sie Folgendes hinzu 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"
Führen Sie ansible-inventory mit der --graph-Option aus:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Aus der Ausgabe können Sie sehen, dass die virtuellen Computer nicht mehr der ungrouped Gruppe zugeordnet sind. Stattdessen wird jeder virtuelle Computer einer neuen Gruppe zugewiesen, die durch den dynamischen Bestand erstellt wurde.
Schlüsselpunkt:
- Mit bedingten Gruppen können Sie bestimmte Gruppen innerhalb Ihres Inventars benennen und mit
hostvarsdiesen auffüllen.
Gruppenmitgliedschaft mit keyed_groups zuweisen
Schlüsselgruppen ordnen die Gruppenmitgliedschaft auf die gleiche Weise zu wie bedingte Gruppen, aber bei Verwendung einer Schlüsselgruppe wird der Gruppenname auch dynamisch ausgefüllt.
Fügen Sie dem dynamischen Bestand die folgenden keyed_group hinzu myazure_rm.yml :
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
Führen Sie ansible-inventory mit der --graph-Option aus.
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
Aus der Ausgabe sehen Sie zwei weitere Gruppen _message_broker und _web_server. Mithilfe einer schlüsselierten Gruppe füllt das applicationRole Tag die Gruppennamen und Gruppenmitgliedschaften auf.
Schlüsselpunkt:
- Schlüsselgruppen enthalten standardmäßig ein Trennzeichen. Um das Trennzeichen zu entfernen, fügen Sie
separator: ""bei der Schlüsseleigenschaft hinzu.
Ausführen von Playbooks mit Gruppennamenmustern
Verwenden Sie die Gruppen, die vom dynamischen Inventar erstellt wurden, um auf Untergruppen abzuzielen.
Erstellen Sie ein Playbook
win_ping.ymlmit dem folgenden Inhalt:--- - 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:Führen Sie das
win_ping.ymlPlaybook aus.ansible-playbook win_ping.yml -i myazure_rm.ymlWenn Sie dazu aufgefordert werden, geben Sie die
usernameundpasswordfür die Azure Windows-VM ein.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=0Von Bedeutung
Wenn sie den Fehler
winrm or requests is not installed: No module named 'winrm'erhalten, installieren Sie pywinrm mit dem folgenden Befehl:pip install "pywinrm>=0.3.0"Erstellen Sie ein zweites Playbook mit dem Namen
ping.ymlund dem folgenden Inhalt:--- - 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:Führen Sie das
ping.ymlPlaybook aus.ansible-playbook ping.yml -i myazure_rm.ymlWenn Sie dazu aufgefordert werden, geben Sie
usernameundpasswordfür die Azure Linux-VM ein.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
Bereinigen von Ressourcen
Führen Sie az group delete aus, um die Ressourcengruppe zu löschen. Alle Ressourcen innerhalb der Ressourcengruppe werden gelöscht.
az group delete --name <resource_group>Überprüfen Sie, ob die Ressourcengruppe mithilfe der az group show gelöscht wurde.
az group show --name <resource_group>