Configurando a integração nativa do vRealize Automation 8.x com o Ansible

Configurando a integração nativa do vRealize Automation 8.x com o Ansible

O vRealize Automation oferece suporte nativo a vários gerenciadores de configuração, como o Ansible, Ansible Tower, Puppet e, claro, o vRealize SaltStack Config. A ideia aqui é ser o mais simples possível e apenas demonstrar a utilização do Ansible no vRA 8.x em laboratório. Se você procura uma solução moderna, rápida e eficiente, a recomendação é usar o VMware Aria Automation Config (antes conhecido como vRealize SaltStack Config).

Estou utilizando o Ubuntu 22.04 e agora vamos instalar o Ansible, mas antes disso, é necessário validar na matriz de compatibilidade do vRA 8.x qual versão é suportada. Estou com a versão 8.8.2 do vRA no meu lab, então a versão máxima suportada até a data que escrevo este artigo é a 2.12.

Então executei o comando sudo apt-cache policy ansible-core para ver quais versões estão disponíveis e mandei bala na 2.12. Instalei o sshpass também que servirá depois para executarmos os playbooks.

sudo apt-get install ansible-core=2.12.0-1ubuntu0.1 sshpass -y

Ou se não ligar para suportabilidade (e for um ambiente de lab), utilize a última versão disponível do ansible.

sudo apt-get install ansible sshpass -y

Agora vamos criar o arquivo para o ansible vault password.

mkdir /home/conza/.creds
echo 'M1nh4S3nh@S3gur@' > /home/conza/.creds/ansible_vault_password
chmod 600 /home/conza/.creds/ansible_vault_password

Criar a estrutura de pastas e arquivos para o Ansible dentro de /etc.

sudo mkdir /etc/ansible
sudo chown conza /etc/ansible
sudo mkdir /etc/ansible/playbooks
nano /etc/ansible/ansible.cfg

Configurar o arquivo de configuração do Ansible ansible.cfg (/etc/ansible/).

[defaults]
host_key_checking = False
vault_password_file = /home/conza/.creds/ansible_vault_password

[paramiko_connection]
record_host_keys = False

[ssh_connection]
ssh_args = -o UserKnownHostsFile=/dev/null

Como estamos utilizando um usuário non-root, vamos adicionar a linha abaixo no arquivo. Basta executar sudo visudo.

conza ALL=(ALL) NOPASSWD:ALL

Agora estamos com tudo pronto para configurar a integração nativa do vRA 8.x. Vá até Cloud Assembly > Infrastructure > Integration > Add Integration > Ansible e complete as informações do seu servidor Ansible.

Este artigo poderia ficar por aqui, mas eu gosto de matar a cobra a mostrar a cobra morta 🙂 então vamos configurar um playbook no Ansible e um cloud template no vRA para vermos como ficaria. Neste exemplo a ideia é pegar algumas valores das propriedades do cloud template e escrever em um arquivo .txt via Ansible. Vamos ao playbook. Crie o arquivo test-var.yml em /etc/ansible/playbooks (nano /etc/ansible/playbooks/test-var.yml).

- name: Test Var
  hosts: all
  tasks:
    - name: "VM Name"
      shell: echo "{{ vmname }}" >> ~/test_var.txt
    - name: "IP Address"
      shell: echo "{{ ip }}" >> ~/test_var.txt
    - name: "Cluster"
      shell: echo "{{ cluster }}" >> ~/test_var.txt
    - name: "Texto"
      shell: echo "{{ texto }}" >> ~/test_var.txt

O cloud template ficaria assim. Obs: estou utilizando a senha exposta no cloud template apenas para agilizar o processo, em ambiente produtivo você usaria o secrets do vRA ou ainda uma private key e adicionar ela no cloud template com a propriedade privateKeyFile.

formatVersion: 1
inputs:
  cluster:
    type: string
    title: Cluster
    default: compute-vsan
    oneOf:
      - title: Compute vSAN
        const: compute-vsan
      - title: Compute iSCSI
        const: compute-iscsi
  texto:
    type: string
    title: Texto qualquer
resources:
  Cloud_vSphere_Machine:
    type: Cloud.vSphere.Machine
    properties:
      name: CAV-T-ANS-
      image: Ubuntu 20.04
      cpuCount: 1
      totalMemoryMB: 1024
      customizationSpec: vRA-Linux
      networks:
        - network: ${resource.Cloud_vSphere_Network.id}
          assignment: static
      constraints:
        - tag: ${"compute:" + (input.cluster)}
      storage:
        constraints:
          - tag: storage:tier1
  Cloud_Ansible:
    type: Cloud.Ansible
    properties:
      host: ${resource.Cloud_vSphere_Machine.*}
      osType: linux
      account: Caverna Ansible
      username: conza
      password: M1nh4S3nh@S3gur@
      playbooks:
        provision:
          - /etc/ansible/playbooks/test-var.yml
      hostVariables:
        vmname: ${resource.Cloud_vSphere_Machine.resourceName}
        ip: ${resource.Cloud_vSphere_Machine.address}
        cluster: ${input.cluster}
        texto: ${input.texto}
  Cloud_vSphere_Network:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: network:vmnet_100

Vou fazer o deploy do cloud template diretamente no Cloud Assembly e vamos ver como o nosso Ansible se comporta.

Finalizou a criação da máquina CAV-T-ANS-019 e já executou o playbook do Ansible.

E dentro da máquina está o arquivo com as variáveis conforme haviamos configurado. 

É possível fazer um teste com o comando abaixo para garantir que o vRA vai conseguir lidar com o Ansible. Se tudo funcionar corretamente, o texto TESTE123 será adicionado no arquivo hosts (/etc/ansible).

sudo ansible localhost -m ini_file -a "dest=/etc/ansible/hosts option=TESTE123 allow_no_value=true section= state=present" --connection=local

É isso aí, pessoal. Até a próxima!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *