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 webdbservers: Contém dois servidores de banco de dadoslocal: 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:
- Variável de ambiente
ANSIBLE_CONFIG ansible.cfgno diretório atual~/.ansible.cfg(diretório home do usuário)/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 personalizadohost_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.


