Este repositório guarda os arquivos para o laboratório de Ansible da palestra da NIC.br de 2022.
Para fazer o laboratório é preciso possuir um software de virtualização, conhecido como hypervisor, como por exemplo o VirtualBox. Para atender ao maior número de pessoas possíveis, todas as ferramentas utilizadas e recomendadas neste laboratório são livres e de código aberto.
Existem outros hypervisors como o KVM para Linux ou outras soluções fechadas para Windows ou sistemas operacionais da Apple, porém o foco será sempre o VirtualBox.
Para criar o laboratório é possível utilizar o Vagrant
ou baixar o arquivo ansible.ova e importá-lo no VirtualBox, a primeira forma é mais moderna e trás mais possibilidades de estudo para o usuário.
Escolha uma das opções abaixo para obter melhores instruções sobre como preparar o ambiente:
Atenção:
- Será preciso habilitar a capacidade de virtualização do seu processador na "BIOS" do seu computador.
- O Vagrant tem maior compatibilidade com o
VirtualBox
e oLibvirt
, nem todas as imagens estão disponíveis para todos os hypervisors. - O funcionamento do
HyperV
com o Vagrant é parcial, as máquinas não conseguem ser configuradas com endereço IP fixo. - O
HyperV
ou mesmo versões não originais doVMWare Workstation
podem causar problemas nada óbvios noVirtualBox
, não use software pirata, use Linux. - Algums versões do Windows possuem componentes do
HyperV
instalados que podem causar problemas noVirtualBox
. - Até o momento não há hypervisors livres de arquitetura
amd64
(x86_64
) para sistemas operacionais da Applearm64
, se possui uma máquina destas, venda, compre um computador de verdade e ajude alguém com o dinheiro que sobrar. - O Fedora 36 está com problemas para configurar endereço IP fixo.
De forma simplista, Ansible é uma ferramenta de automação, mas é importante entender de qual tipo automação estamos falando e que "Ansible" não é apenas uma única ferramenta.
Ansible é um projeto livre e de código aberto voltado para o provisionamento, gerência de configuração e implantação de software que nos possibilita utilizar Infraestrutura como Código. Foi desenvolvido originalmente por Michael DeHaan e adquirido pela Red Hat em 2015.
Na maioria das vezes as operações do Ansible acontecem através de uma máquina central, normalmente a mesma que está usando para ler este texto, se comunicando com outros dispositivos, APIs ou qualquer outro protocolo disponível. Essa máquina é conhecida como control node.
Na grande maioria das vezes utilizamos o Ansible para configurar outras máquinas, os managed nodes, e fazemos isso através de módulos. Para cada tarefa que deseja fazer (instalar um pacote, criar um usuário, copiar um arquivo), haverá um módulo especifico. Durante a execução, o Ansible se conectará ao nó gerenciado, copiando o módulo (normalmente código python) e o executando.
Para fazer a conexões em outras máquinas o Ansible utiliza o bom e velho SSH em máquinas Linux ou o winrm em máquinas Windows, formas de conexão já conhecidas pelos profissionais de cada um destes sistemas.
Apesar de configurar máquinas ser a principal função do Ansible, esta não é a sua única capacidade. Podemos utilizar o Ansible para consumir APIs, configurar equipamentos de rede (switches, pontos de acesso, etc), fazer testes (verificar se uma porta está aberta, procurar uma palavra em um site) e praticamente tudo o que sua criatividade e persistência lhe permitir.
Para codificarmos nossa infraestrutura em Ansible utilizamos um arquivo de texto bastante fácil de se ler e escrever chamado playbook. Uma playbook descreve as tarefas que queremos executar e são escritas no formato de serialização YAML.
Para informar ao Ansible quais nós queremos gerenciar utilizamos um inventário. Basicamente um inventário é um arquivo de texto simples com informações pertinentes de cada nó. É muito comum utilizarmos o formato .ini
já conhecido no Linux, mas podemos escrevê-los em outros formatos como .json
ou .yaml
.
Existem duas características interessantes do Ansible, a sua forma declarativa e a sua idempotência.
Uma das características do Ansible é trabalhar de forma declarativa, nós não especificamos como as coisas devem ser feitas e sim como as coisas devem ficar.
Por exemplo, para instalar o vim
nós não digitamos o comando de instalação de forma imperativa:
dnf install -y vim
Muito pelo contrário, nós especificamos o pacote e seu estado e o Ansible ficará responsável por resolver:
package:
name: vim
state: present
Dessa forma eu não preciso me preocupar tanto com parâmetros e características peculiares de uma determinada distribuição. Nem sempre é possível trabalhar assim, mas é interessante ter esse conceito em mente.
Idempotência, em ciência da computação, é a propriedade que algumas operações tem de poderem ser executadas diversas vezes sem que o resultado final se altere após a primeira execução. Neste nosso caso, significa que podemos executar um "código do Ansible" para, por exemplo, criar um usuário sem se preocupar se suas execuções subsequentes apresentarão problemas com o usuário agora existente.
No Linux, se tentarmos cadastrar o mesmo usuário duas vezes, teremos um erro na segunda execução, pois o usuário já existe.
O Ansible que a Red Hat fornece aos seus clientes é baseado na versão community do Ansible, é praticamente o mesmo, porém seus módulos e demais complementos que podemos adicionar passam por um teste ainda mais rigoroso e passam a ser suportados pela própria Red Hat.
Se você quer conhecer as ferramentas da Red Hat, é um desenvolvedor, ou apenas um curioso, e não pretende necessariamente adquirir a subscrição é possível ingressar gratuitamente no Red Hat Developer Program e ter acesso a todas essas ferramentas, inclusive para usar em produção.