Cloud Assembly supporta l'integrazione con la gestione della configurazione di Ansible Open Source. Dopo aver configurato l'integrazione, è possibile aggiungere i componenti di Ansible a distribuzioni nuove o esistenti.

Quando si integra Ansible Open Source con Cloud Assembly, è possibile configurarlo in modo che esegua uno o più playbook di Ansible in un determinato ordine quando viene eseguito il provisioning di una nuova macchina, per automatizzare la gestione della configurazione. È possibile specificare i playbook desiderati nel modello cloud di una distribuzione.

Quando si configura un'integrazione di Ansible, è necessario specificare la macchina host di Ansible Open Source, nonché il percorso del file di inventario che definisce le informazioni per la gestione delle risorse. È inoltre necessario specificare un nome e una password per accedere all'istanza di Ansible Open Source. In un secondo momento, quando si aggiunge un componente di Ansible a una distribuzione, è possibile aggiornare la connessione in modo che utilizzi l'autenticazione basata su chiave.

Per impostazione predefinita, Ansible utilizza SSH per connettersi alle macchine fisiche. Se si utilizzano macchine Windows come specificato nel modello cloud con la proprietà osType di Windows, la variabile connection_type viene impostata automaticamente su winrm.

Inizialmente, l'integrazione di Ansible utilizza le credenziali utente/password o utente/chiave fornite nell'integrazione per connettersi alla macchina di controllo Ansible. Una volta completata la connessione, viene convalidata la sintassi dei playbook forniti nel modello cloud.

Se la convalida viene completata correttamente, viene creata una cartella di esecuzione sulla macchina di controllo Ansible in ~/var/tmp/vmware/provider/user_defined_script/. Questa è la posizione da cui gli script vengono eseguiti per aggiungere l'host all'inventario, creare file host_vars, tra cui la configurazione della modalità di autenticazione per la connessione all'host e infine eseguire i playbook. A questo punto vengono utilizzate le credenziali fornite nel modello cloud per connettersi all'host dalla macchina di controllo Ansible.

L'integrazione di Ansible supporta le macchine fisiche che non utilizzano un indirizzo IP. Per le macchine con provisioning su cloud pubblici come AWS, Azure e GCP, la proprietà address nella risorsa creata viene compilata con l'indirizzo IP pubblico della macchina solo quando la macchina è connessa a una rete pubblica. Per le macchine non connesse a una rete pubblica, l'integrazione di Ansible cerca l'indirizzo IP dalla rete collegata alla macchina. Se sono presenti più reti collegate, l'integrazione di Ansible cerca la rete con il valore minimo di deviceIndex, ovvero l'indice della scheda NIC (Network Interface Card) collegata alla macchina. Se la proprietà deviceIndex non è specificata nel blueprint, l'integrazione utilizza la prima rete collegata.

Vedere Che cos'è la gestione della configurazione in Cloud Assembly per ulteriori informazioni sulla configurazione di Ansible Open Source per l'integrazione in Cloud Assembly.

