Ansible AWX

Com o fim do suporte ao CentOS 7 (RIP 30/07/2024), surgiu a necessidade de migrar o nosso sistema de telefonia para uma nova versão do sistema operacional. Após algumas análises, optamos por utilizar o Rocky Linux 8, que vem ganhando bastante espaço como uma alternativa estável e compatível com o antigo CentOS.

No entanto, nosso sistema possui diversas dependências e ajustes específicos para funcionar corretamente. O problema? Esses ajustes são todos feitos manualmente — e isso consome um tempo considerável (mas sério, um tempo bem grande mesmo!).

Foi aí que surgiu a ideia de automatizar esse processo. Já tinha utilizado o Ansible em algumas situações, mas dessa vez eu procurava algo mais visual, com interface gráfica, que facilitasse ainda mais a gestão dos playbooks e a execução das tarefas.

E foi assim que encontrei o Ansible AWX.

Por que escrever este artigo?

Resolvi escrever este artigo para compartilhar como foi o processo de instalação do AWX. Depois de algumas tentativas (e alguns tropeços), finalmente consegui fazer tudo funcionar — e acredito que isso pode ajudar outras pessoas que estejam no mesmo caminho.

Requisitos mínimos

Antes de colocar a mão na massa, vale listar os requisitos mínimos para subir o AWX com uma boa margem de estabilidade:

  • CPU: 2 vCPUs

  • Disco: 20 GB

  • RAM: 4 GB

  • Coragem: sim, porque a documentação oficial pode ser um pouco confusa às vezes 😅

Escolha do sistema operacional

Para hospedar o AWX, escolhi utilizar o Ubuntu Server (24.04 LTS), por ser leve, estável e ter uma grande comunidade. Além disso, muitos exemplos de instalação que encontrei também utilizavam Ubuntu, o que facilitou um pouco o caminho.

Primeiros passos

Como fiz uma instalação limpa do sistema operacional para subir o AWX, o primeiro comando que sempre utilizo é:

apt update && apt upgrade

Após isso, para manter o ambiente organizado, criei uma pasta para a instalação:

mkdir awx
cd awx

Instalando o K3s

O AWX precisa rodar em cima de um cluster Kubernetes. Para simplificar, optei por usar o K3s, uma versão leve e prática do Kubernetes. A instalação é bem simples:

curl -sfL https://get.k3s.io | sh -

Para verificar se o cluster está rodando corretamente, use:

kubectl get nodes

Se tudo estiver certo, você verá uma saída semelhante a esta:

NAME       STATUS   ROLES                  AGE   VERSION
awx-node   Ready    control-plane,master   1m    v1.29.1+k3s1

Criando o arquivo kustomization.yaml

Dentro da pasta awx, vamos criar o arquivo:

vim kustomization.yaml

Com o seguinte conteúdo:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=2.9.0
images:
  - name: quay.io/ansible/awx-operator
    newTag: 2.9.0
namespace: awx

O que faz esse kustomization.yaml?

Esse arquivo é usado para instalar o AWX Operator no Kubernetes utilizando o Kustomize. Ele:

  • Importa os manifests do AWX Operator diretamente do GitHub;

  • Define a versão da imagem do operator;

  • Aplica tudo no namespace awx, que deve ser criado antes.

Aplicando a instalação do Operator

Depois de ter editado o arquivo rode o comando

kubectl apply -k .

Valide se o operator está rodando corretamente:

kubectl get pods -n awx

Saída esperada:

NAME                                              READY   STATUS    RESTARTS   AGE
awx-operator-controller-manager-d96c7bbb4-4pgn6   2/2     Running   0          81s

Defina o namespace padrão para facilitar os próximos comandos:

kubectl config set-context --current --namespace=awx

Criando o deployment do AWX

Agora vamos criar outro yml agora com o nome awx-demo.yml

vim awx-demo.yml

Conteúdo:

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: clusterip
  ingress_type: Route

Agora edite novamente o kustomization.yaml e adicione o novo recurso:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=2.9.0
  - awx-demo.yml #NOVA LINHA
images:
  - name: quay.io/ansible/awx-operator
    newTag: 2.9.0
namespace: awx

Reaplique:

kubectl apply -k .

Monitorando o deploy

Depois de rodar o comando temos que esperar um tempo para os containers subirem você pode monitorar isso com o comando:

kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"

Quando tudo estiver no ar esse comando retorna uma saida parecida com essa:

NAME                            READY   STATUS    RESTARTS   AGE
awx-demo-postgres-13-0          1/1     Running   0          5m11s
awx-demo-task-d9c5df89d-nphg2   4/4     Running   0          4m30s
awx-demo-web-77f65f7cd4-nc4dz   3/3     Running   0          2m41s

Depois de ter carregado todos os container precisamos verificar qual a porta de acesso do AWX

kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
awx-demo-postgres-13   ClusterIP   None            <none>        5432/TCP       6m27s
awx-demo-service       NodePort    10.43.229.212   <none>        80:31990/TCP   5m48s

A primeira entrada da lista é referente ao banco de dados PostgreSQL. Já a segunda corresponde ao serviço web do AWX, que está exposto na porta 31990.

Para acessar a interface, basta abrir o navegador e digitar o endereço IP da sua máquina seguido da porta. No meu caso, o acesso ficou assim:

http://192.168.47.129:31990/

E qual é a senha?

Por padrão, o usuário de login é admin. Para descobrir a senha gerada automaticamente durante a instalação, execute o seguinte comando:

kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo

A saída desse comando será a senha que você deve usar para fazer login na interface web do AWX.

Com o AWX instalado e funcionando, agora temos uma poderosa interface gráfica para gerenciar nossos playbooks do Ansible de forma muito mais prática e intuitiva. Isso facilita bastante o dia a dia, especialmente em ambientes onde automação e controle são essenciais.

Espero que este guia tenha te ajudado a entender e executar o processo com mais tranquilidade. Qualquer dúvida ou sugestão, fique à vontade para comentar ou entrar em contato!

Por hoje é isso, pessoal e obrigado por acompanhar até aqui e até a próxima! 🚀

4
Subscribe to my newsletter

Read articles from Hudson Alves Amaral directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Hudson Alves Amaral
Hudson Alves Amaral