Como definir o caminho padrão do arquivo de inventário no Ansible

AnsibleBeginner
Pratique Agora

Introdução

Ansible é uma ferramenta de automação de TI amplamente utilizada que simplifica o gerenciamento de infraestrutura e aplicações. Neste tutorial, exploraremos como definir o caminho padrão do arquivo de inventário no Ansible, garantindo um gerenciamento de infraestrutura eficiente e consistente. Um arquivo de inventário no Ansible contém uma lista de hosts que o Ansible gerencia. Ao configurar uma localização de arquivo de inventário personalizada, você pode organizar melhor seu fluxo de trabalho de automação.

Entendendo o Inventário do Ansible

Antes de configurarmos um caminho de arquivo de inventário personalizado, vamos entender o que é um inventário do Ansible e como ele funciona por padrão.

O que é um Inventário do Ansible?

Um inventário do Ansible é um arquivo que contém informações sobre os hosts que o Ansible irá gerenciar. Por padrão, o Ansible procura o arquivo de inventário em /etc/ansible/hosts. O inventário pode estar em vários formatos, mas o mais comum é um arquivo no estilo INI ou um arquivo YAML.

Vamos verificar se o Ansible está instalado corretamente em nosso sistema:

ansible --version

Você deve ver uma saída semelhante a esta:

ansible [core 2.12.x]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.x (default, Ubuntu, etc.)

Agora, vamos olhar para a localização padrão do arquivo de inventário:

cat /etc/ansible/hosts

Este arquivo pode estar vazio ou conter configurações de host de exemplo. O arquivo de inventário padrão geralmente se parece com isto:

## Example inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

Neste formato:

  • [webservers] e [dbservers] são nomes de grupos
  • Os nomes de host ou endereços IP listados sob cada grupo pertencem a esse grupo

Para nosso laboratório, criaremos nosso próprio arquivo de inventário personalizado em um local diferente.

Criando um Arquivo de Inventário Personalizado

Agora que entendemos o que é um arquivo de inventário, vamos criar nosso próprio arquivo de inventário personalizado em nosso diretório de projeto.

Criar um Diretório para Arquivos Ansible

Primeiro, vamos navegar para o nosso diretório de projeto e criar uma pasta dedicada para nossos arquivos Ansible:

cd ~/project
mkdir -p ansible/inventory

Criar um Arquivo de Inventário Personalizado

Agora, vamos criar um arquivo de inventário simples em nosso novo diretório:

cat > ansible/inventory/hosts.ini << 'EOF'
## Custom inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[local]
localhost ansible_connection=local

[all:vars]
ansible_user=ubuntu
EOF

Este arquivo de inventário define três grupos:

  • webservers: Contém dois servidores web
  • dbservers: Contém dois servidores de banco de dados
  • local: Contém localhost com uma configuração de conexão especial

Vamos verificar nosso arquivo de inventário recém-criado:

cat ansible/inventory/hosts.ini

Você deve ver o conteúdo que acabamos de criar.

Este arquivo está agora pronto para ser usado como nosso arquivo de inventário personalizado. No próximo passo, configuraremos o Ansible para usar este arquivo por padrão, em vez do arquivo /etc/ansible/hosts em todo o sistema.

Definindo o Caminho do Arquivo de Inventário Padrão

Agora que criamos nosso arquivo de inventário personalizado, vamos configurar o Ansible para usá-lo como o arquivo de inventário padrão. Existem várias maneiras de fazer isso, mas vamos nos concentrar nos dois métodos mais comuns.

Método 1: Usando um Arquivo de Configuração do Ansible

O Ansible procura arquivos de configuração na seguinte ordem:

  1. Variável de ambiente ANSIBLE_CONFIG
  2. ansible.cfg no diretório atual
  3. ~/.ansible.cfg (diretório home do usuário)
  4. /etc/ansible/ansible.cfg (em todo o sistema)

Vamos criar um arquivo ansible.cfg em nosso diretório de projeto:

cat > ~/project/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = ~/project/ansible/inventory/hosts.ini
host_key_checking = False
EOF

