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!




