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:

Figura 01. OAuth
Figura 02. logon successful

>_ 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:

Figura 03. home > system

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

Figura 04. search > 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:

Figura 05. docker > type: roles

>_ 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
Figura 06. ansible-galaxy install

Em seguida, você já pode desfrutar da mesma:

ansible-playbook main.yml
Figura 07. ansible-playbook running

>_ 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
Figura 08. /etc/ansible

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

Figura 09. new ansible-playbook running

>_ 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
Figura 10. apache v3.3.0
Figura 11. galaxy view

>_ listando ROLES

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

ansible-galaxy list
Figura 12. 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

Figura 13. 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/reference_appendices/release_and_maintenance.html#ansible-community-changelogs

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

Deixe uma resposta

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.