ANSIBLE Series: Lab … Modo GUI = Web Console = AWX/Tower
Enquete rápida: Você já me segue nas redes sociais? Não?! É bem fácil, basta pesquisar @vicrlda em todas elas…
https://twitter.com/vicrlda
https://www.instagram.com/vicrlda/
https://www.facebook.com/vicrlda/
https://github.com/vicrlda
AWX? TOWER? O QUE SÃO?
A Red Hat, empresa detentora do Ansible, observando a necessidade do mercado e atendendo o desejo de inúmeros usuários entusiastas da ferramenta, criou uma alternativa “mais fácil de usar” em comparação ao Ansible CLI (linha de comando).
Trata-se de uma interface gráfica WEB, desenvolvida em python com o framework Django. Essa mesma foi idealizada com o intuito de centralizar toda a automação em um único lugar: logs, auditoria, segurança, equipes, workflows, surveys, etc.
Essa nova solução, inicialmente batizada de ‘AWX Project’, viu seu código-fonte ser aberto para a comunidade, ao mesmo tempo que foi lançada uma versão proprietária dela, chamada de ‘Ansible Tower’. O AWX está para o Tower assim como o Fedora está para o RHEL.
Ambas possuem o mesmo visual/aparência, menus e botões. Ou seja, de forma sucinta, o que se aprende em uma pode ser facilmente replicado na outra. A lógica por trás é igual. Contudo, existem particularidades que fazem toda a diferença na hora de optar, escolher para o uso e finalidade pretendida. A próxima seção irá ajudar e será um comparativo entre as duas.
TOWER (pago) vs. AWX (free)
Ansible Awx
- Gratuito e livre para usar
- Sem limite para a quantidade de nós/hosts presentes
- Disponível apenas no formato DOCKER (contêiner)
- Updates frequentes
- Ausência de HARDENING no código-fonte
- Não recomendado para fins corporativos/críticos
- Ciclo de vida muito curto entre as versões lançadas
Ansible Tower
- Licenciado by Red Hat
- Custo aprox. de U$ 10.000 a cada 100 hosts
- Alta disponibilidade
- Suporte 24×7
- Pacotes e Novas Versões recebem patches de segurança
- Updates estáveis
- Ciclo de vida mais longo que o AWX
WEB > CLI *** (maior e melhor) ***
Alguns dos principais recursos avançados que o TOWER/AWX apresenta, superando assim a linha de comando (ansible-cli):
- Controle entre equipes e organizações
- Usuários individuais
- Auditoria de atividades e gereciamento
- Controle de acesso
- LDAP, AD, SAML, e outros
- Dashboard único com gráficos na tela
ARQUITETURA E COMPONENTES
awx_task
Realiza todas as tasks do AWX. Escrito em Python, ele faz o uso do Ansible para executar todas as tasks que são agendadas e as que são disparadas pelo launch
awx_web
Fornece a interface Web e faz todo o intermédio entre o awx_task e o usuário. Como dito anteriormente, é escrito em Python e usa o framework DJango
awx_memcached
Usado para armazenamento de chave/valor (KV) que o AWX utiliza para armazenar algumas informações e realizar “troca de figurinhas” entre o awx_tasks e o awx_web
awx_rabbitmq
O RabbitMQ é um serviço de mensageria desenvolvido em Erlang, implementado para suportar mensagens em um protocolo denominado Advanced Message Queueing Protocol (AMQP). Na arquitetura do AWX ele é utilizado para realizar o troca de mensagens entre o awx_web e o awx_tasks permitindo o desacoplamento entre esses dois serviços
awx_postgres
Esse é o banco de dados utilizado pelo AWX para armazenar todas as informações criadas pela interface Web. Você pode usar tanto um banco já existente ou subir um container com o banco (o que é default na instalação)
PRE-REQUISITOS
Sistemas Operacionais
- Red Hat Enterprise Linux 6 64-bit
- Red Hat Enterprise Linux 7 64-bit
- CentOS 6 64-bit
- CentOS 7 64-bit
- Ubuntu 18.04 LTS 64-bit
- Ubuntu 20.04 LTS 64-bit
Hardware
- 2 GB RAM minimum (4+ GB RAM recommended)
- 2 GB RAM (minimum and recommended for Vagrant trial installations)
- 4 GB RAM is recommended per 100 forks
- 20 GB hard disk
INSTALAÇÃO E START *** (simples e rápido) ***
# yum update
# curl -fsSL https://get.docker.com/ | sh
# systemctl start docker
# systemctl status docker
# systemctl enable docker
# curl https://raw.githubusercontent.com/geerlingguy/awx-container/master/docker-compose.yml -o docker-compose.yml
# curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose --version
# docker-compose run
ou
# docker-compose up -d
# docker ps

+ TUTORIAIS + DETALHES (MAS AINDA DOCKER)
Lintel Technologies Blog (en-US)
https://howto.lintel.in/install-ansible-tower-awx-centos-7/
Git Oficial (en-US)
https://github.com/ansible/awx/blob/devel/INSTALL.md
Sidnei Weber Blog (pt-BR)
http://sidneiweber.com.br/instalar-ansible-awx-com-docker-no-centos-7/
Jeff Geerling Blog (en-US)
https://www.jeffgeerling.com/blog/2017/get-started-using-ansible-awx-open-source-tower-version-one-minute
https://github.com/geerlingguy/ansible-role-awx
USANDO A INTERFACE *** (dicas e truques) ***
Login
Use o ip do servidor e a porta 8052 sempre que quiser conectar.
Ex: http://X.X.X.X:8052
Para o nosso primeiro acesso vamos usar as credenciais padrão…
username: admin
password: (*******)password
Assim que entrar é altamente recomendável trocar essa senha por uma mais forte. Para isto clique no avatar localizado no canto superior direito.

