Como executar comandos em hosts de destino com o módulo de comando Ansible

AnsibleBeginner
Pratique Agora

Introdução

Ansible é uma poderosa ferramenta de automação de TI que simplifica a gestão de sistemas remotos. Neste tutorial, exploraremos o módulo de comando Ansible, que permite executar comandos em hosts de destino. Você aprenderá os fundamentos da execução de comandos, bem como técnicas avançadas para aprimorar seus fluxos de trabalho Ansible.

Compreendendo o Módulo de Comando Ansible

Ansible é uma poderosa ferramenta de automação de código aberto que permite gerenciar e configurar sua infraestrutura em vários hosts. O módulo de Comando Ansible é um dos módulos principais do Ansible que permite executar comandos arbitrários em hosts remotos.

O módulo de Comando Ansible fornece uma maneira simples e direta de executar comandos em hosts de destino. Ele permite executar comandos de shell, scripts ou qualquer outro arquivo executável no sistema remoto. Este módulo é particularmente útil quando você precisa realizar tarefas ad-hoc, solucionar problemas ou executar comandos personalizados em sua infraestrutura.

Para usar o módulo de Comando Ansible, você precisa definir o parâmetro command em seu playbook Ansible ou comando ad-hoc. O parâmetro command especifica o comando que você deseja executar no host remoto. Por exemplo:

- name: Executar um comando em um host remoto
  command: uptime
  register: uptime_result
  become: yes

Neste exemplo, o parâmetro command está definido como uptime, que executará o comando uptime no host remoto. O parâmetro register é usado para capturar a saída do comando, e o parâmetro become está definido como yes para executar o comando com privilégios elevados (se necessário).

O módulo de Comando Ansible também suporta várias opções, como:

  • creates: Especifica um arquivo que deve existir antes da execução do comando.
  • removes: Especifica um arquivo que não deve existir antes da execução do comando.
  • chdir: Altera o diretório de trabalho atual para o caminho especificado antes de executar o comando.
  • stdin: Passa a string especificada para o comando por meio da entrada padrão.
  • warn: Controla se uma mensagem de aviso será exibida se o comando puder potencialmente alterar um arquivo importante.

Compreendendo o módulo de Comando Ansible, você pode executar comandos em seus hosts remotos de forma eficiente, automatizar tarefas repetitivas e otimizar seus processos de gerenciamento de infraestrutura.

Executando Comandos em Hosts Remotos

Execução Básica de Comandos

Para executar um comando em um host remoto usando o módulo de Comando Ansible, você pode usar a seguinte sintaxe básica:

- name: Executar um comando em um host remoto
  command: <comando>
  register: <variável_resultado>
  become: yes

Neste exemplo, <comando> é o comando real que você deseja executar no host remoto, e <variável_resultado> é a variável que armazenará a saída do comando. O parâmetro become é definido como yes para executar o comando com privilégios elevados (se necessário).

Por exemplo, para verificar o tempo de atividade de um host remoto:

- name: Verificar tempo de atividade do host remoto
  command: uptime
  register: uptime_result
  become: yes

A saída do comando uptime será armazenada na variável uptime_result, que você poderá usar em seu playbook ou comando ad-hoc.

Lidando com Erros de Comando

Por padrão, o módulo de Comando Ansible falhará se o comando executado retornar um código de saída diferente de zero. Você pode lidar com erros de comando usando o parâmetro ignore_errors:

- name: Executar um comando em um host remoto
  command: <comando>
  register: <variável_resultado>
  ignore_errors: yes

Isso permitirá que o playbook continue a execução mesmo se o comando falhar.

Capturando a Saída do Comando

Você pode capturar a saída de um comando usando o parâmetro register, como mostrado nos exemplos anteriores. A saída será armazenada na variável especificada, que você poderá usar em seu playbook ou comando ad-hoc.

Por exemplo, para capturar a saída do comando uptime e imprimi-la:

- name: Verificar tempo de atividade do host remoto
  command: uptime
  register: uptime_result
  become: yes

- name: Imprimir tempo de atividade
  debug:
    msg: "{{ uptime_result.stdout }}"

Isso imprimirá a saída do comando uptime no console.

Compreendendo os fundamentos de execução de comandos em hosts remotos com o módulo de Comando Ansible, você pode automatizar efetivamente uma ampla gama de tarefas em sua infraestrutura.

Técnicas Avançadas de Execução de Comandos

Execução Condicional de Comandos

Às vezes, você pode querer executar um comando somente se determinada condição for atendida. Você pode usar a cláusula when para executar comandos condicionalmente em seu playbook Ansible:

- name: Executar comando se a condição for atendida
  command: <comando>
  when: <condição>
  register: <variável_resultado>
  become: yes

Neste exemplo, o <comando> será executado somente se a <condição> for verdadeira.

Por exemplo, para executar o comando free somente se o sistema tiver menos de 20% de memória livre:

- name: Verificar memória livre
  command: free -m
  register: memory_result
  become: yes

- name: Executar comando se a memória livre for inferior a 20%
  command: <comando_a_executar>
  when: (memory_result.stdout_lines[1].split()[3]|int / memory_result.stdout_lines[1].split()[1]|int * 100) < 20
  register: <variável_resultado>
  become: yes

Iterando sobre Comandos

Você também pode usar loops para executar vários comandos em uma única tarefa. O módulo de Comando Ansible suporta o parâmetro loop para esse fim:

- name: Executar vários comandos
  command: "{{ item }}"
  loop:
    - <comando1>
    - <comando2>
    - <comando3>
  register: <variável_resultado>
  become: yes

Neste exemplo, os comandos especificados (<comando1>, <comando2> e <comando3>) serão executados um por um, e a saída será armazenada na <variável_resultado>.

Lidando com Timeouts de Comando

Por padrão, o Ansible aguardará indefinidamente para que um comando seja concluído. No entanto, você pode definir um timeout para a execução do comando usando o parâmetro timeout:

- name: Executar comando com timeout
  command: <comando>
  timeout: 60
  register: <variável_resultado>
  become: yes

Neste exemplo, o comando será encerrado se levar mais de 60 segundos para ser concluído.

Dominando essas técnicas avançadas de execução de comandos, você pode aprimorar ainda mais suas capacidades de automação Ansible e lidar com uma ampla variedade de cenários em seu gerenciamento de infraestrutura.

Resumo

Este tutorial Ansible forneceu um guia abrangente sobre o uso do módulo de comando para executar comandos em hosts remotos. Ao compreender os fundamentos e explorar técnicas avançadas, você pode aproveitar os recursos do Ansible para otimizar suas operações de TI e melhorar a eficiência em toda a sua infraestrutura.