Cloud Assembly admite la integración con la administración de la configuración de código abierto de Ansible. Después de configurar la integración, es posible agregar componentes de Ansible a implementaciones nuevas o existentes.

Cuando se integra el código abierto de Ansible con Cloud Assembly, es posible configurarlo para ejecutar uno o varios cuadernos de estrategias de Ansible en un orden determinado cuando se aprovisiona una nueva máquina a fin de automatizar la administración de la configuración. Especifique los cuadernos de estrategias deseados en la plantilla de nube para una implementación.

Al configurar una integración de Ansible, debe especificar el equipo host de código abierto de Ansible, así como la ruta de acceso del archivo de inventario en el que se define la información para la administración de recursos. Además, debe proporcionar un nombre y una contraseña para acceder a la instancia de código abierto de Ansible. Más adelante, cuando agregue un componente Ansible a una implementación, podrá actualizar la conexión para utilizar la autenticación basada en claves.

De forma predeterminada, Ansible utiliza SSH para conectarse a las máquinas físicas. Si utiliza máquinas de Windows como se especifica en la plantilla de nube con la propiedad osType Windows, la variable connection_type se establece automáticamente en winrm.

Inicialmente, la integración de Ansible utiliza las credenciales de usuario/contraseña o usuario/clave proporcionadas en la integración para conectarse a la máquina de control de Ansible. Una vez que la conexión se establezca correctamente, se validará la sintaxis de los cuadernos de estrategias proporcionados en la plantilla de nube.

Si la validación se realiza correctamente, se crea una carpeta de ejecución en la máquina de control de Ansible en ~/var/tmp/vmware/provider/user_defined_script/. Esta es la ubicación a partir de la que se ejecutan los scripts para agregar el host al inventario, crear los archivos de variables de host (incluida la configuración del modo de autenticación para conectarse al host) y, por último, ejecutar los cuadernos de estrategias. En este punto, las credenciales proporcionadas en la plantilla de nube se utilizan para conectarse al host desde la máquina de control de Ansible.

La integración de Ansible admite máquinas físicas que no utilizan una dirección IP. En el caso de máquinas aprovisionadas en nubes públicas, como AWS, Azure y GCP, la propiedad de dirección del recurso creado se rellena con la dirección IP pública de la máquina solo cuando la máquina está conectada a una red pública. Cuando las máquinas no están conectadas a una red pública, la integración de Ansible busca la dirección IP en la red conectada a la máquina. Si hay varias redes conectadas, la integración de Ansible busca la red con el menor deviceIndex; es decir, el índice de la tarjeta de interfaz de red (Network Interface Card, NIC) conectada a la máquina. Si no se especifica la propiedad deviceIndex en el blueprint, la integración usa la primera red conectada.

Consulte Qué es la administración de la configuración en Cloud Assembly si desea obtener más información sobre la configuración del código abierto de Ansible para la integración en Cloud Assembly.

Requisitos previos

  • La máquina de control de Ansible debe utilizar una versión de Ansible. Consulte la matriz de compatibilidad de vRealize Automation para obtener información sobre las versiones compatibles.
  • El nivel de detalle del registro de Ansible se debe establecer en cero como valor predeterminado.
  • El usuario debe tener acceso de lectura o escritura al directorio en el que se encuentra el archivo de inventario de Ansible. Asimismo, el usuario debe tener acceso de lectura o escritura al archivo de inventario (si este ya existe).
  • Si utiliza un usuario que no es raíz con la opción sudo, asegúrese de que se establezca lo siguiente en el archivo sudoers:

    Defaults:user_name !requiretty

    Así como lo siguiente:

    username ALL=(ALL) NOPASSWD: ALL

  • Asegúrese de que la comprobación de claves de host esté desactivada estableciendo host_key_checking = False en /etc/ansible/ansible.cfg o ~/.ansible.cfg.
  • Asegúrese de que se defina la contraseña de Vault agregando la siguiente línea al archivo /etc/ansible/ansible.cfg o ~/.ansible.cfg:
    vault_password_file = /path/to/password_file
    El archivo de contraseña de almacén contiene la contraseña en texto sin formato y se utiliza únicamente cuando las plantillas de nube o las implementaciones ofrecen la combinación de nombre de usuario y contraseña que se utilizará entre ACM y el nodo como se muestra en el siguiente ejemplo.
    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
  • Para evitar errores de claves de host al intentar ejecutar las guías, se recomienda que incluya la siguiente configuración en /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.

Procedimiento

  1. Seleccione Infraestructura > Conexiones > Integraciones y haga clic en Agregar integración.
  2. Haga clic en Ansible.
    Se abrirá la página de configuración de Ansible.
  3. Introduzca el nombre de host, la ruta de acceso del archivo de inventario y otra información necesaria para la instancia de código abierto de Ansible.
  4. Haga clic en Validar para comprobar la integración.
  5. Haga clic en Agregar.

Resultados

Ansible está disponible para su uso con plantillas de nube.

Qué hacer a continuación

Agregue componentes de Ansible a las plantillas de nube que desee.

  1. En la página de lienzo de la plantilla de nube, seleccione Ansible en el encabezado Administración de la configuración del menú de opciones de la plantilla de nube y arrastre el componente de Ansible al lienzo.
  2. Utilice el panel de la derecha para configurar las propiedades de Ansible adecuadas, por ejemplo, los cuadernos de estrategias que desea ejecutar.

En Ansible, los usuarios pueden asignar una variable a un solo host y, a continuación, utilizarla posteriormente en cuadernos de estrategias. La integración de código abierto de Ansible permite especificar estas variables de host en las plantillas de nube. La propiedad hostVariables debe tener el formato YAML adecuado, según lo espera la máquina de control de Ansible, y este contenido se colocará en la siguiente ubicación:

parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml

La ubicación predeterminada del archivo de inventario de Ansible se define en la cuenta de Ansible según se agregó en la página Integraciones de Cloud Assembly. La integración de Ansible no validará la sintaxis YAML de hostVariable en la plantilla de nube, pero la máquina de control de Ansible generará un error cuando ejecute un cuaderno de estrategia en el caso de un formato o una sintaxis incorrectos.

El siguiente fragmento de YAML de plantilla de nube muestra un ejemplo de uso de la propiedad 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}
Las integraciones de Ansible esperan que las credenciales de autenticación estén presentes en una plantilla de nube de una de las siguientes formas:
  • Nombre de usuario y contraseña en el recurso de Ansible
  • Nombre de usuario y privateKeyFile en el recurso de Ansible
  • Nombre de usuario en el recurso de Ansible y la instancia de privateKey en el recurso informático (especificando remoteAccess para generatedPublicPrivateKey)

Al crear una integración de código abierto de Ansible, debe proporcionar información de inicio de sesión para que el usuario de integración se conecte con la máquina de control de Ansible mediante SSH. Para ejecutar guías con una integración, puede especificar un usuario diferente en el código YAML de integración. La propiedad username es obligatoria y necesaria para conectarse a la máquina virtual en la que Ansible realizará cambios. La propiedad playbookRunUsername es opcional y se puede proporcionar para ejecutar el manual en el nodo de Ansible. El valor predeterminado de playbookRunUsername es el nombre de usuario de la integración del endpoint de Ansible.

Si especifica un usuario diferente, este debe tener acceso de escritura al archivo de hosts de Ansible y debe tener permiso para crear archivos de clave privada.

Cuando se agrega un mosaico de código abierto de Ansible a una plantilla de nube, vRealize Automation crea la entrada de host para la máquina virtual asociada. De forma predeterminada, vRealize Automation utiliza el nombre del recurso de la máquina virtual para crear la entrada de host, pero puede especificar cualquier nombre mediante la propiedad hostName en el YAML del blueprint. Para comunicarse con la máquina, vRealize Automation crea la variable de host ansible_host: IP Address para la entrada del host. Puede anular el comportamiento predeterminado para configurar la comunicación mediante el FQDN especificando la palabra clave ansible_host en hostVariables y proporcionando el FQDN como su valor. El siguiente fragmento de código de YAML muestra un ejemplo de cómo se puede configurar la comunicación de nombre de host y FQDN:

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
			

En este ejemplo, se reemplaza el valor ansible_host predeterminado proporcionando el FQDN. Esto puede resultar útil para usuarios que desean que la instancia de código abierto de Ansible se conecte a la máquina host mediante el FQDN.

El valor predeterminado de hostVariables en el YAML es ansible_host:IP_address y la dirección IP se utiliza para comunicarse con el servidor.

Si la propiedad de recuento de YAML es superior a 1 para Ansible de código abierto, el nombre de host podría asignarse a cualquiera de las propiedades de la máquina virtual correspondiente. El siguiente ejemplo muestra la asignación de un recurso de máquina virtual con el nombre Ubuntu-VM si se desea asignar su propiedad de dirección al nombre de host.

 hostname: '${resource.Ubuntu-VM.address[count.index]}' 

En las plantillas de nube, asegúrese de que el usuario especificado en la cuenta de integración tenga acceso a la ruta del cuaderno de estrategia de Ansible. Puede usar una ruta de acceso absoluta para especificar la ubicación del cuaderno de estrategia, pero no es necesario. Se recomienda usar una ruta de acceso absoluta a la carpeta de inicio del usuario para que la ruta mantenga su validez incluso si las credenciales de integración de Ansible cambian con el tiempo.

Los usuarios con privilegios de administrador de nube pueden cambiar el proyecto de una implementación que contenga recursos de código abierto de Ansible y Ansible Tower. La funcionalidad está disponible como una acción del día 2 en el nivel de implementación.

Para cambiar el proyecto de una implementación de Ansible, seleccione la opción Cambiar proyecto en el menú Acciones de la implementación, como se muestra en la página Implementaciones de Cloud Assembly, seleccione el proyecto de destino y haga clic en Enviar en el cuadro de diálogo que se muestra.