ANSIBLE SERIES: h.t.wrt* … Collections: GALAXY
Felizes com o término de mais uma série? Eu também, aquela sensação boa de dever cumprido né? O Terraform ficou pra trás, página virada, e o habitual seria começar uma nova. Certo? Errado! Ou pelo menos ainda não. Digo isso tendo em vista que aqui no BLOG há duas “pontas soltas” aguardando respectivos encerramentos. Falo do ZABBIX e o próprio ANSIBLE. O segundo pretendo concluir já nas próximas semanas, pois falta pouco. Quanto ao primeiro, confesso que não tenho prazo definido, porque literalmente ainda resta muito terreno para cobrir. Apesar de uma teoria simples, dá pra fazer muita coisa no Zabbix, monitorar uma infinidade de itens, subitens, das mais diversas maneiras (possíveis e imagináveis). Sendo assim, meu caros, peço desculpas mas terão que esperar um pouco além, no que diz respeito ao Monitoramento.
Parênteses feito, vamos à pauta do dia 😉
>_ Ansible Galaxy: O QUE É?
Agora que já sabemos como escrever nossas próprias roles (você pode conferir aqui e aqui), será que não existe um meio mais fácil de disponibilizá-las para outras pessoas? Sim! E o seu nome é Ansible Galaxy. Trata-se de um website mantido pela Red Hat, servindo como uma espécie de hub central para encontrar e compartilhar conteúdos relativos ao Ansible.
Cabe salientar duas curiosidades sobre o ‘Estado da Arte’ da ferramenta. Quando falamos simplesmente Ansible, estamos nos referindo a todo o empacotamento que a versão community representa e traz consigo. Ou seja, todos os comandos ad-hoc, módulos, plugins, scripts e afins. Em contrapartida, quando dizemos ansible-core (no passado conhecido como ansible-base) refere-se apenas, e tão somente, à linguagem e o tempo de execução do Ansible, que é majoritariamente escrito em Python. Ambas são importantes para entender que atualmente encontramos o Ansible 6 (versão community) que é baseado no ansible-core 2.13
Mas voltando ao nosso foco principal, o Galaxy pode ser uma ótima maneira que principiantes tem para pular e já mergulhar de cabeça no universo Ansible. Nele é possível encontrar além das já “famosas” ROLES, um novo modelo chamado COLLECTIONS, que foi introduzido a partir da versão Galaxy 3.2 Para entender melhor a diferença: enquanto que uma role é um conjunto de tarefas para provisionar determinada infraestrutura ou implantar uma aplicação específica, uma coleção seria “um conjunto de conjuntos” para viabilizar algo bem maior. Em outras palavras, mais amplo que uma ou duas configurações/serviços. É como se você tivesse múltiplos playbooks, roles, módulos e plugins, todos em um único lugar, e claro, de forma totalmente compreensiva.
>_ Galaxy: USUÁRIO
Acesse o endereço https://galaxy.ansible.com/ e cadastre seu usuário/senha. Para isso, vá até LOGIN, e depois clique no ícone do GitHub para autorizar o uso e vínculo entre os dois:


>_ Pesquisando: COMO BUSCAR
Básico do básico, essa talvez seja a sua primeira ação: encontrar o conteúdo desejado. Mas como fazê-lo? Existem três formas para tal. Primeiramente, e a mais intuitiva de todas, você poderia navegar pelas categorias da aba HOME para tentar localizar o que procura. Sistemas, desenvolvimento, redes, banco de dados, monitoramento são só alguns exemplos do que podemos encontrar. Então, siga em frente, faça como eu e tente uma busca por conta própria:

Outra possibilidade seria utilizar a aba SEARCH. Por exemplo, pesquisando por ‘docker’:

Reparem sempre em detalhes como:
- Pontuação (uma nota de 0 a 5)
- Quantidade de downloads
- Versão atual
- Data de upload
E por último, você também pode usar o recurso de filtros, presente em quase todos os mecanismos de busca. Por exemplo:

