Sie können Ansible Tower mit Cloud Assembly integrieren, um die Konfigurationsverwaltung der bereitgestellten Ressourcen zu unterstützen. Nachdem Sie die Integration konfiguriert haben, können Sie mithilfe des Cloud-Vorlagen-Editors virtuelle Ansible Tower-Komponenten zu neuen oder vorhandenen Bereitstellungen hinzufügen.
Voraussetzungen
- Gewähren Sie anderen als Administratorbenutzern die entsprechenden Berechtigungen für den Zugriff auf Ansible Tower. Es gibt zwei Optionen, die für die meisten Konfigurationen funktionieren. Wählen Sie die Option, die für Ihre Konfiguration am besten geeignet ist.
- Weisen Sie Benutzern die Rollen „Bestandslistenadministrator“ und „Auftragsvorlagenadministrator“ auf Organisationsebene zu.
- Gewähren Sie Benutzern Administratorberechtigungen für eine bestimmte Bestandsliste und die Rolle „Ausführen“ für alle für die Bereitstellung verwendeten Auftragsvorlagen.
-
Sie müssen in Ansible Tower die entsprechenden Anmeldedaten und Vorlagen für die Verwendung mit Ihren Bereitstellungen konfigurieren. Bei Vorlagen kann es sich um Auftragsvorlagen oder Workflowvorlagen handeln. Auftragsvorlagen definieren die Bestandsliste und das Playbook für die Verwendung mit einer Bereitstellung. Zwischen einer Auftragsvorlage und einem Playbook besteht eine 1:1-Zuordnung. Playbooks verwenden eine YAML-ähnliche Syntax, um mit der Vorlage verknüpfte Aufgaben zu definieren. Verwenden Sie für die meisten typischen Bereitstellungen Maschinenanmeldedaten zur Authentifizierung.
Workflowvorlagen ermöglichen es den Benutzern, Sequenzen zu erstellen, die aus einer beliebigen Kombination von Auftragsvorlagen, Synchronisierungen von Projekten und Bestandslisten bestehen, die miteinander verknüpft sind, sodass Sie sie als Einheit ausführen können. Der Ansible Tower Workflow Visualizer hilft Benutzern beim Entwerfen von Workflowvorlagen. Sie können für die meisten typischen Bereitstellungen Maschinenanmeldedaten zur Authentifizierung verwenden.
- Melden Sie sich bei Ansible Tower an und navigieren Sie zum Abschnitt „Vorlagen“.
- Wählen Sie „Neue Auftragsvorlage hinzufügen“ aus.
- Wählen Sie die bereits erstellten Anmeldedaten aus. Hierbei handelt es sich um die Anmeldedaten der Maschine, die von Ansible Tower verwaltet werden soll. Für jede Auftragsvorlage kann ein Anmeldedatenobjekt vorhanden sein.
- Wählen Sie für „Grenzwert“ die Option „Eingabeaufforderung beim Start“ aus. Hiermit wird sichergestellt, dass die Auftragsvorlage für den Knoten ausgeführt wird, der von Cloud Assembly bereitgestellt oder dessen Bereitstellung aufgehoben wird. Bei nicht ausgewählter Option wird ein Fehler vom Typ „Kein Grenzwert festgelegt“ angezeigt, wenn der Blueprint mit der Auftragsvorlage bereitgestellt wird.
- Wählen Sie „Neue Workflowvorlage hinzufügen“ aus.
- Wählen Sie die Anmeldedaten aus, die Sie bereits erstellt haben, und definieren Sie dann die Bestandsliste. Entwerfen Sie mit dem Workflow Visualizer die Workflowvorlage.
Für das Feld „Grenzwert“ der Workflow- oder Auftragsvorlagen können Sie generell „Eingabeaufforderung beim Start“ auswählen. Diese Auswahl stellt sicher, dass die Auftrags- oder Workflowvorlage für den Knoten ausgeführt wird, der von Cloud Assembly bereitgestellt oder dessen Bereitstellung aufgehoben wird.
- Sie können die Ausführung der von Cloud Assembly aufgerufenen Auftragsvorlagen oder Workflowvorlagen auf der Registerkarte „Ansible Tower-Aufträge“ anzeigen.
Prozedur
Ergebnisse
Ansible Tower ist für die Verwendung mit Cloud-Vorlagen verfügbar.
Nächste Maßnahme
Fügen Sie Ansible Tower-Komponenten zu den gewünschten Cloud-Vorlagen hinzu. Sie müssen die entsprechende Auftragsvorlage mit der Ausführungsberechtigung für den im Integrationskonto angegebenen Benutzer angeben.
- Wählen Sie auf der Seite mit der Cloud-Vorlagen-Arbeitsfläche im Menü der Blueprint-Optionen unter der Überschrift „Konfigurationsverwaltung“ den Eintrag „Ansible“ aus und ziehen Sie die Ansible Tower-Komponente auf die Arbeitsfläche.
- Konfigurieren Sie im Bereich auf der rechten Seite die entsprechenden Ansible Tower-Eigenschaften, wie z. B. Auftragsvorlagen.
Wenn Sie eine Ansible Tower-Kachel zu einer Cloud-Vorlage hinzufügen, erstellt vRealize Automation den Hosteintrag für die angehängte virtuelle Maschine in Ansible Tower. 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_Tower_1: type: Cloud Ansible Tower properties: host: name of host account: name of account hostName: resource name 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 Tower 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 Tower 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]}'
Wenn Sie einer Cloud-Vorlage eine Ansible Tower-Komponente hinzufügen, können Sie die Auftragsvorlage angeben, die in der Cloud-Vorlagen-YAML aufgerufen werden soll. Sie können auch Workflowvorlagen oder eine Kombination aus Auftragsvorlagen und Workflowvorlagen angeben. Wenn Sie den Vorlagentyp nicht angeben, geht vRealize Automation standardmäßig davon aus, dass Sie eine Auftragsvorlage aufrufen.
Bei folgendem YAML-Codeausschnitt handelt es sich um ein Beispiel dafür, wie eine Kombination aus Auftrags- und Workflowvorlagen in einer Ansible-Tower-Cloud-Vorlage aufgerufen werden kann.
Cloud_Ansible_1: type: Cloud.Ansible.Tower properties: host: ‘${resource.CentOS_Machine.*}’ account: maxConnectionRetries: 2 maxJobRetries: 2 templates: provision: - name: My workflow type: workflow - name: My job template
Wir haben maxConnectionsRetries
und maxJobRetries
hinzugefügt, um mit Ansible-bezogenen Fehlern umzugehen. Die Cloud-Vorlagen akzeptieren den benutzerdefinierten Wert und verwenden den Standardwert, falls kein Wert angegeben wird. Für maxConnectionRetries
lautet der Standardwert 10 und für maxJobRetries
3.
Cloud Assembly-Cloud-Vorlagen für Ansible Tower-Integrationen enthalten die useDefaultLimit
-Eigenschaft mit einem „true“- oder „false“-Wert, um zu definieren, wo Ansible-Vorlagen ausgeführt werden. Bei Ansible-Vorlagen kann es sich um Auftragsvorlagen oder Workflowvorlagen handeln. Wenn dieser Wert auf „true“ festgelegt ist, werden die angegebenen Vorlagen für die im Feld „Grenzwert“ auf der Seite „Ansible-Vorlagen“ angegebenen Maschine ausgeführt. Wenn dieser Wert auf „false“ festgelegt ist, werden die Vorlagen für die bereitgestellte Maschine ausgeführt. Die Benutzer sollten aber das Kontrollkästchen „Eingabeaufforderung beim Start“ auf der Seite „Ansible Tower-Vorlagen“ aktivieren. Der Wert dieser Eigenschaft ist standardmäßig „false“. Das folgende YAML-Beispiel zeigt, wie die Eigenschaft useDefaultLimit
in Cloud-Vorlagen angezeigt wird.
templates: provision: - name: ping aws_credentials type: job useDefaultLimit: false extraVars: '{"rubiconSurveyJob" : "checkSurvey"}'
Zudem können Sie, wie das vorangegangene Beispiel zeigt, anhand der Eigenschaft extraVars
zusätzliche Variablen oder Survey-Variablen angeben. Diese Funktion kann für die Ausführung von Vorlagen nützlich sein, die eine Eingabe erfordern. Wenn ein Benutzer die Survey-Variable beibehalten hat, müssen Sie die Variable im Abschnitt extraVars
der Cloud-Vorlage übergeben, um Fehler zu vermeiden.
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.
Obwohl die Ansible Tower-Integration die Eigenschaft „Gruppen“ nicht unterstützt, gibt es für Kunden eine Alternative zur Implementierung äquivalenter Funktionen durch Verwendung der VM-Tags und des VMware-Bestandslisten-Plug-Ins. Weitere Informationen finden Sie in folgendem Artikel: https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html
- Verwenden Sie
ansible_host
(z. B. FQDN) undhostName
in der Cloud-Vorlage. - Aktivieren Sie in AWX das Flag „Beim Start aktualisieren“, wodurch vor der Ausführung des Playbooks eine Synchronisierung mit dem vCenter für neue Hosts durchgeführt wird. Bei der Synchronisierung werden FQDN-Hosteinträge, die von vRealize Automation hinzugefügt und vom VMware-Bestandslisten-Plug-In importiert wurden, zusammengeführt und Hosts zu Gruppen zugewiesen. Bestandslistengruppen werden anhand von VM-Tag-Werten mithilfe der obigen Synchronisierungsquellvariablen erstellt.
Eine Beispielimplementierung finden Sie in der folgenden Cloud-Vorlage.
# Created by Quickstart wizard. name: RHEL 8 version: 0.0.1 formatVersion: 1 inputs: image: type: string description: Select an OS Version default: RHEL 8 Base enum: - RHEL 8 Base - RHEL 7 Base AWX: type: string description: Choose AWX Environment enum: - LabAWX - FA/CC-AWX envrionmnetTag: type: string description: Choose VM Environment enum: - cel - mag - wdr purposeTag: type: string description: Choose Server Purpose default: '' enum: - '' - mariadb - oracle authGroupTag: type: string description: Choose Authentication Group default: '' enum: - '' - dbo_linux - oracle - postgres hostname: type: string description: Desired hostname default: changeme cpuCount: type: integer description: Number of virtual processors default: 1 totalMemoryMB: type: integer description: Machine virtual memory size in Megabytes default: 1024 disk1Size: type: integer description: A SIZE of 0 will disable the disk and it will not be provisioned. default: 0 disk2Size: type: integer description: A SIZE of 0 will disable the disk and it will not be provisioned. default: 0 neededip: type: string description: Enter an available IP Address title: Needed-IP-Address vlan: type: string description: Enter in needed vlan title: Enter VLAN ID example "vl500" resources: Cloud_Ansible_Tower_1: type: Cloud.Ansible.Tower metadata: layoutPosition: - 0 - 0 properties: host: ${resource.Cloud_vSphere_Machine_1.*} account: ${input.AWX} hostName: ${input.hostname} hostVariables: ansible_host: ${input.hostname}.dcl.wdpr.disney.com templates: provision: - name: Linux-Role Cloud_vSphere_Machine_1: type: Cloud.vSphere.Machine metadata: layoutPosition: - 0 - 1 properties: image: ${input.image} Infoblox.IPAM.Network.dnsSuffix: dcl.wdpr.disney.com Infoblox.IPAM.Network.dnsView: Internal customizationSpec: Rhel7Base name: ${input.hostname} cpuCount: ${input.cpuCount} totalMemoryMB: ${input.totalMemoryMB} attachedDisks: ${map_to_object(resource.Cloud_Volume_1[*].id + resource.Cloud_Volume_2[*].id, "source")} networks: - network: ${resource.Cloud_vSphere_Network_1.id} assignment: static address: ${input.neededip} tags: - key: Server-Team value: ${input.envrionmnetTag} - key: Server-Team value: ${input.purposeTag} - key: Server-Team value: ${input.authGroupTag} Cloud_Volume_1: type: Cloud.Volume metadata: layoutPosition: - 0 - 2 properties: count: '${input.disk1Size == 0 ? 0 : 1 }' capacityGb: ${input.disk1Size} Cloud_Volume_2: type: Cloud.Volume metadata: layoutPosition: - 0 - 3 properties: count: '${input.disk2Size == 0 ? 0 : 1}' capacityGb: ${input.disk2Size} Cloud_vSphere_Network_1: type: Cloud.vSphere.Network metadata: layoutPosition: - 1 - 0 properties: networkType: existing constraints: - tag: ${input.vlan}