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.
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 mydirOra che abbiamo creato un playbook, puoi eseguirlo usando il terminale Linux eseguendo:
libro di prova Ansible-Playbook.YMLEsempio 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 $ homeEsempio 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 dataAbbiamo 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: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 fileInnanzitutto, 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È 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.