Puede integrar Ansible Automation Platform, anteriormente Ansible Tower, con Automation Assembler para admitir la administración de la configuración de los recursos implementados. Después de configurar la integración, es posible agregar componentes virtuales de Ansible Automation Platform a implementaciones nuevas o existentes desde el editor de plantillas de nube.

Requisitos previos

  • Otorgue a los usuarios que no sean administradores los permisos adecuados para acceder a Ansible Automation Platform. Existen dos opciones que funcionan para la mayoría de las configuraciones. Elija la más adecuada para su configuración.
    • Otorgue a los usuarios funciones de administrador de inventario y administrador de plantillas de trabajo en el nivel de la organización.
    • Otorgue a los usuarios permisos de administrador para un inventario en particular y la función de ejecución para todas las plantillas de trabajo utilizadas para el aprovisionamiento.
  • Debe configurar las credenciales y las plantillas adecuadas en Ansible Automation Platform para utilizarlas con sus implementaciones. Las plantillas pueden ser plantillas de trabajo o de flujo de trabajo. Las plantillas de trabajo definen el inventario y la guía para su uso con una implementación. Existe una asignación 1:1 entre una plantilla de trabajo y una guía. Las guías usan una sintaxis similar a YAML para definir las tareas que están asociadas a la plantilla. Para la mayoría de las implementaciones típicas, utilice las credenciales de máquina para la autenticación.

    Las plantillas de flujo de trabajo permiten a los usuarios crear secuencias que consisten en cualquier combinación de plantillas de trabajo, sincronizaciones de proyectos y sincronizaciones de inventario vinculadas entre sí para que pueda ejecutarlas como una sola unidad. El visualizador de flujos de trabajo de Ansible Automation Platform ayuda a los usuarios a diseñar plantillas de flujo de trabajo. Para la mayoría de las implementaciones típicas, se pueden usar las credenciales de máquina para la autenticación.

    Si trabaja con Ansible Automation Platform, debe definir un entorno de ejecución en Ansible Controller para satisfacer las dependencias de Ansible Runner. Para obtener más información sobre entornos de ejecución e imágenes de contenedor, consulte la documentación de Ansible. En particular, consulte https://docs.ansible.com/automation-controller/4.2.0/html/userguide/execution_environments.html.

    1. Inicie sesión en Ansible Automation Platform y desplácese a la sección Plantillas.
    2. Seleccione Agregar una nueva plantilla de trabajo.
      • Seleccione la credencial que haya creado. Estas son las credenciales de la máquina que administrará Ansible Automation Platform. Para cada plantilla de trabajo, puede haber un objeto de credenciales.
      • Para la selección de límite, seleccione Preguntar al iniciar. Esto garantiza que la plantilla de trabajo se ejecute en el nodo que se va a aprovisionar o cuya provisión se va a anular desde Automation Assembler. Si no se selecciona esta opción, el error Límite no establecido aparecerá cuando se implemente el blueprint que contiene la plantilla de trabajo.
    3. Seleccione Agregar una nueva plantilla de flujo de trabajo.
      • Seleccione las credenciales que ya creó y, a continuación, defina el inventario. Con el visualizador de flujos de trabajo, diseñe la plantilla de flujo de trabajo.

      En la casilla Límite de plantillas de flujo de trabajo o de trabajo, por lo general, se puede seleccionar Preguntar al iniciar. Esta selección garantiza que la plantilla de trabajo o de flujo de trabajo se ejecute en el nodo que se aprovisionará o cuya provisión se va a anular desde Automation Assembler.

  • Puede ver la ejecución de las plantillas de trabajo o de flujo de trabajo invocadas desde Automation Assembler en la pestaña Trabajos de Ansible Tower.

Procedimiento

  1. Seleccione Infraestructura > Conexiones > Integraciones y haga clic en Agregar integración.
  2. Haga clic en Ansible Tower.
    Se abrirá la página de configuración de Ansible.
  3. Introduzca el nombre de host, que puede ser una dirección IP y otra información necesaria para la instancia de Ansible Automation Platform.
  4. Introduzca la información pertinente en los campos Nombre de usuario y Contraseña de la autenticación basada en interfaz de usuario para la instancia correspondiente de Ansible Automation Platform.
  5. Haga clic en Validar para verificar la integración.
  6. Introduzca un valor apropiado para Nombre y Descripción para la integración.
  7. Haga clic en Agregar.

Resultados

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

Qué hacer a continuación

Agregue componentes de Ansible Automation Platform a las plantillas de nube que desee. Debe especificar la plantilla de trabajo aplicable con permiso de ejecución para el usuario especificado en la cuenta de integración.

  1. En la página de lienzo de plantilla de nube, seleccione Ansible en el encabezado Administración de la configuración del menú de opciones de blueprint y arrastre el componente Ansible Automation Platform al lienzo.
  2. Utilice el panel de la derecha para configurar las propiedades de Ansible Automation Platform adecuadas. Por ejemplo, las plantillas de trabajo.

