Hvordan bruke Ansible Shell -modulen

Hvordan bruke Ansible Shell -modulen
Ansible er mye brukt som en automatiseringsmotor for den trenger, for eksempel konfigurasjonsadministrasjon, skyforsyning og mye mer. Automatisering høres bra ut, men hvordan oppnår Ansible det? Den bruker "moduler" som er ansvarlige for automatiseringen. Uten disse modulene, må en bruker bruke ad hoc -kommandoer for å utføre oppgaver.

Ad hoc -kommandoer er imidlertid ikke gjenbrukbare. Jada, de gir deg en måte å raskt drive individuelle oppgaver på, men de kan ikke gjenbrukes. En analogi kan tegnes der Playbook-modus er som et skallskript, mens individuelle kommandoer er en-linjers.

Apropos Shell, har Ansible også en skallmodul. Denne modulen brukes til å kjøre skallkommandoer på målsystemer. I denne guiden vil vi gå over Ansible Shell -modulen og demonstrere eksempler på hvordan den kan brukes.

Hva er skallmodulen?

Ansible Shell -modulen lar brukeren kjøre komplekse kommandoer med omdirigering, rør osv. Det tar et kommandonavn, argumentene med hvite romavgrensere og kjører det på eksterne verter.

Det kan høres ut som nøyaktig det samme som Ansible Command -modulen, men forskjellen er at den kjører kommandoene på verten ved hjelp av et skall. Shell -modulen har også tilgang til miljøvariabler og spesielle operatører som | &; etc. Enda bedre, du kan kjøre hele skript ved hjelp av skallmodulen. Ikke desto mindre er det vanlig kunnskap blant ansible brukere at kommandomodulen er et tryggere og mer forutsigbart alternativ enn Shell -modulen.

Til slutt er det viktig å huske på at denne modulen bare fungerer med Linux -systemer. Windows -brukere kan bruke Ansible.vinduer.Win_shell på sin plass. Når det er sagt, la oss komme inn på detaljene i Ansible Shell -modulen.

Bruke Ansible Shell -modulen

La oss ta en titt på parametrene du trenger å overføre verdier til mens vi begynner å kjøre kommandoer og skript.

  • CHDIR - Endrer gjeldende katalog før utførelse.
  • CMD - En streng som inneholder kommandoen som skal utføres, sammen med argumentene.
  • kjørbar - krever en absolutt vei for å endre skallet du bruker.
  • Fjerner - tar et filnavn. Brukes til å ekskludere trinn når en fil ikke eksisterer.
  • stdin - lar brukeren sette stdin til en kommando til en bestemt verdi.
  • Advarsel - tar ja (standard) eller nei, aktiverer eller deaktiverer oppgavens advarsler.

Med det ut av veien, la oss komme til noen eksempler på hvordan du bruker Ansible Shell.

Eksempel 1: Endring av arbeidskatalogen

Hvis du vil endre arbeidskatalogen før du utfører en kommando, er det slik det ville bli gjort.

- Navn: Endre arbeidskatalogen til myDIR

Ansible.bygget.Shell: MyScript.sh >> mylog.tekst

args:

chdir: mydir/

Nå som vi har laget en spillbok, kan du kjøre den ved hjelp av Linux -terminalen ved å kjøre:

Ansible-Playbook Testbook.yml

Eksempel 2: Ekstrahering av kommandoutgang

Hvis du vil fange og lagre returverdien til en skallkommando, kan registeret nøkkelord brukes.

- Navn: Opprette en .txt -fil i $ hjem

Shell: Echo "Redd meg!"> $ Hjem/test.tekst

Register: shell_output

- Debug: var = shell_output

Eksempel 3: Kontroller datoen

La oss starte med å sjekke datoen på vår eksterne server som heter Test. Legg merke til hvordan syntaksen til skallmodulen er annerledes her. Dette er bare en annen måte å bruke Ansible Shell -modulen.

- Navn: Kontroller datoen

Shell:

"Dato"

Register: Datecmd

Tagger: Datecmd

- Debug: msg = "Datecmd.stdout "

Vi har brukt den enkle datakommandoen for å sjekke datoen på et eksternt system. Dessuten blir output fra kommandoen (selve datoen) returnert til et register som heter Datecmd. Til slutt viser vi innholdet i registervariabelen Datecmd ved å skrive ut STDOUT -attributtet.

Eksempel 4: Kjøre flere kommandoer

I dette eksemplet vil vi lage noen tekstfiler i en midlertidig katalog.

oppgaver:

- Navn: Opprette flere filer

Ansible.bygget.Shell: |

ekko "Jeg er fil 1"> /tmp /myfile1.tekst
ekko "Jeg er fil 2"> /tmp /myfile2.tekst
ekko "Jeg er fil 3"> /tmp /myfile3.tekst
bli: sant
args:
chdir: /var /log

Her har vi brukt skallkode for å lage tre filer, nemlig myfile1, myfile2, og myfile3. Den blir: ekte linje lar deg "bli" brukeren av den eksterne verten. Til slutt passerer vi et CHDIR -argument og endrer katalogen.

Eksempel 5: Bruke omdirigering og rør

La oss nå se hvordan rør og omdirigering fungerer i Ansible Shell -modulen. Vi vil kjøre en enkel LS -kommando med litt forbehandling gjennom AWK. Videre bruker vi SED for å fjerne tomme linjer. Til slutt vil vi omdirigere utdataene til en tekstfil.

- Navn: Ta en liste over katalogen og mate den til en fil

Shell:

"ls -lrt/apps | awk 'print $ 9' | sed '/^$/d'>/tmp/mydir.tekst "

Register: LSOUT

Tagger: lsout

- Navn: Vis filen

Shell: Cat /TMP /Dirlist.tekst

Register: DisplayList

- Debug: msg = "displayList.stdout_lines "

Først utfører vi den nevnte kommandoen og lagrer resultatet i MyDir.tekst. Etterpå bruker vi en annen kommandokatt for å lagre innholdet i filen i et register. Til slutt vises denne registervariabelen.

Hvordan forhindre kommandoinjeksjon?

Som vi nevnte tidligere, regnes kommandomodulen som en tryggere måte å gjøre ting. Imidlertid har det noe begrenset funksjonalitet. Så, hvordan bruker man skallmodulen trygt?

Du kan bruke tilbudsfilteret for å beskytte variabelnavnene du sender til skallmodulen fra kommandoinjeksjon. Nedenfor er et eksempel på denne desinfiseringen.

- Navn: Opprette en .txt med tilbudsfilteret

Shell: Echo "I Am Safe"> $ Home/SafeFile | sitat .tekst

Det er en god praksis å alltid bruke tilbudsfilteret med variablene dine. Dette vil hindre hackere i å endre kommandoen ved kjøretid. Det er mye som SQL -injeksjon, men så lenge du tar sikkerhetsforholdsregler, trenger du ikke å bekymre deg!

Konklusjon

Ansible Shell -modulen er en allsidig og kraftig modul som øker brukerkontrollen og gjør ekstern konfigurasjon mye enklere. I denne artikkelen har vi sett på hva den gjør, hvilke parametere den har og hvilke argumenter den krever, og mer. Forhåpentligvis er du nå godt utstyrt til å bruke Ansible Shell -modulen.