vRealize Automation 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 vRealize Automation 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 winm.

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 vRealize Automation Cloud Assembly per ulteriori informazioni sulla configurazione di Ansible Open Source per l'integrazione in vRealize Automation Cloud Assembly.

Prerequisiti

  • La macchina di controllo di Ansible deve utilizzare Ansible 2.6.0 o una versione successiva.
  • 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) NOPASSD: ALL

  • Verificare che il controllo della chiave host sia disabilitato 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 ne genererà una 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.

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.