Instalar o Ansible e conectar aos hosts gerenciados

PythonBeginner
Pratique Agora

Introdução

Você está preparando um nó de controle Ansible para gerenciar dois servidores Linux. Antes de escrever automações, precisa de uma instalação previsível e de comprovar que o controlador consegue executar módulos Python nos dois destinos.

Neste laboratório, você criará um ambiente virtual de projeto, instalará o Ansible Core a partir de um cache de pacotes offline, o ativará no Terminal e usará um inventário fornecido para testar duas conexões SSH reais. Conhecimentos básicos da linha de comando são suficientes; não é necessário ter experiência com Ansible.

Criar um ambiente isolado no controlador

Nesta etapa, você criará o ambiente Python que conterá sua própria instalação do Ansible.

O Ansible é executado em um nó de controle e se conecta aos nós gerenciados por SSH. Seu Terminal do LabEx é o nó de controle Ubuntu. Dois contêineres Linux preparados, web1 e web2, atuam como nós gerenciados separados: eles têm endereços, nomes de host e sistemas de arquivos diferentes, mas compartilham o kernel da VM. Você não precisará usar comandos Docker nem alterar as configurações de login da plataforma.

Um ambiente virtual Python mantém os pacotes do projeto separados do sistema operacional e das ferramentas compartilhadas do curso. A imagem já tem um comando Ansible compartilhado para a infraestrutura, mas sua tarefa é instalar uma cópia separada em /home/labex/project/.venv.

Abra o Terminal. Use cd para selecionar o diretório do projeto; os caminhos relativos seguintes serão resolvidos a partir daqui:

cd /home/labex/project

pwd imprime o diretório de trabalho atual:

pwd

A saída deve ser /home/labex/project. Continue usando esse diretório durante todo o laboratório.

ansible-python seleciona o Python preparado para o curso. --version exibe sua versão:

ansible-python --version

Espere ver Python 3.12.15. O Python do sistema do nó de controle permanece separado; não o substitua.

A opção -m venv executa o módulo de ambientes virtuais do Python. O argumento final .venv nomeia o diretório a ser criado dentro do projeto. O ponto inicial o oculta das listagens comuns de diretórios:

ansible-python -m venv .venv

Isso normalmente termina sem saída. O comando cria o ambiente e o pip, o instalador de pacotes do Python; ainda não instala o Ansible.

Execute o Python do novo ambiente por seu caminho relativo. Isso confirma que você pode usar o interpretador isolado sem ativá-lo primeiro:

.venv/bin/python --version

Ele também deve imprimir Python 3.12.15. Os dois comandos Python usam a mesma versão do Python, mas os pacotes instalados em .venv pertencem a este projeto.

Instalar e ativar o Ansible offline

Nesta etapa, você instalará a versão fixada do Ansible Core em .venv e fará o Terminal usá-la.

O Ansible Core fornece o comando ansible e os módulos integrados usados neste curso. Os arquivos wheel preparados são pacotes Python locais, portanto a instalação não depende de downloads da internet. O arquivo de requisitos especifica versões compatíveis e fixadas.

O comando a seguir usa o Python do projeto para executar o pip. install instala pacotes, --no-index desativa os índices de pacotes online, --find-links seleciona o diretório local de wheels e -r lê o arquivo de requisitos:

.venv/bin/python -m pip install --no-index --find-links /opt/labex/ansible-course/wheels -r /opt/labex/ansible-course/requirements.txt

A saída lista os pacotes processados do cache local e termina com Successfully installed ..., incluindo ansible-core-2.21.5. Uma instalação repetida pode exibir Requirement already satisfied.

A ativação coloca o diretório de comandos do ambiente no início do caminho de busca deste shell. source executa o script de ativação no Terminal atual, para que a alteração continue valendo para os comandos seguintes:

source .venv/bin/activate

O prompt pode agora começar com (.venv). O Terminal usa zsh; rehash atualiza seu cache de localizações de comandos após a instalação de novos executáveis:

rehash

command -v mostra qual executável um nome de comando seleciona:

command -v ansible

