No post anterior, criamos um primeiro playbook, onde basicamente colocamos as instruções em um arquivo e aplicamos esse playbook. Você ressalta que essa não é a melhor prática, especialmente quando se trata de tarefas mais complexas, como a instalação completa de algum software.
Nesse caso, manter o controle e a manutenção do código pode se tornar bastante complicado. Por isso, a estrutura de pastas e arquivos que eu expliquei anteriormente é recomendada pela comunidade Ansible.
Cada pasta e arquivo nessa estrutura tem uma responsabilidade específica, o que ajuda a organizar e manter o código de forma mais eficiente. Vamos revisar novamente a função de cada elemento:
nome_da_sua_role/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
defaults: Contém as variáveis com valores padrão para a role. Essas variáveis têm a menor prioridade e podem ser sobrescritas.
files: Armazena arquivos estáticos que são copiados para os hosts durante a execução da role.
handlers: Contém manipuladores (handlers) que podem ser acionados por tarefas durante a execução da role.
meta: Possui metadados sobre a role, como dependências, autor, licença, etc.
README.md: Arquivo de documentação da role, com informações sobre seu propósito, variáveis, uso, etc.
tasks: Contém as tarefas que serão executadas pela role.
templates: Armazena arquivos de template Jinja2 que podem ser renderizados durante a execução da role.
tests: Contém arquivos de inventário e testes (playbooks) para validar a role.
vars: Contém variáveis específicas da role, com prioridade maior que as variáveis padrão.
Essa estrutura padronizada facilita a organização, manutenção e reutilização das roles em diferentes projetos Ansible. Ao seguir essa convenção, outros membros da equipe ou a comunidade Ansible poderão facilmente entender e trabalhar com sua role.
Sabe como gerar essa estrutura automaticamente? Vou te mostrar abaixo.
Logue no terminal, crie uma pasta chamada ansible.
mkdir ansible
Depois execute.
ansible-galaxy init nome_da_sua_role
Veja o resultado.
tree nome_da_sua_role/
O comando ansible-galaxy init
é utilizado para gerar automaticamente a estrutura de pastas e arquivos recomendada pela comunidade Ansible para uma nova role.
Quando você executa esse comando no terminal, o Ansible cria uma nova pasta com o nome da role que você especificar. Dentro dessa pasta, ele popula todas as pastas e arquivos padrão que devem compor uma role Ansible, como:
defaults/
files/
handlers/
meta/
tasks/
templates/
vars/
README.md
Isso torna o desenvolvimento de roles do Ansible muito mais ágil e padronizado.
Espero que tenha conseguido contribuir um pouco com o desenvolvimento de vocês. Irei escrever mais artigos sobre Ansible, então não esqueçam de me seguir nas redes sociais. E caso tenham dúvidas, não deixem de entrar em contato. Beleza, até mais pessoal, fui.
https://www.linkedin.com/company/deltaopscloud/
✨ Referência:
Escrito por 🖋️ Diogo Lima
Sócio Fundador da Empresa DeltaOps