Introdução
Neste laboratório, você aprenderá sobre os comandos ad-hoc do Ansible. Os comandos ad-hoc são tarefas rápidas e únicas que você pode executar sem a necessidade de um playbook completo. Eles são perfeitos para operações simples, como verificar o status do sistema, gerenciar arquivos ou executar comandos rápidos em vários servidores. Ao final deste laboratório, você entenderá como usar os comandos ad-hoc de forma eficaz, o que é crucial para realizar tarefas rápidas e solucionar problemas em seu ambiente gerenciado pelo Ansible.
Entendendo a Estrutura dos Comandos Ad-Hoc do Ansible
Vamos começar entendendo a estrutura básica de um comando ad-hoc do Ansible. A sintaxe geral é:
ansible [padrão] -m [módulo] -a "[opções do módulo]"
Onde:
[padrão]é o host ou grupo de hosts do seu inventário que você deseja direcionar.-m [módulo]especifica qual módulo do Ansible usar.-a "[opções do módulo]"fornece argumentos para o módulo.
Antes de começarmos a executar comandos, vamos garantir que temos um arquivo de inventário adequado. Crie ou edite o arquivo de inventário:
nano /home/labex/project/inventory
Adicione o seguinte conteúdo:
localhost ansible_connection=local
[webservers]
localhost
[dbservers]
localhost
Salve e saia do editor.
Agora, vamos tentar um comando ad-hoc simples para fazer ping em todos os hosts em nosso inventário:
ansible all -i /home/labex/project/inventory -m ping
Você deve ver uma saída semelhante a esta:
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
Este comando usa o módulo ping para verificar a conectividade com todos os hosts no inventário. A palavra-chave all direciona todos os hosts.
Vamos detalhar este comando:
allé o padrão, direcionando todos os hosts no inventário.-i /home/labex/project/inventoryespecifica o arquivo de inventário a ser usado.-m pingdiz ao Ansible para usar o móduloping.
Executando Comandos com o Módulo Command
Um dos módulos mais comumente usados em comandos ad-hoc é o módulo command. Ele permite que você execute comandos arbitrários nos hosts de destino.
Vamos usar o módulo command para verificar o espaço em disco em todos os hosts:
ansible all -i /home/labex/project/inventory -m command -a "df -h"
Você deve ver a saída mostrando o uso do disco em sua máquina local.
Agora, vamos tentar executar um comando apenas no grupo webservers:
ansible webservers -i /home/labex/project/inventory -m command -a "uptime"
Este comando mostrará o tempo de atividade (uptime) de todos os hosts no grupo webservers.
O módulo command é o módulo padrão, então você pode omitir -m command se estiver usando este módulo. Por exemplo:
ansible dbservers -i /home/labex/project/inventory -a "free -m"
Este comando mostrará o uso de memória em todos os hosts no grupo dbservers.
Lembre-se, o módulo command não suporta variáveis de shell ou operações como |, >, <, &. Para esses casos, você precisaria usar o módulo shell.
Usando Outros Módulos Úteis em Comandos Ad-hoc
Embora o módulo command seja versátil, o Ansible oferece muitos outros módulos que podem ser muito úteis em comandos ad-hoc. Vamos explorar alguns deles.
O módulo
copy: Este módulo é usado para copiar arquivos da máquina local para os hosts remotos. Vamos criar um arquivo simples e copiá-lo para todos os hosts:echo "Hello from Ansible" > /home/labex/project/hello.txt ansible all -i /home/labex/project/inventory -m copy -a "src=/home/labex/project/hello.txt dest=/tmp/hello.txt"Este comando copia o arquivo
hello.txtda máquina local para o diretório/tmpem todos os hosts remotos.O módulo
file: Este módulo é usado para gerenciar arquivos e diretórios. Vamos criar um diretório em todos os webservers:ansible webservers -i /home/labex/project/inventory -m file -a "path=/tmp/test_dir state=directory mode=0755"Este comando cria um diretório chamado
test_dirno diretório/tmpem todos os webservers, com permissões definidas como 0755.O módulo
setup: Este módulo é usado para coletar fatos (facts) sobre os hosts remotos. Ele é executado automaticamente no início dos playbooks, mas também pode ser usado em comandos ad-hoc:ansible dbservers -i /home/labex/project/inventory -m setupEste comando exibirá uma grande quantidade de informações sobre os hosts no grupo dbservers. Para limitar a saída, você pode usar filtros:
ansible dbservers -i /home/labex/project/inventory -m setup -a "filter=ansible_distribution*"Isso mostrará apenas os fatos relacionados à distribuição do sistema operacional.
Esses exemplos demonstram como diferentes módulos podem ser usados para realizar várias tarefas rapidamente usando comandos ad-hoc.
Resumo
Neste laboratório, você aprendeu sobre comandos ad-hoc do Ansible e como usá-los de forma eficaz. Aqui estão os principais pontos a serem lembrados:
Comandos ad-hoc são tarefas rápidas e únicas que podem ser executadas sem criar um playbook completo.
A estrutura básica de um comando ad-hoc é:
ansible [pattern] -m [module] -a "[module options]"O módulo
pingé útil para verificar a conectividade com os hosts.O módulo
commandpermite que você execute comandos arbitrários nos hosts de destino. É o módulo padrão, então-m commandpode ser omitido.Outros módulos úteis para comandos ad-hoc incluem:
copy: para copiar arquivos para hosts remotosfile: para gerenciar arquivos e diretóriossetup: para coletar fatos (facts) sobre hosts remotos
Você pode direcionar grupos específicos de hosts usando os nomes dos grupos definidos em seu arquivo de inventário.
Comandos ad-hoc são ótimos para tarefas rápidas, mas para operações mais complexas ou repetíveis, os playbooks são mais adequados.
Comandos ad-hoc são um recurso poderoso do Ansible que permite que você execute tarefas rápidas em toda a sua infraestrutura. Eles são particularmente úteis para solucionar problemas, coletar informações ou fazer alterações rápidas. No entanto, para tarefas mais complexas ou repetíveis, é melhor usar playbooks.
Ao continuar trabalhando com o Ansible, pratique o uso de diferentes módulos em comandos ad-hoc. Explore a documentação do Ansible para aprender sobre mais módulos e seus usos. Lembre-se, embora os comandos ad-hoc sejam poderosos, eles não fornecem a idempotência e a reprodutibilidade dos playbooks, portanto, use-os com cautela em ambientes de produção.


