O que você acha de tornar suas playbooks no Ansible executáveis e assim poder chamá-las diretamente sem precisar lembrar quais parâmetros são necessários para seu funcionamento ou ter que ficar lendo os seus READMEs? Se gostou da ideia continue lendo…
Se você não conhece o Ansible dê uma lida nesta página aqui. Mas em termos simples ele nada mais é do que uma ferramenta de orquestração de servidores.
Imagine então que eu tenha uma “playbook” (é assim que chamamos as receitas, ou lista de tarefas a serem executas pelo Ansible) como esta aqui:
---
- name: Instalação do cliente AWS
hosts:
all
roles:
- aws_cli
A definição da role “aws_cli”, que é onde estão os comandos que realmente validam e instalam os arquivos, está em outro arquivo para não complicar o exemplo.
Assim, todas as vezes que eu quiser instalar o AWS CLI ou apenas confirmar se ele já está instalado da forma que eu espero, bastaria executar algo assim pela linha de comandos:
ansible-playbook --limit webhost[05-19] --ask-become-pass install-aws-cli.yaml
Neste exemplo, eu estaria executando a playbook “install-aws-cli.yaml” em todos os meus servidores com nome webhost05 até webhost19 e pedindo a senha administrativa para poder executar tarefas que requerem privilégios de root.
Ou, assim, se quisesse executar em todos os servidores:
ansible-playbook --ask-become-pass install-aws-cli.yaml
O poder do shebang
O shebang é aquela linha inicial que você encontra em scripts shell, python, perl etc. Veja abaixo alguns exemplos que você já deve ter “esbarrado” por ai inúmeras vezes:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/env perl
Sempre que você requisita ao shell que execute um determinado arquivo de textos com permissão de execução, ele lê esta primeira linha e espera que ali esteja descrevendo qual é o comando que interpretará o restante do arquivo.
Tornando a playbook executável
Para tornarmos a playbook executável então, basta adicionar uma shebang apontando para o Ansible e com os devidos parâmetros (além de lhe dar o atributo de execução +x).
Veja o resultado abaixo:
#!/usr/bin/env -S ansible-playbook --ask-become-pass
---
- name: Instalação do cliente AWS
hosts:
all
roles:
- aws_cli
Perceba que acrescentei apenas uma linha no topo do arquivo. O uso do “env -S” é necessário neste caso pois estamos passando argumentos extras para o Ansible.
E com isso, após salvarmos e darmos permissão de execução, sempre que quisermos executar esta playbook poderíamos fazer assim:
./install-aws-cli.yaml --limit webhost[05-19]
./install-aws-cli.yaml
Desta forma você poderá simplificar a execução de suas playbooks sem precisar ficar decorando todos os parâmetros para cada uma delas.
Torne outros arquivos executáveis
O shebang funciona em qualquer tipo de arquivo então se você tiver qualquer arquivo e precisa que ele se torne executável, basta adicionar uma linha inicial com o caminho e nome do arquivo que o interpreta, dar permissão de execução e pronto.