Cuando agrega un mosaico de Ansible Automation Platform a una plantilla de nube, VMware Aria Automation crea la entrada de host para la máquina virtual asociada en Ansible Automation Platform. De forma predeterminada, VMware Aria 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, VMware Aria 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_Tower_1:
	type: Cloud Ansible Tower
	properties:
		host: name of host
		account: name of account
		hostName: resource name
		hostVariables:
			ansible_host:Host FQDN
			

En este ejemplo, se reemplaza el valor ansible_host predeterminado proporcionando el FQDN. Esto puede resultar útil para los usuarios que desean que Ansible Tower 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 Automation Platform, 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]}' 

Cuando agrega un componente de Ansible Automation Platform a una plantilla de nube, puede especificar la plantilla de trabajo a la cual llamar en el YAML de la plantilla de nube. También puede especificar plantillas de flujo de trabajo, o una combinación de plantillas de trabajo y plantillas de flujo de trabajo. Si no especifica el tipo de plantilla, de forma predeterminada, VMware Aria Automation supone que está llamando a una plantilla de trabajo.

El siguiente fragmento de YAML muestra un ejemplo de cómo se puede llamar a una combinación de plantillas de trabajo y flujo de trabajo en una plantilla de nube de 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      

Se agregaron maxConnectionsRetries y maxJobRetries para gestionar errores relacionados con Ansible. Las plantillas de nube aceptan el valor personalizado y, si no se proporciona ningún valor, utiliza el valor predeterminado. Para maxConnectionRetries, el valor predeterminado es 10 y para maxJobRetries el valor predeterminado es 3.

Nota: Las versiones anteriores de VMware Aria Automation solo admitían la ejecución de plantillas de trabajo mediante el esquema jobTemplate en la plantilla de nube. jobTemplate ya está obsoleto y podría eliminarse en futuras versiones. Por ahora, el uso de la propiedad jobTemplate seguirá funcionando según lo esperado. Para ejecutar plantillas de flujo de trabajo y utilizar funciones adicionales, se recomienda utilizar el esquema de plantillas.

Las plantillas de Automation Assembler para integraciones de Ansible Automation Platform incluyen la propiedad useDefaultLimit con un valor verdadero o falso para definir dónde se ejecutan las plantillas de Ansible. Las plantillas de Ansible pueden ser plantillas de trabajo o de flujo de trabajo. Si este valor se establece en verdadero, las plantillas especificadas se ejecutan en la máquina especificada en el cuadro Límite de la página Plantillas de Ansible. Si el valor se establece en falso, las plantillas se ejecutan en la máquina aprovisionada, pero los usuarios deben activar la casilla Preguntar al iniciar en la página Plantillas de Ansible Automation Platform. De forma predeterminada, el valor de esta propiedad es false. El siguiente ejemplo de YAML muestra cómo aparece la propiedad useDefaultLimit en las plantillas de nube.

templates:
  provision:
    - name: ping aws_credentials
      type: job
      useDefaultLimit: false
      extraVars: '{"rubiconSurveyJob" : "checkSurvey"}'

Además, como se muestra en el ejemplo anterior, puede utilizar la propiedad extraVars para especificar variables adicionales o variables de encuesta. Esta capacidad puede ser útil para ejecutar plantillas que requieren entradas. Si un usuario ha mantenido la variable de encuesta, debe enviar la variable en la sección extraVars de la plantilla de nube para evitar errores.

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 Automation Platform. 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 Automation Assembler, seleccione el proyecto de destino y haga clic en Enviar en el cuadro de diálogo que se muestra.

Si bien la integración de Ansible Tower no admite la propiedad de grupos, existe una alternativa para que los clientes implementen funcionalidades equivalentes mediante etiquetas de máquina virtual y el complemento de inventario de VMware, como se describe en el siguiente artículo: https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html

Los usuarios deben hacer dos cambios para que funcione:
  • Utilice ansible_host (p. ej., FQDN) y hostName en la plantilla de nube.
  • En AWX, active la actualización en la marca de inicio; es decir, sincronice con la instancia de vCenter los hosts nuevos antes de ejecutar el cuaderno de estrategias. La sincronización combinará las entradas de host de FQDN agregadas por VMware Aria Automation e importadas por el complemento de inventario de VMware y asignará hosts a los grupos. Los grupos de inventario se crean a partir de los valores de etiquetas de máquina virtual mediante las variables de origen de sincronización anteriores.
Nota: Aunque VMware no admite formalmente el uso de AWX, funcionará en el caso descrito aquí.

Para ver un ejemplo de implementación, consulte la siguiente plantilla de nube.

# 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.mycompany.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.mycompany.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}