Espere ver /home/labex/project/.venv/bin/ansible. Um caminho compartilhado como /usr/local/bin/ansible não comprova que a instalação do projeto está ativa. Se abrir um novo Terminal, volte ao projeto, ative o ambiente novamente e execute rehash.

Agora inspecione a versão do Ansible em execução:

ansible --version

Procure estes campos na saída:

ansible [core 2.21.5]
  config file = /home/labex/project/ansible.cfg
  ...
  ansible python module location = /home/labex/project/.venv/lib/python3.12/site-packages/ansible
  executable location = /home/labex/project/.venv/bin/ansible
  python version = 3.12.15 ...
  ...

Os caminhos do executável e do módulo mostram que você está executando a instalação do projeto. O arquivo de configuração é fornecido pelo laboratório; você aprenderá a configurá-lo no próximo grupo de habilidades.

Por fim, o comando check do pip testa se as dependências dos pacotes instalados são compatíveis:

.venv/bin/python -m pip check

Espere ver No broken requirements found. Agora você tem um controlador funcional sem alterar os pacotes do sistema nem as ferramentas compartilhadas.

Conectar aos dois nós gerenciados

Nesta etapa, você inspecionará o inventário preparado e executará um teste de conexão baseado em Python nos dois destinos SSH.

Um inventário informa ao Ansible quais hosts ele pode gerenciar. cat imprime o conteúdo de um arquivo; leia o inventário fornecido para o projeto:

cat inventory.ini

Sua estrutura é:

web1 ansible_host=...
web2 ansible_host=...

[all:vars]
ansible_user=automation
ansible_ssh_private_key_file=/home/labex/.local/share/ansible-course/id_ed25519
ansible_python_interpreter=/usr/bin/python3

Os endereços reais substituem ...; use os valores existentes. web1 e web2 são nomes do inventário, enquanto ansible_host fornece cada destino SSH. [all:vars] aplica as configurações de conexão seguintes aos dois hosts. automation é a conta comum dentro dos nós gerenciados, e não seu login labex no nó de controle. O laboratório fornece uma nova chave de treinamento e chaves de host confiáveis; você não precisa gerar chaves nem alterar as configurações SSH.

O caminho Python de destino /usr/bin/python3 pertence a cada nó gerenciado. Ele é diferente do Python do projeto no controlador: a maioria dos módulos Ansible precisa de Python tanto no destino quanto no controlador.

O ansible.cfg fornecido seleciona esse inventário quando os comandos são executados a partir do projeto. all seleciona todos os hosts do inventário; --list-hosts mostra previamente essa seleção sem executar um módulo:

ansible all --list-hosts

Espere ver exatamente estes dois nomes de host; a ordem pode variar:

  hosts (2):
    web1
    web2

A opção -m seleciona um módulo, uma unidade de trabalho do Ansible. ansible.builtin.ping é o nome totalmente qualificado do módulo ping integrado. Ele se conecta por SSH e executa Python em cada destino; não é um ping de rede ICMP:

ansible all -m ansible.builtin.ping

Os dois hosts devem retornar resultados com estes campos estáveis; a ordem dos resultados pode variar:

web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Um pong comprova que a autenticação SSH e a execução de Python no destino funcionaram para aquele host. changed: false significa que esse teste de conexão não solicitou uma alteração de configuração. O sucesso em apenas um host não é suficiente: procure os dois nomes. UNREACHABLE significa que a conexão falhou; FAILED significa que uma tarefa falhou. Uma lista de hosts vazia também não demonstra conectividade.

Se o comando falhar, primeiro confira se você ainda está no diretório do projeto, se command -v ansible seleciona .venv/bin/ansible e se o inventário fornecido ainda contém os dois destinos originais. Mantenha inalteradas as configurações de login, SSH e sudo da plataforma.

Resumo

Você criou um ambiente isolado no controlador, instalou pacotes de versões fixadas do Ansible Core a partir de um cache offline, ativou os comandos do projeto e verificou seus caminhos e dependências. Leu o inventário fornecido e recebeu um pong Python de cada nó distinto gerenciado por SSH. Agora você consegue distinguir o Python do controlador, o Python do destino e os nomes do inventário antes de aprender a configurar o projeto.