>_ Tipos: ROLE, COLLECTION, BUNDLE ???
Sim, existem diferenças quanto ao tipo de conteúdo visto no Ansible GALAXY, e que é compartilhado entre milhares de usuários mundo afora. Um deles nós já vimos, as ROLES. Conceitualmente, você pode rever sempre que quiser voltando alguns posts no tempo, e por motivos óbvios, não cabendo aqui explicá-los novamente (o famoso chover no molhado! rsrs). Mas, o que mais importa agora, para diferenciá-los dos outros tipos, é a estrutura de pastas e arquivos, sendo composta conforme a seguir:
README.md defaults/ main.yml files/ handlers/ main.yml meta/ main.yml tasks/ main.yml templates/ tests/ inventory test.yml vars/ main.yml
Então, toda vez que observar essa disposição e formato específico, já sabe do que se trata: uma ROLE. Leia mais aqui
O próximo tipo diz respeito as COLLECTIONS (ou coleções, em português). E de acordo com o que foi dito mais cedo, seriam uma espécie de conjunto de conjuntos. Um lugar onde é possível combinar uma série de playbooks, roles, módulos e plugins como se fossem um único artefato. Leia mais aqui
E finalmente, temos os chamados BUNDLES (pacotes, em português). Esses seriam como pequenas imagens para rodar em containers/pods, ou seja, aplicações leves e prontas para uso imediato. Na maior parte consistem de vários playbooks e metadados. Leia mais aqui
>_ Conteúdo: COMO USAR
>_ instalando uma ROLE
Para instalar qualquer ROLE use o comando ansible-galaxy
e aguarde a conclusão do download:
ansible-galaxy install irixjp.role_example_hello

Em seguida, você já pode desfrutar da mesma:
ansible-playbook main.yml

>_ determinando o local de uma ROLE
Também é possível baixar em um local pré-definido, antecedendo o início do download:
sudo ansible-galaxy install --roles-path /etc/ansible/ marcinpraczko.hello_world

E depois utilizá-la da mesma forma, sem nenhum prejuízo:

>_ escolhendo a versão de uma ROLE
Graças ao versionamento nativo da plataforma GALAXY, podemos escolher qual versão para uma determinada role. Para isso, basta visualizar o histórico de versões e naturalmente, as mudanças entre cada uma (o famigerado changelogs). Ao final do comando, adicione uma vírgula seguida do número correspondente que deseja. Por exemplo:
ansible-galaxy install geerlingguy.apache,3.3.0


>_ listando ROLES
Use o comando ansible-galaxy list
para exibir todas as ROLES já instaladas em seu sistema:
ansible-galaxy list

>_ instalando múltiplas roles de um arquivo REQUIREMENTS.YML
Não é preciso esperar, tampouco baixar uma por uma. Somos totalmente capazes de obter várias numa tacada só. Crie um arquivo chamado requirements.yml
ou requirements.yaml
e use o parâmetro -r para instalar todas de uma vez. Observe:
# from GitHub - src: https://github.com/bennojoy/nginx # from GitHub, overriding the name and specifying a specific tag - src: https://github.com/bennojoy/nginx version: master name: nginx_role # from Bitbucket - src: git+http://bitbucket.org/willthames/git-ansible-galaxy version: v1.4 # from Bitbucket, alternative syntax and caveats - src: http://bitbucket.org/willthames/hg-ansible-galaxy scm: hg
ansible-galaxy install -r requirements.yml

>_ trabalhando com DEPENDENCIES
Algumas vezes encontramos ROLES que dependem de outras. Sendo assim, eventuais ligações devem estar explicitadas em um arquivo separado chamado meta/main.yml
--- dependencies: - geerlingguy.java galaxy_info: author: geerlingguy description: Elasticsearch for Linux. company: "Midwestern Mac, LLC" license: "license (BSD, MIT)" min_ansible_version: 2.4 platforms: - name: EL versions: - all - name: Debian versions: - all - name: Ubuntu versions: - all galaxy_tags: - web - system - monitoring - logging - lucene - elk - elasticsearch
>_ instalando COLLECTIONS
Bastante similar ao que vimos nas ROLES, as operações sobre COLLECTIONS seguem quase o mesmo padrão. Salvo algumas exceções de sintaxe, e principalmente, organização dos diretórios. Portanto, fica aqui a recomendação de leitura complementar.
REFERÊNCIAS:
https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_6.html
https://galaxy.ansible.com/docs/
https://docs.ansible.com/ansible/latest/galaxy/user_guide.html