Neste arquivo de configuração, definimos:

  • inventory: O caminho para o nosso arquivo de inventário personalizado
  • host_key_checking: Desabilitado para evitar prompts de verificação da chave do host SSH

Método 2: Usando uma Variável de Ambiente

Outra maneira de especificar o arquivo de inventário é usando a variável de ambiente ANSIBLE_INVENTORY. Isso é útil quando você deseja usar temporariamente um arquivo de inventário diferente sem alterar a configuração:

export ANSIBLE_INVENTORY=~/project/ansible/inventory/hosts.ini

Vamos confirmar que nossa configuração está funcionando executando um comando Ansible simples:

cd ~/project/ansible
ansible --list-hosts all

Este comando deve listar todos os hosts do nosso arquivo de inventário personalizado:

  hosts (5):
    web1.example.com
    web2.example.com
    db1.example.com
    db2.example.com
    localhost

Agora, o Ansible usará nosso arquivo de inventário personalizado por padrão quando executarmos comandos Ansible do diretório ~/project/ansible.

Verificando a Configuração do Inventário

Agora que configuramos nosso arquivo de inventário personalizado, vamos verificar se o Ansible o está usando corretamente e explorar alguns comandos para trabalhar com o inventário.

Verificando o Inventário com ansible-inventory

O comando ansible-inventory nos permite visualizar e validar nossa configuração de inventário:

cd ~/project/ansible
ansible-inventory --list

Isso exibirá o inventário em formato JSON:

{
  "_meta": {
    "hostvars": {
      "localhost": {
        "ansible_connection": "local"
      }
    }
  },
  "all": {
    "children": ["dbservers", "local", "ungrouped", "webservers"]
  },
  "dbservers": {
    "hosts": ["db1.example.com", "db2.example.com"]
  },
  "local": {
    "hosts": ["localhost"]
  },
  "webservers": {
    "hosts": ["web1.example.com", "web2.example.com"]
  }
}

Para um formato mais legível, podemos usar a opção --graph:

ansible-inventory --graph

Isso mostrará o inventário em uma estrutura semelhante a uma árvore:

@all:
  |--@dbservers:
  |  |--db1.example.com
  |  |--db2.example.com
  |--@local:
  |  |--localhost
  |--@ungrouped:
  |--@webservers:
  |  |--web1.example.com
  |  |--web2.example.com

Testando a Conexão com o Host Local

Vamos executar um comando ping simples para verificar se podemos nos comunicar com o host local:

ansible local -m ping

Você deve ver uma saída semelhante a:

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Executando um Comando Simples em Hosts

Também podemos executar um comando em nossos hosts usando o comando ansible. Como nossos hosts de exemplo não existem de fato, vamos direcionar apenas o host local:

ansible local -a "uname -a"

Isso executará o comando uname -a no host local e mostrará uma saída semelhante a:

localhost | CHANGED | rc=0 >>
Linux ubuntu 5.15.0-1033-aws #37-Ubuntu SMP Wed Aug 16 07:38:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Isso confirma que o Ansible está usando corretamente nosso arquivo de inventário personalizado e pode executar comandos nos hosts definidos nele.

Resumo

Neste tutorial, você aprendeu como configurar e definir o caminho de um arquivo de inventário personalizado no Ansible. Agora você entende:

  • O que é um arquivo de inventário do Ansible e sua localização padrão
  • Como criar um arquivo de inventário personalizado com grupos de hosts
  • Como configurar o Ansible para usar seu arquivo de inventário personalizado por padrão, usando tanto o método do arquivo de configuração quanto as variáveis de ambiente
  • Como verificar sua configuração de inventário usando vários comandos do Ansible

Essas habilidades o ajudarão a organizar seu fluxo de trabalho de automação do Ansible de forma mais eficiente. Ao personalizar a localização do arquivo de inventário, você pode gerenciar melhor sua infraestrutura com base na estrutura e nos requisitos do seu projeto.

Ao trabalhar em projetos maiores, você pode querer explorar inventários dinâmicos ou usar o Ansible Vault para proteger informações confidenciais em seus arquivos de inventário.