Cloud Assembly unterstützt die Integration mit der Ansible Open Source-Konfigurationsverwaltung. Nachdem Sie die Integration konfiguriert haben, können Sie Ansible-Komponenten zu neuen oder vorhandenen Bereitstellungen hinzufügen.
Wenn Sie Ansible Open Source mit Cloud Assembly integrieren, können Sie es so konfigurieren, dass ein oder mehrere Ansible-Playbooks in einer bestimmten Reihenfolge ausgeführt werden, wenn eine neue Maschine zur Automatisierung der Konfigurationsverwaltung bereitgestellt wird. Sie geben die gewünschten Playbooks in der Cloud-Vorlage für eine Bereitstellung an.
Beim Einrichten einer Ansible-Integration müssen Sie die Ansible Open Source-Hostmaschine sowie den Pfad der Bestandslistendatei angeben, in der Informationen für die Ressourcenverwaltung definiert sind. Darüber hinaus müssen Sie einen Namen und ein Kennwort für den Zugriff auf die Ansible Open Source-Instanz angeben. Wenn Sie eine Ansible-Komponente später zu einer Bereitstellung hinzufügen, können Sie die Verbindung aktualisieren, um die schlüsselbasierte Authentifizierung zu verwenden.
Standardmäßig verwendet Ansible SSH zum Herstellen einer Verbindung mit den physischen Maschinen. Falls Sie Windows-Maschinen wie in der Cloud-Vorlage mit der Windows-Eigenschaft „osType“ angegeben verwenden, wird die Variable connection_type
automatisch auf winrm
festgelegt.
Anfänglich verwendet die Ansible-Integration die in der Integration bereitgestellten Benutzer-/Kennwort- oder Benutzer-/Schlüsselanmeldedaten, um eine Verbindung mit der Ansible-Steuerungsmaschine herzustellen. Nach erfolgreicher Verbindungsherstellung werden die bereitgestellten Playbooks in der Cloud-Vorlage auf ihre Syntax überprüft.
Bei erfolgreicher Überprüfung wird in der Ansible-Steuerungsmaschine unter ~/var/tmp/vmware/provider/user_defined_script/ ein Ausführungsordner erstellt. Hierbei handelt es sich um den Speicherort, über den Skripts ausgeführt werden, um den Host zur Bestandsliste hinzuzufügen, die Variablendateien des Hosts zu erstellen, einschließlich der Einrichtung des Authentifizierungsmodus zum Herstellen einer Verbindung mit dem Host, und schließlich die Playbooks auszuführen. An diesem Punkt werden die in der Cloud-Vorlage bereitgestellten Anmeldedaten verwendet, um über die Ansible-Steuerungsmaschine eine Verbindung zum Host herzustellen.
Die Ansible-Integration unterstützt physische Maschinen, die keine IP-Adresse verwenden. Bei Maschinen, die in Public Clouds wie AWS, Azure und GCP bereitgestellt werden, wird die Adresseigenschaft in der erstellten Ressource erst dann mit der öffentlichen IP-Adresse der Maschine versehen, wenn die Maschine mit einem öffentlichen Netzwerk verbunden ist. Für Maschinen, die nicht mit einem öffentlichen Netzwerk verbunden sind, sucht die Ansible-Integration nach der IP-Adresse im Netzwerk, das mit der Maschine verbunden ist. Wenn mehrere Netzwerke angeschlossen sind, sucht die Ansible-Integration nach dem Netzwerk mit dem niedrigsten deviceIndex, d. h., dem Index der Netzwerkschnittstellenkarte (NIC), die mit der Maschine verbunden ist. Wenn die Eigenschaft „deviceIndex“ nicht im Blueprint angegeben ist, verwendet die Integration das erste angeschlossene Netzwerk.
Unter Definition der Konfigurationsverwaltung in Cloud Assembly erhalten Sie weitere Informationen zum Konfigurieren von Ansible Open Source für die Integration in Cloud Assembly.
Voraussetzungen
- Die Ansible-Steuerungsmaschine muss eine Ansible-Version verwenden. Informationen zu unterstützten Versionen finden Sie in der vRealize Automation-Support-Matrix.
- Die Ausführlichkeit des Ansible-Protokolls muss auf den Standardwert „Null“ festgelegt werden.
- Der Benutzer muss über Lese-/Schreibzugriff auf das Verzeichnis verfügen, in dem sich die Ansible-Bestandslistendatei befindet. Darüber hinaus muss der Benutzer über Lese-/Schreibzugriff auf die Bestandslistendatei verfügen, sofern sie bereits vorhanden ist.
- Stellen Sie bei Verwendung eines Nicht-Root-Benutzers mit der Option „sudo“ sicher, dass Folgendes in der Sudoers-Datei festgelegt ist:
Defaults:user_name !requiretty
und
username ALL=(ALL) NOPASSWD: ALL
- Stellen Sie sicher, dass die Überprüfung des Hostschlüssels deaktiviert ist, indem Sie
host_key_checking = False
unter /etc/ansible/ansible.cfg oder ~/.ansible.cfg festlegen. - Stellen Sie sicher, dass das Tresor-Kennwort festgelegt ist, indem Sie der Datei /etc/ansible/ansible.cfg oder ~/.ansible.cfg die folgende Zeile hinzufügen:
vault_password_file = /path/to/password_file
Die Tresor-Kennwortdatei enthält das Kennwort im Klartext und wird nur verwendet, wenn Cloud-Vorlagen oder Bereitstellungen eine Kombination aus Benutzername und Kennwort zur Verwendung zwischen ACM und dem Knoten bereitstellen. Siehe hierzu folgendes Beispiel.echo 'myStr0ng9@88w0rd' > ~/.ansible_vault_password.txt echo 'ANSIBLE_VAULT_PASSWORD_FILE=~/.ansible_vault_password.txt' >> ~/.profile # Instead of this way, you can also set it setting 'vault_password_file=~/.ansible_vault_password.txt' in either /etc/ansible/ansible.cfg or ~/.ansible.cfg
- Um bei der Ausführung von Playbooks Ausfälle des Hostschlüssels zu vermeiden, empfiehlt sich die Aufnahme der folgenden Einstellungen in die Datei /etc/ansible/ansible.
[paramiko_connection] record_host_keys = False [ssh_connection] #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s ssh_args = -o UserKnownHostsFile=/dev/null # If you already have any options set for ssh_args, just add the additional option shown here at the end.
Prozedur
Ergebnisse
Ansible ist für die Verwendung mit Cloud-Vorlagen verfügbar.
Nächste Maßnahme
Fügen Sie Ansible-Komponenten zu den gewünschten Cloud-Vorlagen hinzu.
- Wählen Sie auf der Seite mit der Cloud-Vorlagen-Arbeitsfläche im Menü der Cloud-Vorlagenoptionen unter der Überschrift „Konfigurationsverwaltung“ den Eintrag „Ansible“ aus und ziehen Sie die Ansible-Komponente auf die Arbeitsfläche.
- Konfigurieren Sie im Bereich auf der rechten Seite die entsprechenden Ansible-Eigenschaften. Geben Sie beispielsweise die auszuführenden Playbooks an.
In Ansible können Benutzer einem einzelnen Host eine Variable zuweisen und diese dann später in Playbooks verwenden. Mit der Ansible Open Source-Integration können Sie diese Host-Variable in Cloud-Vorlagen angeben. Die Eigenschaft hostVariables
muss im korrekten YAML-Format vorliegen, wie von der Ansible-Steuerungsmaschine erwartet, und diese Inhalte werden an folgendem Speicherort platziert:
parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml
Der Standardspeicherort der Ansible-Bestandslistendatei wird im Ansible-Konto definiert, wie auf der Seite „Integrationen“ in Cloud Assembly hinzugefügt. Die Ansible-Integration validiert die YAML-Syntax für hostVariable
in der Cloud-Vorlage nicht, die Ansible-Steuerungsmaschine löst aber im Falle eines falschen Formats oder einer falschen Syntax einen Fehler aus, wenn Sie ein Playbook ausführen.
Der folgende Cloud-Vorlagen-YAML-Ausschnitt zeigt ein Beispiel für die Nutzung der Eigenschaft hostVariables
.
Cloud_Ansible_1: type: Cloud.Ansible properties: host: '${resource.AnsibleLinuxVM.*}' osType: linux account: ansible-CAVA username: ${input.username} password: ${input.password} maxConnectionRetries: 20 groups: - linux_vms playbooks: provision: - /root/ansible-playbooks/install_web_server.yml hostVariables: | message: Hello ${env.requestedBy} project: ${env.projectName}
- Benutzername und Kennwort in der Ansible Ressource.
- Benutzername und privateKeyFile in der Ansible-Ressource.
- Benutzername in der Ansible-Ressource und im privateKey in der Computing-Ressource durch Angeben von remoteAccess auf
generatedPublicPrivateKey
.
Wenn Sie eine Ansible Open Source-Integration erstellen, müssen Sie Anmeldeinformationen für den Integrationsbenutzer zur Verfügung stellen, um mithilfe von SSH eine Verbindung mit der Ansible-Steuerungsmaschine herzustellen. Um Playbooks mit einer Integration auszuführen, können Sie im YAML-Code der Integration einen anderen Benutzer angeben. Die Eigenschaft username
ist obligatorisch und erforderlich, um eine Verbindung mit der virtuellen Maschine herzustellen, auf der Ansible Änderungen vornimmt. Die Eigenschaft playbookRunUsername
ist optional und kann bereitgestellt werden, um das Playbook auf dem Ansible-Knoten auszuführen. Der Standardwert von playbookRunUsername
fungiert als Benutzername für die Endpoint-Integration in Ansible.
Wenn Sie einen anderen Benutzer angeben, sollte dieser Benutzer schreibzugriff auf die Ansible-Hostdatei haben und über die Berechtigung zum Erstellen privater Schlüsseldateien verfügen.
Wenn Sie eine Ansible Open Source-Kachel zu einer Cloud-Vorlage hinzufügen, erstellt vRealize Automation den Hosteintrag für die angehängte virtuelle Maschine. Standardmäßig verwendet vRealize Automation den Ressourcennamen der virtuellen Maschine zum Erstellen des Hosteintrags. Sie können jedoch jeden Namen mithilfe der Eigenschaft hostName
in der Blueprint-YAML angeben. Zur Kommunikation mit der Maschine erstellt vRealize Automation die Hostvariable ansible_host: IP Address
für den Hosteintrag. Sie können das Standardverhalten zum Konfigurieren der Kommunikation mithilfe des FQDN außer Kraft setzen, indem Sie das Schlüsselwort ansible_host
unter hostVariables
angeben und den FQDN als entsprechenden Wert bereitstellen. Bei folgendem YAML-Codeausschnitt handelt es sich um ein Beispiel dafür, wie die Kommunikation zwischen Hostname und FQDN konfiguriert werden kann:
Cloud_Ansible: type: Cloud Ansible properties: osType: linux username: ubuntu groups: - sample hostName: resource name host: name of host account: name of account hostVariables: ansible_host:Host FQDN
In diesem Beispiel überschreiben Sie den Standardwert ansible_host
, indem Sie den FQDN bereitstellen. Dies kann für Benutzer nützlich sein, die möchten, dass Ansible Open Souce mithilfe des FQDN eine Verbindung zur Hostmaschine herstellt.
Der Standardwert von hostVariables
in der YAML lautet ansible_host:IP_address
, und die IP-Adresse wird für die Kommunikation mit dem Server verwendet.
Wenn die YAML-Eigenschaft „count“ für Ansible Open Source größer als 1 ist, kann der Hostname einer der Eigenschaften der jeweiligen virtuellen Maschine zugeordnet werden. Das folgende Beispiel zeigt die Zuordnung für eine VM-Ressource mit der Bezeichnung „Ubuntu-VM“, wenn deren Adresseigenschaft dem Hostnamen zugeordnet werden soll.
hostname: '${resource.Ubuntu-VM.address[count.index]}'
Stellen Sie in den Cloud-Vorlagen sicher, dass dem Benutzer, der im Integrationskonto angegeben ist, der Pfad zum Ansible Playbook zugänglich ist. Sie können einen absoluten Pfad verwenden, um den Speicherort des Playbooks anzugeben. dies ist jedoch nicht erforderlich. Es wird ein absoluter Pfad zum Benutzerstartordner empfohlen, damit der Pfad gültig bleibt, auch wenn die Anmeldedaten für die Ansible-Integration im Laufe der Zeit geändert werden.
Benutzer mit Cloud-Administratorrechten können das Projekt einer Bereitstellung ändern, die Ansible Open Source- und Ansible Tower-Ressourcen enthält. Die Funktion steht als Tag-2-Aktion auf Bereitstellungsebene zur Verfügung.
Wählen Sie zum Ändern des Projekts für eine Ansible-Bereitstellung im Menü „Aktionen“ der Bereitstellung die Option „Projekt ändern“ (siehe Seite „Cloud Assembly-Bereitstellungen“) und anschließend das Zielprojekt aus. Klicken Sie dann im angezeigten Dialogfeld auf Senden.