Ansible Local_action

Ansible Local_action
Na maioria das situações, usamos Ansible para gerenciar e configurar hosts remotos de um único nó de controle. Portanto, ao criar playbooks, é com o entendimento de que eles devem executar nas máquinas remotas que especificamos no bloco do host dos manuais.

No entanto, há casos em que você pode precisar executar uma ação específica na máquina local em vez de hosts remotos. Nesses casos, um recurso como LOCAL_ACTION vem a calhar.

Este guia mostrará como trabalhar com o módulo Ansible Local_Action para executar tarefas localmente.

Como funciona o módulo Ansible Local_Action

Como mencionado anteriormente, ao criar manuais, o alvo é tipicamente hosts remotos. Se você precisar executar uma tarefa para outros hosts que não os hosts remotos, você pode usar módulos Ansible como Local_Action e Delegate_to.

Delegate_to é útil quando você precisa definir uma tarefa para executar em um host específico. Você aponta o módulo delegate_to para os hosts de destino especificando seu nome de host ou endereço IP.

Local_action, por outro lado, executará as tarefas definidas apenas na máquina local. É semelhante a definir o valor de delegate_to para localhost ou 127.0.0.1

delegate_to: localhost

O módulo local_Action é conveniente quando você precisa executar uma tarefa na máquina local antes de enviá -la para sistemas remotos. Estes são principalmente comandos personalizados ou de shell dentro do sistema local.

A melhor maneira de entender como usar o módulo local_action é usando os manuais de exemplo.

Ansible Local_Action Exemplo de uso de casos

Por simplicidade, tentaremos manter as manuais curtas e não muito complexas.

Antes de focar nos manuais, descrevemos nossa configuração Ansible, o que nos permitirá entender como o módulo local_action funciona.

Em nossa configuração de exemplo, temos um Ubuntu 20.04 servidor que tem Ansible instalado. Isso servirá como o nó de controle Ansible.

Em seguida, temos três máquinas remotas: um Ubuntu 21.04 servidor, um servidor Debian 11 e um servidor CentOS 8.

Temos o arquivo de inventário Ansible contendo todos os endereços IP dos três hosts no nó de controle.

Depois que executamos um manual, ele é executado nos três hosts.

OBSERVAÇÃO: Vamos limitar a saída a um único host para evitar complexidade e confusão.

Local_action usando um módulo

Considere o seguinte manual:

---
- Hosts: todos
Gather_facts: Não
tornar verdade
tarefas:
- Nome: Archivetetelocallogfiles
LOCAL_ACTION:
Módulo: Comunidade.em geral.arquivo
caminho: /var /log
dest:/var/log/log.alcatrão.gz
Formato: gz
force_archive: verdadeiro
- Nome: copylogarchiveToremoteHost
Ansible.construídas em.cópia de:
src:/var/log/log.alcatrão.gz
dest: /home /ubuntu

No primeiro bloco, especificamos os hosts de destino para executar as tarefas, a menos que especificado de outra forma.

O manual continua a desativar a coleta de fatos sobre os hosts remotos, definindo o bloco Gather_facts para não.

Para ter a permissão de leitura e gravação, definimos o Block To True.

Nos blocos subsequentes, definimos duas tarefas:

A primeira tarefa cria um arquivo dos arquivos de log do sistema local. Delegamos a tarefa a ser executada no sistema local usando o bloco local_actiob. Em nosso exemplo, usamos um módulo comunitário que podemos instalar usando o comando:

Comunidade de instalação da coleção Ansible-Galaxy.em geral

A próxima tarefa copia o arquivo de log do sistema local para o caminho especificado no host remoto.

Salve o manual e execute -o usando o comando:

Ansible-playbook Local_action.yml

Após a conclusão bem -sucedida, você deve ver uma saída semelhante à mostrada abaixo:

Local_action usando um comando shell

O exemplo abaixo mostra como executar comandos do shell usando o módulo local_action.

---
- Hosts: todos
Gather_facts: Não
tornar verdade
tarefas:
- Nome: CountFilesAndDirectoreeOuhtHoThost RemoteHost
Shell: ls-la ~ | wc -l
Registro: Remote_files
- Nome: Printremotefiles
depurar:
msg: 'remote_files.stdout '
- Nome: CountFileSandDirectoreeOnThe Localmachine
LOCAL_ACTION: shellls-lA ~ | wc -l
REGISTRO: LOCAL_FILES
- Nome: printlocalfiles
depurar:
msg: 'local_files.stdout '

No manual de exemplo acima, usamos o módulo local_action para executar um comando shell. O comando Shell conta o número de arquivos e diretórios salvos em uma variável.

Em seguida, usamos o módulo de depuração para imprimir o número de arquivos no controle remoto e localhost.

Execute o arquivo como:

Ansible-PlayBook FileCount.yml

LOCAL_ACTION COM RUN_ONCE

Você pode usar o módulo local_action ao lado do parâmetro run_once.

---
- Hosts: todos
Gather_facts: Não
tornar verdade
tarefas:
- Nome: StoptheapacheServer
LOCAL_ACTION:
Módulo: Ansible.construídas em.serviço
Nome: httpd
Estado: parou
run_once: true

O manual acima será executado no bloco local_action uma vez no sistema local.

Conclusão

O módulo local_Action é útil quando você deseja delegar uma tarefa para executar na máquina local. Você pode usá -lo com um módulo Ansible ou um comando Shell.