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

  1. Wählen Sie Infrastruktur > Verbindungen > Integrationen aus und klicken Sie auf Integration hinzufügen.
  2. Klicken Sie auf „Ansible“.
    Die Seite zum Konfigurieren von Ansible wird angezeigt.
  3. Geben Sie den Hostnamen, den Pfad der Bestandslistendatei und andere erforderliche Informationen für die Ansible Open Source-Instanz ein.
  4. Klicken Sie auf Validieren, um die Integration zu überprüfen.
  5. Klicken Sie auf Hinzufügen.

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.

  1. 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.
  2. 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}
Bei Ansible-Integrationen wird erwartet, dass Anmeldedaten für die Authentifizierung auf eine der folgenden Arten in einer Cloud-Vorlage vorhanden sind:
  • 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.