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!