È possibile integrare Ansible Tower con Cloud Assembly per supportare la gestione della configurazione delle risorse distribuite. Dopo aver configurato l'integrazione, è possibile aggiungere i componenti virtuali di Ansible Tower a distribuzioni nuove o esistenti dall'editor di modelli cloud.
Prerequisiti
- Concedere agli utenti non amministratori le autorizzazioni appropriate per accedere ad Ansible Tower. Sono disponibili due opzioni che sono compatibili con la maggior parte delle configurazioni. Scegliere quella più appropriata per la propria configurazione.
- Concedere all'amministratore dell'inventario e all'amministratore dei modelli di processo ruoli a livello di organizzazione.
- Concedere agli utenti l'autorizzazione di amministratore per un particolare inventario e il ruolo Esegui per tutti i modelli di processo utilizzati per il provisioning.
-
È necessario configurare le credenziali e i modelli appropriati in Ansible Tower per l'utilizzo con le distribuzioni. I modelli possono essere modelli di processo o modelli di workflow. I modelli di processo definiscono l'inventario e il playbook da utilizzare con una distribuzione. Esiste una mappatura 1:1 tra un modello di processo e un playbook. I playbook utilizzano una sintassi simile a YAML per definire le attività associate al modello. Per la maggior parte delle distribuzioni tipiche, utilizzare le credenziali della macchina per l'autenticazione.
I modelli di workflow consentono agli utenti di creare sequenze composte da una combinazione qualsiasi di modelli di processo, sincronizzazioni di progetti e sincronizzazioni di inventario collegate tra loro in modo che sia possibile eseguirle come singola unità. Il visualizzatore di workflow di Ansible Tower consente agli utenti di progettare modelli di workflow. Per la maggior parte delle distribuzioni tipiche, è possibile utilizzare le credenziali della macchina per l'autenticazione.
- Accedere ad Ansible Tower e passare alla sezione Modelli.
- Selezionare Aggiunta di un nuovo modello di processo.
- Selezionare le credenziali già create. Queste sono le credenziali della macchina che deve essere gestita da Ansible Tower. Per ogni modello di processo, può essere presente un solo oggetto credenziali.
- Per la selezione del limite, selezionare Richiedi all'avvio. In questo modo, il modello di processo viene eseguito in base al nodo sottoposto a provisioning o a deprovisioning da Cloud Assembly. Se questa opzione non è selezionata, viene visualizzato un errore di limite non impostato quando viene distribuito il blueprint che contiene il modello di processo.
- Selezionare Aggiunta di un nuovo modello di workflow.
- Selezionare le credenziali già create e quindi definire l'inventario. Utilizzando il visualizzatore di workflow, progettare il modello di workflow.
Nella casella Limite dei modelli di processo o workflow è in genere possibile selezionare Richiedi all'avvio. In questo modo, il modello di processo o workflow viene eseguito in base al nodo sottoposto a provisioning o a deprovisioning da Cloud Assembly.
- È possibile visualizzare l'esecuzione dei modelli di processo o dei modelli di workflow richiamati da Cloud Assembly nella scheda Processi di Ansible Tower.
Procedura
risultati
Ansible Tower è disponibile per l'uso nei modelli cloud.
Operazioni successive
Aggiungere i componenti di Ansible Tower ai modelli cloud desiderati. È necessario specificare il modello di processo applicabile con l'autorizzazione di esecuzione per l'utente specificato nell'account di integrazione.
- Nella pagina della tela del modello cloud, selezionare Ansible sotto l'intestazione Gestione configurazione nel menu delle opzioni del blueprint e trascinare il componente di Ansible Tower nella tela.
- Utilizzare il pannello a destra per configurare le proprietà di Ansible Tower appropriate, ad esempio i modelli di processo.
Quando si aggiunge un riquadro Ansible Tower a un modello cloud, vRealize Automation crea la voce dell'host per la macchina virtuale collegata in Ansible Tower. Per impostazione predefinita, vRealize Automation utilizza il nome della risorsa della macchina virtuale per creare la voce dell'host, ma è possibile specificare qualsiasi nome utilizzando la proprietà hostName
nel codice YAML del blueprint. Per comunicare con la macchina, vRealize Automation creerà la variabile host ansible_host: IP Address
per la voce dell'host. È possibile ignorare il comportamento predefinito per configurare la comunicazione utilizzando il nome di dominio completo, specificando la parola chiave ansible_host
in hostVariables
e fornendo il nome di dominio completo come valore. Il seguente frammento di codice YAML mostra un esempio di come è possibile configurare la comunicazione del nome host e del nome di dominio completo:
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 questo esempio si sovrascrive il valore ansible_host
predefinito fornendo il nome di dominio completo. Questo può essere utile per gli utenti che desiderano che Ansible Tower si connetta alla macchina host utilizzando il nome di dominio completo.
Il valore predefinito di hostVariables
nel codice YAML sarà ansible_host:IP_address
e l'indirizzo IP viene utilizzato per comunicare con il server.
Se la proprietà count del codice YAML è maggiore di 1 per Ansible Tower, il nome host può essere mappato a qualsiasi proprietà della rispettiva macchina virtuale. L'esempio seguente mostra la mappatura per una risorsa di una macchina virtuale denominata Ubuntu-VM se si desidera che la relativa proprietà address sia mappata al nome host.
hostname: '${resource.Ubuntu-VM.address[count.index]}'
Quando si aggiunge un componente Ansible Tower a un modello cloud, è possibile il modello di processo da richiamare nel codice YAML del modello cloud. È inoltre possibile specificare i modelli di workflow o una combinazione di modelli di processo e modelli di workflow. Se non si specifica il tipo di modello, per impostazione predefinita vRealize Automation presuppone che venga richiamato un modello di processo.
Il seguente frammento di codice YAML illustra un esempio di come è possibile richiamare una combinazione di modelli di processo e workflow in un modello cloud di Ansible Tower.
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
Sono stati aggiunti maxConnectionsRetries
e maxJobRetries
per gestire gli errori relativi ad Ansible. I modelli cloud accettano il valore personalizzato e, nel caso non venga specificato alcun valore, utilizzano il valore predefinito. Per maxConnectionRetries
, il valore predefinito è 10, mentre per maxJobRetries
è 3.
I modelli cloud di Cloud Assembly per le integrazioni di Ansible Tower includono la proprietà useDefaultLimit
con un valore true o false per definire la posizione di esecuzione dei modelli di Ansible. I modelli di Ansible possono essere modelli di processo o modelli di workflow. Se questo valore è impostato su true, i modelli specificati vengono eseguiti per la macchina specificata nella casella Limite della pagina dei modelli di Ansible. Se il valore è impostato su false, i modelli vengono eseguiti per la macchina sottoposta a provisioning, ma gli utenti devono selezionare la casella di controllo Richiedi all'avvio nella pagina dei modelli di Ansible Tower. Per impostazione predefinita, il valore di questa proprietà è false. Il seguente esempio di codice YAML illustra come viene visualizzata la proprietà useDefaultLimit
nei modelli cloud.
templates: provision: - name: ping aws_credentials type: job useDefaultLimit: false extraVars: '{"rubiconSurveyJob" : "checkSurvey"}'
Inoltre, come illustrato nell'esempio precedente, è possibile utilizzare la proprietà extraVars
per specificare variabili aggiuntive o variabili di sondaggio. Questa funzionalità può essere utile per l'esecuzione di modelli che richiedono input. Se un utente mantiene la variabile di sondaggio, è necessario passare la variabile nella sezione extraVars
del modello cloud per evitare errori.
Gli utenti con privilegi di amministratore del cloud possono modificare il progetto di una distribuzione contenente le risorse Ansible Open Source e Ansible Tower. La funzionalità è disponibile come azione giorno 2 a livello di distribuzione.
Per modificare il progetto per una distribuzione Ansible, selezionare l'opzione Modifica progetto nel menu Azioni della distribuzione, come mostrato nella pagina Distribuzioni di Cloud Assembly, quindi scegliere il progetto di destinazione e fare clic su Invia nella finestra di dialogo visualizzata.
Anche se l'integrazione di Ansible Tower non supporta la proprietà groups, esiste un'alternativa per i clienti per implementare la funzionalità equivalente utilizzando i tag della macchina virtuale e il plug-in dell'inventario VMware, come descritto nell'articolo seguente: https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html
- Utilizzare
ansible_host
(ad esempio, il nome di dominio completo) ehostName
nel modello cloud. - In AWX, attivare l'aggiornamento all'avvio, ossia eseguire la sincronizzazione con il vCenter per i nuovi host prima di eseguire il playbook. La sincronizzazione unirà le voci dell'host del nome di dominio completo aggiunte da vRealize Automation e importate dal plug-in dell'inventario di VMware e assegnerà host ai gruppi. I gruppi di inventario vengono creati dai valori dei tag VM utilizzando le variabili di origine della sincronizzazione riportate sopra.
Per un'implementazione esemplificativa, vedere il modello cloud seguente.
# 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}