Dashboard
Após o login somos direcionados a página inicial, também conhecida como ‘dashboard’, ou em tradução livre, painel de controle. Nela é possível ver diversos detalhes acerca do nosso servidor AWX bem como seu status geral, o que inclui:
- Número de hosts que executaram com êxito;
- Número de hosts que falharam;
- Número total de inventários;
- Número de projetos e o status de sincronização;
- Gráfico de cada playbook executado ao longo do tempo.

Organizações
Para adicionar novas organizações dentro do AWX, clique no ícone de mesmo nome que fica do lado esquerdo. Depois no botão ADD, coloque um nome e breve descrição da mesma. Por fim, SAVE para guardar as informações.

Usuários
Os passos a seguir se resumem à ações como CLICAR, SELECIONAR, DIGITAR. Dito isto, quem vos lê faz automaticamente a correspondência passo <-> ação, tendo em vista que se trata de um técnico, e não um leigo.
A razão para tal omissão foi apenas visando evitar repetição e redundância de palavras demasiadamente.
a - Lado esquerdo, USERS.
b - Nome e sobrenome do usuário em questão.
c - Organização da sessão anterior.
d - Email corporativo e usuário/senha para logon.
e - Tipo de usuário e direitos de acesso:
** Normal - membro da organização que pode criar templates, usá-los e atualizá-los.
** Auditor - membro da organização que visualiza inventários, templates, jobs e só... Não modifica nem cria nada no servidor.
** Administrador - possui todos os privilégios dentro da máquina (equivalente ao root/admin).
f - Botão SAVE.

Inventários
Adicionar inventários é na prática adicionar hosts ao AWX/TOWER e separá-los por arquivo, sendo que cada um é um ambiente diferente. Objetivo: isolar as máquinas-alvo e garantir que a rede/switchs não serão afetados negativamente (ex: lentidão, indisponibilidade).
Tal ocorrência pode vir a acontecer se por acaso, sem querer, um playbook contendo a tarefa de atualizar pacotes linux seja executado ao mesmo tempo em vários servidores. Isso porque “alguém” cadastrou todo o parque, todo o datacenter em um único arquivo de inventário.
Forma textual de passos e ações segue a mesma argumentação do tópico anterior.
a - Lado esquerdo, INVENTORIES.
b - Botão ADD INVENTORY.
c - Nome do arquivo e a organização que o mesmo fará parte.
d - Ao final, SAVE.

Hosts
Nomes dos nós/alvos/servidores podem ser IPs, URLs ou FQDNs.
Para criar:
a - Ainda na página INVENTORIES, selecione a aba HOSTS.
b - Clique em ADD HOST.
c - Digite o IP, URL ou FQDN da máquina em questão.
d - Uma breve descrição do que é a mesma.
e - Por fim, botão SAVE. Repita essa ordem quantas vezes for necessário até adicionar todos.

Credenciais
São armazenadas separadamente no AWX, tornando-se uma maneira bastante eficiente dentro de um cenário LDAP, onde poderemos usar uma única credencial para N máquinas.
a - Lado esquerdo, CREDENTIALS.
b - Botão ADD, informar um nome e descrição para a nova credencial.
c - Escolha a organização.
d - Selecione o tipo (MACHINE é semelhante à SSH login)
e - Coloque o nome de usuário e senha do host remoto (tal usuário precisa existir do outro lado... senão, ERRO!!!)
f - SAVE para guardar.

Projetos
a - Esquerda, PROJECTS.
b - ADD.
c - Nome e descrição.
d - Organização e o SCM Type**:
** Manual - Quando os playbooks estão armazenados dentro do próprio AWX/TOWER. Aqui se passa o caminho do diretório (pasta). Ex:/home/victor/ansible/roles
** Git - Situação mais comum. Aqui os arquivos (.yml) estão em um repositório GIT, GitHub, ou similares. Informe a URL do projeto.
e - SAVE.

Templates
a - Esquerda, TEMPLATES.
b - Nome e descrição.
c - Job Type: RUN ou CHECK. Mais utilizado (na maioria das situações) é o 'RUN'.
d - INVENTORY e PROJECT (previamente criados) que apontam os playbooks.
e - PLAYBOOK "principal" que referencia e executa as ROLES. Ex: (meio que um padrão/prática entre os programadores ANSIBLE) main.yml, test.yml, playbook.yml, etc...
f - CREDENTIAL para aquele INVENTORY particular.
g - LOG TYPE: verbosity.
h - Por último, SAVE.

Run the job … *** Ufa! 🙂 ***
a - Continuando na página TEMPLATES, escolha o template desejado para ser "rodado" (executado). Clique no ícone JOB LAUNCHER: o foguete.
b - Redirecionado automaticamente para a página JOBS. Observar a verbose do JOB em execução sendo exibida na tela. Lembrando que essa foi setada em LOG TYPE (7.9 - letra g).
c - Aguardar o fim do JOB...
Verde -> Sucesso -> OK!
Laranja -> Modificações/Alterações!
Vermelho -> Avisos/Falhas -> ERROR!
FIM
That’s all folks 😉 Isso é tudo, pessoal 😀
Até a próxima!!!
REFERÊNCIAS
https://developer.ibm.com/articles/automation-using-ansible-awx-gui/
https://yallalabs.com/devops/how-to-add-new-inventory-create-host-credential-awx-ansible-tower/
Muito bom esse conteúdo. Procurei explicação sobre algumas funções do AWX e só encontrei aqui. Parabéns.
[…] https://automatesmachines.org/2020/12/11/ansible-series-hands-on-02-modo-gui-web-console-awx-tower/ […]