Come usare il modulo shell Ansible

Come usare il modulo shell Ansible
Ansible è ampiamente utilizzato come motore di automazione per cui ha bisogno come la gestione della configurazione, il provisioning del cloud e molto altro. L'automazione suona alla grande, ma come fa Ansible? Utilizza "moduli" che sono responsabili dell'automazione. Senza questi moduli, un utente dovrebbe utilizzare i comandi ad hoc per eseguire le attività.

Tuttavia, i comandi ad hoc non sono riutilizzabili. Certo, ti forniscono un modo per eseguire rapidamente compiti individuali, ma non possono essere riutilizzati. È possibile disegnare un'analogia in cui la modalità Playbook è come uno script di shell, mentre i singoli comandi sono una linea.

Parlando di shell, Ansible ha anche un modulo Shell. Questo modulo viene utilizzato per eseguire comandi shell sui sistemi target. In questa guida, esamineremo il modulo di shell Ansible e dimostreremo esempi di come può essere utilizzato.

Cos'è il modulo shell?

Il modulo shell Ansible consente all'utente di eseguire comandi complessi con reindirizzamento, tubi, ecc. Prende un nome di comando, i suoi argomenti con delimitatori di spazio bianco e lo esegue su host remoti.

Può sembrare esattamente la stessa cosa del modulo di comando Ansible, ma la differenza è che esegue i comandi sull'host usando una shell. Il modulo Shell ha anche accesso a variabili di ambiente e operatori speciali come | &; eccetera. Ancora meglio, puoi eseguire interi script usando il modulo shell. Tuttavia, è una conoscenza comune tra gli utenti di Ansible che il modulo di comando sia un'opzione più sicura e prevedibile rispetto al modulo shell.

Infine, è importante tenere presente che questo modulo funziona solo con i sistemi Linux. Gli utenti di Windows possono usare Ansible.finestre.win_shell al suo posto. Detto questo, entriamo nei dettagli del modulo di shell Ansible.

Usando il modulo shell Ansible

Prima di iniziare a eseguire comandi e script, diamo un'occhiata ai parametri a cui dovrai passare i valori durante l'utilizzo di questo modulo.

  • chdir - modifica la directory corrente prima dell'esecuzione.
  • CMD - Una stringa contenente il comando da eseguire, insieme ai suoi argomenti.
  • eseguibile: richiede un percorso assoluto per cambiare la shell che stai usando.
  • Rimuove: prende un nome file. Usato per escludere i passaggi quando un file non esiste.
  • stdin - consente all'utente di impostare la stdin di un comando su un valore specifico.
  • Warn - prende sì (impostazione predefinita) o no, abilitando o disabilita gli avvisi di attività.

Con questo fuori mano, arriviamo ad alcuni esempi di come usare Ansible Shell.

Esempio 1: modifica della directory di lavoro

Se vuoi cambiare la directory di lavoro prima di eseguire un comando, ecco come sarebbe fatto.

- Nome: modificare la directory di lavoro in mydir

Ansible.costruito.Shell: MyScript.sh >> mylog.TXT

Args:

chdir: mydir/

Ora che abbiamo creato un playbook, puoi eseguirlo usando il terminale Linux eseguendo:

libro di prova Ansible-Playbook.YML

Esempio 2: output del comando di estrazione

Se si desidera acquisire e archiviare il valore di ritorno di un comando shell, la parola chiave del registro può essere utilizzata.

- Nome: creazione di un .file txt in $ home

Shell: echo "salvami!"> $ Home/test.TXT

Registro: shell_output

- Debug: var = shell_output

Esempio 3: controllo della data

Cominciamo controllando la data sul nostro server remoto chiamato test. Nota come la sintassi del modulo shell è diversa qui. Questo è solo un altro modo per utilizzare il modulo shell Ansible.

- Nome: Controllo della data

conchiglia:

"data"

Registro: Datecmd

Tag: Datecmd

- debug: msg = "datecmd.stdout "

Abbiamo utilizzato il comando di data semplice per verificare la data su un sistema remoto. Inoltre, l'output del comando (la data stessa) viene restituito a un registro chiamato DateCmd. Infine, visualizziamo il contenuto della variabile Registra DateCMD stampando il suo attributo stdout.

Esempio 4: Esecuzione di più comandi

In questo esempio, creeremo alcuni file di testo in una directory temporanea.

compiti:

- Nome: creazione di più file

Ansible.costruito.Shell: |

echo "I am file 1"> /tmp /myfile1.TXT
echo "I am file 2"> /tmp /myfile2.TXT
echo "I am file 3"> /tmp /myfile3.TXT
diventa vero
Args:
chdir: /var /log

Qui, abbiamo usato il codice Shell per creare tre file, vale a dire MyFile1, myfile2, e myfile3. The Beak: True Line ti consente di "diventare" l'utente dell'host remoto. Infine, passiamo un argomento chdir e cambiamo la directory.

Esempio 5: applicazione di reindirizzamento e tubo

Ora vediamo come funzionano i tubi e il reindirizzamento nel modulo ansible shell. Eseguiremo un semplice comando LS con un po 'di preelaborazione tramite AWK. Inoltre, usiamo SED per rimuovere le linee vuote. Alla fine, reindirizzeremo l'output a un file di testo.

- Nome: prendi un elenco della directory e alimentalo a un file

conchiglia:

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

Registro: lsout

Tag: lsout

- Nome: visualizzare il file

Shell: Cat /Tmp /Dirlist.TXT

Registro: ExplaceList

- Debug: msg = "DisplayList.stdout_lines "

Innanzitutto, eseguiamo il comando sopra menzionato e archiviamo il suo risultato in mydir.TXT. Successivamente, utilizziamo un altro gatto di comando per salvare il contenuto del file in un registro. Infine, viene visualizzata questa variabile di registro.

Come prevenire l'iniezione di comando?

Come accennato in precedenza, il modulo di comando è considerato un modo più sicuro per fare le cose. Tuttavia, ha una funzionalità in qualche modo limitata. Quindi, come si utilizza il modulo shell in modo sicuro?

È possibile utilizzare il filtro preventivo per proteggere i nomi delle variabili che passa al modulo shell dall'iniezione di comandi. Di seguito è riportato un esempio di questa sanificazione.

- Nome: creazione di un .txt con il filtro preventivo

Shell: echo "I Am Safe"> $ Home/Safefile | citazione .TXT

È una buona pratica usare sempre il filtro preventivo con le tue variabili. Questo impedirà agli hacker di cambiare il comando in fase di esecuzione. È molto simile all'iniezione SQL, ma fintanto che prendi precauzioni di sicurezza, non devi preoccuparti!

Conclusione

Il modulo shell Ansible è un modulo versatile e potente che aumenta il controllo dell'utente e rende molto più semplice la configurazione remota. In questo articolo, abbiamo esaminato ciò che fa, quali parametri ha e quali argomenti richiede e altro ancora. Spero che ora sei ben attrezzato per usare il modulo di shell Ansible.