Ansible Local_Action

Ansible Local_Action
I de fleste situasjoner bruker vi Ansible til å administrere og konfigurere eksterne verter fra en enkelt kontrollnode. Derfor, når du lager lekebøker, er det med den forståelse at de skal utføre på de eksterne maskinene vi spesifiserer i vertens blokkering av spillbøkene.

Imidlertid er det tilfeller der du kanskje trenger å utføre en spesifikk handling på den lokale maskinen i stedet for eksterne verter. I slike tilfeller en funksjon som LOCAL_ACTION kommer godt med.

Denne guiden vil vise deg hvordan du kan jobbe med Ansible Local_Action -modulen for å utføre oppgaver lokalt.

Hvordan den ansatte lokal_aksjonsmodulen fungerer

Som nevnt tidligere, når du oppretter spillbøker, er målet vanligvis eksterne verter. Hvis du trenger å utføre en oppgave til andre verter enn de eksterne vertene, kan du bruke Ansible -moduler som Local_Action og delegat_to.

Delegat_to er nyttig når du trenger å angi en oppgave for å utføre en bestemt vert. Du peker delegat_to -modulen til målvertene ved å spesifisere enten dets vertsnavn eller IP -adresse.

Local_Action, derimot, vil bare utføre setoppgavene på den lokale maskinen. Det ligner på å sette verdien av delegat_to til localhost eller 127.0.0.1

delegat_to: localhost

Local_action -modulen er praktisk når du først trenger å utføre en oppgave på den lokale maskinen før du sender den til eksterne systemer. Dette er hovedsakelig tilpassede eller skallkommandoer i det lokale systemet.

Den beste måten å forstå hvordan du bruker lokal_aksjonsmodulen er ved å bruke eksempel på spillbøker.

Ansible Local_Action Eksempel Bruk saker

For enkelhets skyld vil vi prøve å holde spillbokene korte og ikke for kompliserte.

Før vi fokuserer på lekebøk.

I vårt eksempeloppsett har vi en Ubuntu 20.04 Server som har Ansible installert. Dette vil tjene som Ansible Control Node.

Neste, vi har tre eksterne maskiner: en Ubuntu 21.04 Server, en Debian 11 -server og en centos 8 -server.

Vi har Ansible Inventory -filen som inneholder alle de tre vertenes IP -adresser i kontrollnoden.

Når vi har kjørt en spillbok, kjøres den på alle tre vertene.

MERK: Vi vil begrense produksjonen til en enkelt vert for å unngå kompleksitet og forvirring.

Local_Action ved hjelp av en modul

Tenk på følgende spillbok:

---
- Verter: Alle
Samle_facts: Nei
bli: sant
oppgaver:
- Navn: Arkivethelocallogfiles
Local_Action:
Modul: Fellesskap.generell.arkiv
Sti: /var /log
dest:/var/log/log.tjære.gz
Format: GZ
Force_archive: True
- Navn: CopylogarchivetoremoteHost
Ansible.bygget.kopiere:
src:/var/log/log.tjære.gz
Dest: /Home /Ubuntu

I den første blokken spesifiserer vi målvertene for å kjøre oppgavene med mindre annet er spesifisert.

Playbooken fortsetter å deaktivere faktainnsamling om de eksterne vertene ved å sette samlingen_facts-blokken til nei.

For å ha lest og skrivetillatelse, setter vi det å bli blokkert til sann.

I de påfølgende blokkene definerer vi to oppgaver:

Den første oppgaven oppretter et arkiv med loggfilene fra det lokale systemet. Vi delegerer oppgaven som skal kjøres i det lokale systemet ved å bruke den local_actiob -blokken. I vårt eksempel bruker vi en fellesskapsmodul som vi kan installere ved hjelp av kommandoen:

Ansible-Galaxy Collection Install Community.generell

Den neste oppgaven kopierer loggarkivet fra det lokale systemet til den spesifiserte banen på den eksterne verten.

Lagre spillboken og kjør den ved hjelp av kommandoen:

Ansible-Playbook local_action.yml

Etter vellykket fullføring, bør du se en utgang som ligner den som er vist nedenfor:

Local_Action ved hjelp av en skallkommando

Eksemplet nedenfor viser deg hvordan du kjører skallkommandoer ved hjelp av Local_Action -modulen.

---
- Verter: Alle
Samle_facts: Nei
bli: sant
oppgaver:
- Navn: CountfilesandDirectories Ons RemoteHost
Shell: LS-La ~ | wc -l
Register: Remote_files
- Navn: Printremotefiles
Debug:
MSG: 'Remote_Files.stdout '
- Navn: CountfilesandDirectoriesonthe localmachine
Local_Action: Shellls-La ~ | wc -l
Register: Local_Files
- Navn: Printlocalfiles
Debug:
msg: 'local_files.stdout '

I eksemplet Playbook ovenfor bruker vi Local_Action -modulen for å kjøre en Shell -kommando. Shell -kommandoen teller antall filer og kataloger som er lagret i en variabel.

Vi bruker deretter feilsøkingsmodulen for å skrive ut antall filer både på fjernkontrollen og Localhost.

Kjør filen som:

Ansible-Playbook FileCount.yml

Local_Action with Run_once

Du kan bruke Local_Action -modulen ved siden av RUN_ONCE -parameteren.

---
- Verter: Alle
Samle_facts: Nei
bli: sant
oppgaver:
- Navn: StopTheapacheserver
Local_Action:
Modul: Ansible.bygget.service
Navn: Httpd
Stat: stoppet
run_once: sant

Playbook ovenfor vil kjøre den lokale_aksjonsblokken en gang på det lokale systemet.

Konklusjon

Local_action -modulen er nyttig når du vil delegere en oppgave å kjøre på den lokale maskinen. Du kan bruke den begge med en Ansible -modul eller en skallkommando.