Ansible
https://docs.ansible.com/ansible/latest/index.html
Ansible é uma ferramenta de automação criada para gerenciar várias mãquinas de uma vez só. É capaz de configurar sistemas, implantar softwares e orquestrar tarefas avançadas como implantação continua e atualização contínua.
-
Muito popular entre os sysadmins e devops.
-
Documentação muito completa, considerada uma das mais detalhadas existentes.
-
Curva de aprendizado muito curta.
-
Forte foco em segurança e simplicidade.
-
Utiliza o protocolo ssh e uma linguagem yaml (simples).
-
Fácil de realizar manutenção.
-
Não necessita agents instalados nas instâncias, o que é o seu maior diferencial comparado ao Chef e ao Chef.
-
Descentralizado, mas pode se conectar com Kerberos, LDAP e outros sistemas de autênticação centralizada.
-
Bom pra gerenciar poucas ou muitas instâncias. Não necessáriamente somente mãquinas, mas qualquer coisa que aceite um ssh como um switch, roteador, load balancer, etc.
-
Idepotencia, ou seja, garante que uma tarefa já executada näo seja executada novamente, o que é uma vantagem sobre script por exemplo.
-
Uso de templates por substituição de variáveis usando o Jinja.
Pros e Contras
-
Não garante que a configuração esta ativa em todas as máquinas, logo usa-lo em um parque de máquinas não é a melhor opção. Claro que existem saídas para isso como a utilização do ansible tower que é pago para potencializar a utilizaçao dele, mas não é a melhor escolha.
-
Bom para ser somado a outras ferramentas como por exemplo o terraform.
-
Uma coisa muito interessante é que precisamos trabalhar com idempotência. Isso significa que se executar um script várias vezes o resultado será sempre o mesmo. Por exemplo se vc pediu para criar um usuário rodando um script e depois rodout novamente o script ele não irá criar duas vezes.
Pastas
A pasta raiz desse projeto contem um estudo de ansible com algumas consirações baseado no repositório contido em study-ansible.
Instalação
O Ansible é desenvolvido em Python logo pode ser instalado com o pip se vc quiser, mas eu particulamente prefiro a instalação do binário diretamente.
Como é um sistema open source vc pode até compilar o código se quiser.
A documentação é tão boa que nem vale a pena reescreve. Mas para resumir, pode instalar usando o gerenciador de pacote da sua distribuição Linux, ou o Brew no Mac e Chocolatey no Windows, só ver no link abaixo. https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
Versão utilizada durante o estudo foi a 2.10.17
~/projects/ansible/study-ansible main !1 1.1.7 00:27:24
❯ ansible --version
ansible 2.10.17
config file = None
configured module search path = ['/home/david/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
# caminho dos modulos do python
ansible python module location = /home/david/.asdf/installs/ansible-base/2.10.17/venv/lib/python3.10/site-packages/ansible
# qual o binario que ele ele vai executar
executable location = /home/david/.asdf/installs/ansible-base/2.10.17/bin/ansible
# versao do python
python version = 3.10.2 (main, Mar 14 2022, 20:47:39) [GCC 11.2.0]
O Arquivo de configurações gerais do ansible costuma aparecer em /etc/ansible/ansible.cfg e este vem todo comentado, somente como um exemplo.
A ordem para a procura desse arquivo é:
-
1 nas variaveis de ambiente caso ANSIBLE_CONFIG esteja setado.
-
2 no diretório corrente procurando pelo arquivo ansible.cfg
-
3 no diretório home ~/.ansible.cfg
-
4 em /etc/ansible/ansible.cfg
Observe que no exemplo ele tem um alinha comentada de inventario que aponta para /etc/ansible/hosts que é o arquivo que defini quais máquinas o ansible conhece.
Vale lembrar que o ansible so precisa ser instalado na máquina de controle, porém as máquinas clientes precisam ter o Python Instalado.
Sobre módulos da comunidade
Deve ser sempre vista a pagina do galaxy e conferir se o módulo precisa de alguma coisa extra.
Por exemplo, o módulo da aws galaxy ser instalado com o seguinte comando.
ansible-galaxy collection install community.aws
Além disso se conferir na documentaçao do aws ansible.
pip install boto3
Para remover uma collection esta deve ser deletada diretamente removendo a pasta dela. Não existe ainda um parametro para remoção de collection usando o galaxy-ansible.
rm -rf ~/.ansible/collections/ansible_collections/nomedacollection
Existe uma collection interessante que pode ser bem utiliada pelo kubernetes
ansible-galaxy collection install kubernetes.core
Extras
Para ajudar a melhorar o cõdigo dos playbooks (sequencia de comandos do Ansible em linguagem Yaml) vamos utilizar o ansible-lint. A instalação é simples mas necessita do python3 instalado. Confira a página do projeto para melhores informações.
pip3 install ansible-lint
Dica
Sempre que no arquivo hosts vc for definir o interpreter faça nao aponte a para o /usr/bin/python, mas somente para python, que dessa maneira ele paga o interpretador que esta no path.
[all:vars]
ansible_python_interpreter=python