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
Figura 01. Graças ao docker e docker-compose os 5 containers que formam o AWX estão rodando com suas respectivas imagens: 1) awx_task 2) awx_web 3) postgres_9.6 4) memcached 5) rabbitmq. Explicados devidamente em “arquitetura e componentes”.

+ 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.

Figura 02. Durante o primeiro login o AWX será sempre atualizado. Tal processo varia em tempo e depende muito do hardware da máquina. Quanto mais robusta melhor (RAM, Cores, SSD, etc).

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.
Figura 03. O painel é a pagina padrão pós-login e exibe as informações e gráficos dos principais JOBS e HOSTS cadastrados, entre outros.

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.

Figura 04. Gerenciando organizaçõ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.
Figura 05. Gerenciando usuários.

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.
Figura 06. Gerenciando inventários.

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.
Figura 07. Gerenciando hosts.

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.
Figura 08. Gerenciando credenciais.

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.
Figura 09. Gerenciando projetos.

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.
Figura 10. Gerenciando templates.

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/

2 Comments

Deixe uma resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.