Prerequisiti

  • La macchina di controllo Ansible deve utilizzare una versione di Ansible. Fare riferimento alla Matrice di supporto di vRealize Automation per informazioni sulle versioni supportate.
  • Il livello di dettaglio del registro Ansible deve essere impostato sul valore predefinito pari a zero.
  • L'utente deve disporre dell'accesso in lettura/scrittura alla directory in cui si trova il file di inventario di Ansible. L'utente deve inoltre disporre dell'accesso in lettura/scrittura al file di inventario, se esiste già.
  • Se si utilizza un utente non root con l'opzione sudo, assicurarsi che nel file sudoers sia impostato quanto segue:

    Defaults:user_name !requiretty

    e

    username ALL=(ALL) NOPASSWD: ALL

  • Verificare che il controllo della chiave host sia disattivato impostando host_key_checking = False in /etc/ansible/ansible.cfg o ~/.ansible.cfg.
  • Assicurarsi che la password del vault sia impostata aggiungendo la seguente riga al file /etc/ansible/ansible.cfg o ~/.ansible.cfg:
    vault_password_file = /path/to/password_file
    Il file della password di Vault contiene la password in testo normale e viene utilizzato solo quando i modelli cloud o le distribuzioni forniscono la combinazione di nome utente e password da utilizzare tra ACM e il nodo come mostrato nell'esempio seguente.
    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
  • Per evitare errori della chiave host durante il tentativo di esecuzione dei playbook, è consigliabile includere le seguenti impostazioni in /etc/ansible/ansible config.
    [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.

Procedura

  1. Selezionare Infrastruttura > Connessioni > Integrazioni e fare clic su Aggiungi integrazione.
  2. Fare clic su Ansible.
    Viene visualizzata la pagina di configurazione di Ansible.
  3. Immettere il nome host, il percorso del file di inventario e le altre informazioni necessarie per l'istanza di Ansible Open Source.
  4. Fare clic su Convalida per verificare l'integrazione.
  5. Fare clic su Aggiungi.

risultati

Ansible è disponibile per l'uso con i modelli cloud.

Operazioni successive

Aggiungere i componenti di Ansible ai modelli cloud desiderati.

  1. Nella pagina della tela del modello cloud, selezionare Ansible sotto l'intestazione Gestione configurazione nel menu delle opzioni del modello cloud e trascinare il componente di Ansible nella tela.
  2. Utilizzare il pannello a destra per configurare le proprietà di Ansible appropriate, ad esempio specificando i playbook da eseguire.

In Ansible, gli utenti possono assegnare una variabile a un singolo host, quindi utilizzarla in un secondo momento nei playbook. L'integrazione di Ansible Open Source consente di specificare queste variabili host nei modelli cloud. La proprietà hostVariables deve essere in formato YAML corretto, come previsto dalla macchina di controllo Ansible, e questo contenuto verrà collocato nella seguente posizione:

parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml

La posizione predefinita del file di inventario di Ansible è definita nell'account Ansible aggiunto nella pagina Integrazioni in Cloud Assembly. L'integrazione di Ansible non convaliderà la sintassi YAML hostVariable nel modello cloud, ma la macchina di controllo Ansible genererà un errore quando si esegue un playbook in caso di formattazione o sintassi non corretta.

Il seguente frammento di codice YAML del modello cloud mostra un esempio di utilizzo della proprietà 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}
Le integrazioni di Ansible prevedono che le credenziali di autenticazione siano presenti in un modello cloud in uno dei modi seguenti:
  • Nome utente e password nella risorsa Ansible.
  • Nome utente e file di chiave privata nella risorsa Ansible.
  • Nome utente nella risorsa Ansible e chiave privata nella risorsa di elaborazione specificando remoteAccess in generatedPublicPrivateKey.

Quando si crea un'integrazione di Ansible Open Source, è necessario fornire le informazioni di accesso per consentire all'utente dell'integrazione di connettersi alla macchina di controllo Ansible utilizzando SSH. Per eseguire i playbook con un'integrazione, è possibile specificare un altro utente nel codice YAML di integrazione. La proprietà username è obbligatoria e necessaria per connettersi alla macchina virtuale in cui Ansible apporta modifiche. La proprietà playbookRunUsername è facoltativa e può essere fornita per eseguire il playbook nel nodo Ansible. Il valore predefinito di playbookRunUsername è il nome utente di integrazione dell'endpoint Ansible.

Se si specifica un altro utente, tale utente deve disporre dell'accesso in scrittura al file host di Ansible e deve disporre dell'autorizzazione per la creazione di file di chiavi private.

Quando si aggiunge un riquadro Ansible Open Source a un modello cloud, vRealize Automation crea la voce dell'host per la macchina virtuale collegata. 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:
  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 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 Open Source 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 Open Source, 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]}' 

Nei modelli cloud, assicurarsi che il percorso del playbook Ansible sia accessibile all'utente specificato nell'account di integrazione. È possibile utilizzare un percorso assoluto per specificare la posizione del playbook, ma non è necessario. È consigliabile un percorso assoluto per la cartella principale dell'utente in modo che il percorso rimanga valido anche se le credenziali di integrazione di Ansible cambiano nel tempo.