Inventário de Grupos Ansible

AnsibleBeginner
Pratique Agora

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.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 99%. Recebeu uma taxa de avaliações positivas de 98% dos estudantes.

Criando um Inventário Básico

O ambiente do laboratório foi pré-configurado com acesso SSH à máquina local. Você pode usar localhost como 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ódulo ping.
  • 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 webservers também está implicitamente no grupo production.
  • Você pode aplicar configurações a todos os hosts de produção direcionando o grupo production.
  • Você ainda pode direcionar apenas o webservers se 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 debug para 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.