Introdução
Neste laboratório, você aprenderá como criar e configurar arquivos de inventário do Ansible. O Ansible utiliza arquivos de inventário para definir e organizar os hosts que gerencia. Você explorará a estrutura básica de um arquivo de inventário, criará grupos, estabelecerá hierarquias de grupos e atribuirá variáveis aos grupos. Essas habilidades são essenciais para gerenciar sua infraestrutura de forma eficaz com o Ansible.
Criando um Inventário Básico
O ambiente do laboratório foi pré-configurado com acesso SSH à máquina local. Você pode usar
localhostcomo o host de destino para todas as operações do Ansible neste laboratório.
Um arquivo de inventário do Ansible define os hosts e grupos de hosts nos quais comandos, módulos e tarefas em um playbook operam. Vamos criar um arquivo de inventário básico.
Crie um novo arquivo chamado inventory no diretório /home/labex/project:
nano /home/labex/project/inventory
Adicione o seguinte conteúdo ao arquivo:
localhost ansible_connection=local
Vamos detalhar isso:
localhost: Este é o nome do host. Neste caso, é a máquina local.ansible_connection=local: Esta é uma variável do Ansible que informa ao Ansible para se conectar a este host localmente, em vez de via SSH. Isso é útil para gerenciar a máquina local.
Salve o arquivo e saia do editor (no nano, pressione Ctrl+X, depois Y, depois Enter).
Agora, vamos testar nosso inventário usando o módulo ping do Ansible. O módulo ping na verdade não usa o protocolo ICMP ping; em vez disso, ele verifica se o Ansible pode se conectar ao host e executar código Python.
Execute este comando:
ansible -i inventory -m ping all
Vamos detalhar este comando:
-i inventory: Especifica o arquivo de inventário a ser usado.-m ping: Diz ao Ansible para usar o móduloping.all: Destina-se a todos os hosts no inventário.
Você deve ver uma saída indicando uma conexão bem-sucedida:
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
Se você vir esta saída, significa que o Ansible se conectou com sucesso ao localhost e executou o módulo ping.
Agrupando Hosts
O Ansible permite que você organize hosts em grupos. Isso é útil para aplicar configurações ou executar tarefas em vários hosts simultaneamente. Vamos modificar nosso inventário para incluir um grupo.
Edite o arquivo inventory:
nano /home/labex/project/inventory
Atualize o conteúdo para:
[webservers]
localhost ansible_connection=local
Isso define um grupo chamado webservers que inclui nosso localhost. No Ansible, os grupos são definidos colocando o nome do grupo entre colchetes []. Quaisquer hosts listados sob um grupo pertencem a esse grupo.
Salve e saia do editor.
Agora, vamos testar nosso grupo usando o módulo ping:
ansible -i inventory -m ping webservers
Este comando é semelhante ao anterior, mas em vez de all, estamos direcionando o grupo webservers.
Você deve ver a mesma saída bem-sucedida de antes, mas agora estamos explicitamente direcionando o grupo webservers. Isso pode parecer desnecessário com apenas um host, mas à medida que seu inventário cresce, o agrupamento se torna cada vez mais útil para direcionar conjuntos específicos de hosts.
Criando Hierarquias de Grupos
O Ansible suporta grupos aninhados, permitindo que você crie hierarquias. Isso é útil para organizar hosts com base em suas funções ou ambientes. Vamos adicionar outro grupo e criar uma hierarquia.
Edite o arquivo inventory:
nano /home/labex/project/inventory
Atualize o conteúdo para:
[webservers]
localhost ansible_connection=local
[production:children]
webservers
Isso cria um novo grupo chamado production que inclui todos os hosts no grupo webservers. O sufixo :children informa ao Ansible que este grupo é um grupo de grupos, não um grupo de hosts.
Aqui está o que essa hierarquia significa:
- Qualquer host no grupo
webserverstambém está implicitamente no grupoproduction. - Você pode aplicar configurações a todos os hosts de produção direcionando o grupo
production. - Você ainda pode direcionar apenas o
webserversse necessário.
Salve e saia do editor.
Teste a nova hierarquia de grupos:
ansible -i inventory -m ping production
Este comando deve fazer ping em todos os hosts no grupo production, que inclui todos os hosts no grupo webservers. Em nosso caso, ainda é apenas o localhost, mas em um cenário do mundo real, essa estrutura permite um gerenciamento de host poderoso e flexível.
Atribuindo Variáveis a Grupos
O Ansible permite que você atribua variáveis a grupos no arquivo de inventário. Essas variáveis podem ser usadas em playbooks e templates, tornando seu código Ansible mais flexível e reutilizável.
Edite o arquivo inventory:
nano /home/labex/project/inventory
Atualize o conteúdo para:
[webservers]
localhost ansible_connection=local
[production:children]
webservers
[webservers:vars]
http_port=80
Isso atribui a variável http_port com o valor 80 a todos os hosts no grupo webservers. O sufixo :vars é usado para definir variáveis para um grupo.
Salve e saia do editor.
Agora, vamos criar um playbook simples para exibir essa variável. Um playbook é um arquivo YAML que define um conjunto de tarefas a serem executadas em hosts. Crie um novo arquivo chamado show_http_port.yml:
nano /home/labex/project/show_http_port.yml
Adicione o seguinte conteúdo:
---
- name: Show HTTP Port
hosts: webservers
tasks:
- name: Display HTTP Port
debug:
msg: "The HTTP port is {{ http_port }}"
Este playbook:
- Direciona o grupo
webservers - Possui uma única tarefa que usa o módulo
debugpara exibir uma mensagem - Usa a sintaxe
{{ http_port }}para referenciar a variável que definimos no inventário
Salve e saia do editor.
Execute o playbook:
ansible-playbook -i inventory show_http_port.yml
Você deve ver a saída exibindo o valor da porta HTTP:
PLAY [Show HTTP Port] ********************************************************
TASK [Gathering Facts] ********************************************************
ok: [localhost]
TASK [Display HTTP Port] ******************************************************
ok: [localhost] => {
"msg": "The HTTP port is 80"
}
PLAY RECAP ********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Isso demonstra que a variável que definimos no inventário é acessível em nosso playbook.
Resumo
Neste laboratório, você aprendeu os fundamentos do gerenciamento de inventário do Ansible. Você criou um arquivo de inventário básico e aprendeu a usar o módulo ping do Ansible para verificar a conectividade. Você explorou como agrupar hosts e criar hierarquias de grupos, que são essenciais para organizar e gerenciar infraestruturas maiores. Finalmente, você aprendeu como atribuir variáveis a grupos e usá-las em um playbook simples.
Essas habilidades formam a base do trabalho com o Ansible e serão inestimáveis à medida que você avança para tarefas de automação mais complexas. Lembre-se de que o gerenciamento eficaz do inventário é fundamental para projetos Ansible escaláveis e sustentáveis. Ao continuar sua jornada com o Ansible, considere explorar recursos de inventário mais avançados, como inventários dinâmicos e plugins de inventário.
A prática é fundamental para dominar esses conceitos. Tente criar inventários mais complexos, experimente diferentes estruturas de grupos e use variáveis em playbooks mais avançados. Quanto mais você trabalhar com o Ansible, mais confortável você se tornará com seus poderosos recursos de automação.


