Come usare i loop in Ansible

Come usare i loop in Ansible
Quando si lavora con il codice, potrebbe essere necessario eseguire un blocco di codice più volte. Scrivere lo stesso blocco di codice ancora e ancora è ridondante e considerato un cattivo design. Qui è dove arrivano i loop.

I loop sono insiemi di comandi o istruzioni impostati per ripetere un determinato numero di volte secondo i requisiti dell'utente. I loop consentono un migliore flusso di controllo negli script e rimuovi la ridondanza complessiva da essi.

Ansible viene inoltre fornito con più metodi di blocco di codice. Questa guida è pensata per aiutarti a conoscere i loop in Ansible. Copriremo le basi del looping in Ansible, insieme alla sintassi ed esempi appropriati.

Detto questo, diamo un'occhiata ai loop in Ansible.

Parole chiave per i loop in Ansible

Ansible utilizza le seguenti parole chiave per le sue strutture ad anello:

  • "ciclo continuo"
  • "con_"
  • "Fino a"

Come suggerisce il nome, "Loop" è il comando di riferimento per l'implementazione di loop in blocchi di codice.

Simile a "Loop", hai "with_". Questo comando richiede di fornirgli un plug -in di ricerca. Si consiglia di utilizzare con_* anziché loop quando sono coinvolti plugin di ricerca.

"Fino" ti consente di continuare a eseguire un'attività fino a quando non viene soddisfatta la condizione richiesta. È il più vicino alla condizione "while" nel flusso di controllo.

Ora che hai un'idea delle parole chiave per i loop, puoi procedere a conoscere come implementarle nel codice.

Loop standard in Ansible

Inizieremo discutendo su come implementare i loop standard in Ansible. Per i loop standard, useremo la parola chiave "with_".

Questo esempio dimostra come possiamo usare loop per aggiungere utenti.

- Nome: aggiungi più utenti
utente:
nome: "item"
Stato: presente
Gruppi: "ruota"
with_items:
- VM1
- VM2

Ora, il prossimo passo sarebbe quello di eseguire il playbook. Puoi farlo con l'aiuto del seguente comando nel terminale Linux:

libro di prova Ansible-Playbook.YML

Qui, "oggetto" è il termine di ricerca. "With_Item" ha due host, VM1 e VM2 rispettivamente. Il loop fa lo stesso del codice seguente:

- Nome: aggiungi l'utente VM1
utente:
Nome: "VM1"
Stato: presente
Gruppi: "ruota"
- Nome: aggiungi l'utente VM2
utente:
Nome: "VM2"
Stato: presente
Gruppi: "ruota"

Come puoi vedere, usando "with_item", siamo in grado di rimuovere la ridondanza dal nostro codice. Aggiungendo più utenti in "with_items:", possiamo aggiungere più utenti secondo necessità.

Il prossimo esempio coprirà come eseguire loop nidificati in Ansible.

Loop nidificati in Ansible

Ansible ti consente di implementare loop nidificati nei suoi script. Di seguito è riportato un esempio di tale ciclo.

- Nome: fornisce agli utenti l'accesso ai database
mysql_user:
nome: "item [0]"
priv: "item [1].*:TUTTO"
Append_privs: Sì
Password: "Foo"
with_Nested:
- ['LinuxUser1', 'LinuxUser2']
- ['Client', 'Employee', 'Provider']

In alternativa, puoi scrivere lo stesso codice con "Loop" di segue:

- Nome: fornisce agli utenti l'accesso ai database
Comunità.mysql.mysql_user:
nome: "item [0]"
priv: "item [1].*:TUTTO"
Append_privs: Sì
Password: "Foo"
Loop: "['LinuxUser1', 'LinuxUser2'] | Product (['Client', 'Employee', 'Provider']) | Elenco"

Gli utenti verranno forniti l'accesso a tutti i database uno per uno. Come affermato in precedenza, è più facile capire che il "with_" è migliore con i plugin di ricerca piuttosto che con "loop" come sintassi.

Diamo un'occhiata ad altri esempi che evidenziano la capacità di Ansible.

Usare Ansible per iterare su hash

Ansible ti consente di eseguire il loop su un elenco di hash. Questo può essere visto dall'esempio indicato di seguito.

Supponiamo di aver dichiarato un elenco di utenti come segue.

utenti:
VM1:
Nome: Macchina virtuale 1
Serial: 00000001
VM2:
Nome: Virtual Machine 2
Serial: 00000002

Per stampare tutti i nomi e i seriali, eseguire lo script di seguito.

compiti:
- Nome: stampa le informazioni dell'utente
debug:
msg: "utente item.key è item.valore.nome (item.valore.serial) "
with_dict: "utenti"

Questo stamperà rispettivamente i nomi degli utenti e i seriali. Aggiungendo più utenti nel pannello "utenti:", è possibile stampare più utenti senza dover scrivere di nuovo il codice.

Utilizzo di loop per set di dati paralleli

Puoi anche utilizzare loop per set di dati paralleli. Questo è dimostrato nell'esempio seguente:

Supponiamo di avere i seguenti dati:

Alphabets: ['a', 'b', 'c', 'd']

Num: [2, 4, 6, 8]

Puoi eseguire il loop di questi comandi come segue:

compiti:
- debug:
msg: "item.0 e item.1 "
tutti insieme:
- "Alphabets"
- "num"

Il codice sopra riporterà entrambi i set di dati insieme come (a, 2), (b, 4), ecc.

Luci a scelta casuale

Una delle caratteristiche fornite con i loop "with_" è "random_choice".

Come suggerisce il nome, la funzione di scelta casuale viene utilizzata per selezionare gli elementi in modo casuale da un determinato set di istruzioni.

Questo esempio illustra come fare loop per la selezione di un'azione da un determinato elenco di stringhe.

- debug:
msg: "item"
with_random_choice:
- "Esegui l'azione 1"
- "Esegui l'azione 2"
- "Esegui l'azione 3"
- "Esegui l'azione 4"

Qui, la stringa "Esegui azione" è arbitraria e può essere sostituita con qualsiasi cosa. Il comando with_random_choice selezionerebbe dall'elenco di azioni indicato a caso.

Esempi di loop "fino"

Questa sezione della guida riguarderà la sintassi del loop "fino".

Come affermato in precedenza, il comando "fino" ripeterà una determinata serie di istruzioni fino a quando non soddisfa una determinata condizione.

Ecco un esempio del ciclo "fino" in azione.

Shell:/usr/bin/foo

Registro: risultato

fino a: risultato.stdout.Trova ("tutti i sistemi pronti") != -1

Riversi: 10

ritardo: 7

Questo è un esempio di un ciclo ricorsivo. Il blocco di codice sopra continuerà a funzionare fino a quando la shell non riceverà "tutti i sistemi pronti" come output di testo. Se non è così, si fermerà dopo aver eseguito 10 volte poiché i tentativi specificati sono "10".

Il ritardo corrisponde al ritardo in secondi. Per impostazione predefinita, è impostato a 5.

Conclusione

Questa era una guida su come puoi usare i loop in Ansible. Abbiamo coperto le basi dei loop e la loro sintassi in Ansible e abbiamo dimostrato il loro uso attraverso diversi esempi. Con questo, speriamo che tu sia un passo più vicino all'automazione dei processi usando Ansible.