Nesta solução temos, inicialmente, o versionamento das Playbooks e Roles do Ansible através do Git. É essencial possuir uma boa organização das Roles, pois toda a estrutura de chamada das playbook, variáveis e modelos partem desses arquivos. É nesse ponto que o AWX se torna extremamente útil, pois com centralização de execução do Ansible é possível realizar um agendamento para validar se há alterações no repositório em que as Playbooks estão sendo versionadas. Para identificar todo o parque de máquinas que o Ansible irá aplicar suas configurações, é necessário configurar um “inventário”, onde em ambientes mais complexo e voláteis como a Cloud, isso pode ocorrer de forma dinâmica. E desta forma realizar um scheduler periódico para a execução das Playbooks, garantindo que mesmo se o ambiente sofrer uma alteração manual, o AWX fará a correção, retornando assim a configuração para a última versão válida armazenada no repositório.
O AWX pode ser divido por projetos, como por exemplo, um projeto focado em segurança, outro para configurações de servidores diversos e assim por diante. Por fim, o AWX ainda permite o envio de notificações, que avisará a equipe responsável quando a execução das tarefas agendadas ou mesmo uma checagem do repositório Git vier a falhar, permitindo uma resposta mais rápida da equipe.
O Ansible ainda permite a execução de Playbooks Parametrizadas, ou seja, uma mesma Playbook que pode ser executada de forma diferente baseada na definição de suas variáveis.
No cenário apresentado ainda temos o Rundeck, que é responsável por executar tarefas (jobs), seja elas periódicas ou não.
Esse Jobs são muito flexíveis a ponto de permitir qualquer tipo de interação em ambientes diversos seja eles Windows ou Linux, garantindo ainda seu devido agendamento. Cada Job pode trabalhar de uma forma, sendo executado em um ou mais “Node” – nome dado as máquinas registradas no Rundeck onde as tarefas serão executadas. Dessa forma cada Job pode executar um mesmo script ou comando em Nodes que sejam semelhantes, um exemplo recorrente, é a execução de Procedures em banco de dados ou mesmo a execução de chamadas de API.
Outra facilidade do Rundeck é o fato de conseguir centralizar diversos tipos de scripts (ShellScript ou Powershell) em um único lugar, sem ter a necessidade de encaminhar esse mesmo script para as diferentes máquinas da rede, um vez que o próprio Rundeck se encarregará disso.
Por fim, assim como o AWX o Rundeck também permite enviar notificações dos Jobs que iniciaram, falharam ou tiveram sucesso, onde os canais mais utilizados são serviços de mensagens, como o Telegram e/ou Rocket.chat.
Uma infraestrutura que possui esses recursos consegue garantir a configuração de todo um ambiente, por mais complexo que eles sejam e ainda realizar de forma automatizada a manutenção e administração deste cenário.