Ansible Local_Action

Ansible Local_Action
Nella maggior parte delle situazioni, utilizziamo Ansible per gestire e configurare host remoti da un singolo nodo di controllo. Quindi, quando creano playbook, è con la consapevolezza che dovranno eseguire sulle macchine remote che specifichiamo nel blocco dell'host dei playbooks.

Tuttavia, ci sono casi in cui potrebbe essere necessario eseguire un'azione specifica sulla macchina locale anziché su host remoti. In tali casi, una funzione simile locale_action torna utile.

Questa guida ti mostrerà come lavorare con il modulo Ansible Local_Action per eseguire le attività a livello locale.

Come funziona il modulo ANSIBE Local_Action

Come accennato in precedenza, durante la creazione di playbook, l'obiettivo è in genere host remoto. Se è necessario eseguire un'attività su host diversi dagli host remoti, è possibile utilizzare moduli Ansible come local_action e delegate_to.

Delegate_to è utile quando è necessario impostare un'attività da eseguire su un host specifico. Si punta il modulo delegate_to agli host di destinazione specificando il suo nome host o l'indirizzo IP.

Local_Action, d'altra parte, eseguirà solo le attività impostate sulla macchina locale. È simile all'impostazione del valore di delegate_to su localhost o 127.0.0.1

delegate_to: localhost

Il modulo Local_Action è conveniente quando è necessario eseguire un'attività sulla macchina locale prima di inviarla a sistemi remoti. Questi sono principalmente comandi personalizzati o shell all'interno del sistema locale.

Il modo migliore per capire come utilizzare il modulo Local_Action è usando Esempio di playbook.

ANSIBLE LOCAL_ACTION Esempio di casi d'uso

Per semplicità, cercheremo di mantenere i playbook brevi e non troppo complessi.

Prima di concentrarci sui playbook, descriviamo la nostra configurazione Ansible, che ci permetterà di capire come funziona il modulo Local_Action.

Nel nostro esempio di configurazione, abbiamo un Ubuntu 20.04 Server che ha installato Ansible. Questo fungerà da nodo di controllo Ansible.

Successivamente, abbiamo tre macchine remote: un Ubuntu 21.04 server, un server Debian 11 e un server CentOS 8.

Abbiamo il file di inventario Ansible contenente tutti e tre gli indirizzi IP degli host nel nodo di controllo.

Una volta eseguito un playbook, esegue su tutti e tre gli host.

NOTA: Limiteremo l'output a un singolo host per evitare complessità e confusione.

Local_Action usando un modulo

Considera il seguente playbook:

---
- Host: tutto
Gather_Facts: no
diventa vero
compiti:
- Nome: file di archivi
Local_Action:
Modulo: comunità.generale.archivio
Path: /var /log
dest:/var/log/log.catrame.Gz
Formato: GZ
force_archive: vero
- Nome: CopylogarchiveToremoteHost
Ansible.costruito.copia:
src:/var/log/log.catrame.Gz
dest: /home /ubuntu

Nel primo blocco, specifichiamo gli host di destinazione per eseguire le attività se non diversamente specificato.

Il playbook continua a disabilitare la raccolta di fatti sugli host remoti impostando il blocco Gather_Facts su NO.

Per avere l'autorizzazione di lettura e scrittura, impostiamo il blocco diventato true.

Nei blocchi successivi, definiamo due compiti:

La prima attività crea un archivio dei file di registro dal sistema locale. Delegare l'attività di eseguire nel sistema locale utilizzando il blocco locale_actiob. Nel nostro esempio, utilizziamo un modulo community che possiamo installare usando il comando:

collezione Ansible-Galaxy Installa comunità.generale

La prossima attività copia l'archivio di registro dal sistema locale al percorso specificato sull'host remoto.

Salva il playbook ed eseguilo usando il comando:

Ansible-Playbook Local_Action.YML

Al completamento con successo, dovresti vedere un output simile a quello mostrato di seguito:

Local_Action usando un comando shell

L'esempio seguente mostra come eseguire comandi shell usando il modulo Local_Action.

---
- Host: tutto
Gather_Facts: no
diventa vero
compiti:
- Nome: CountFilesAndDirectories in caso di telecomando
Shell: ls-la ~ | wc -l
Registro: remote_files
- Nome: PrintremoteFiles
debug:
msg: 'remote_files.stdout '
- Nome: CountFilesAndDirectories in tutta la Machine Local
Local_Action: Shellls-La ~ | wc -l
Registro: local_files
- Nome: PrintLocalFiles
debug:
msg: 'local_files.stdout '

Nell'esempio di playbook sopra, utilizziamo il modulo Local_Action per eseguire un comando shell. Il comando shell conta il numero di file e directory salvati su una variabile.

Quindi utilizziamo il modulo di debug per stampare il numero di file sia sul remoto che sul locale.

Esegui il file come:

Ansible-Playbook FileCount.YML

Local_Action con run_once

È possibile utilizzare il modulo Local_Action insieme al parametro run_once.

---
- Host: tutto
Gather_Facts: no
diventa vero
compiti:
- Nome: Stoptheapacheserver
Local_Action:
Modulo: Ansible.costruito.servizio
Nome: httpd
Stato: fermato
run_once: vero

Il playbook sopra eseguirà il blocco Local_Action una volta sul sistema locale.

Conclusione

Il modulo Local_Action è utile quando si desidera delegare un'attività da eseguire sulla macchina locale. Puoi usarlo entrambi con un modulo Ansible o un comando shell.