A volte potresti voler ripetere un'attività più volte. Ad esempio, potresti voler creare più utenti, avviare/arrestare più servizi o modificare la proprietà di più file sui tuoi host gestiti.
In questo tutorial imparerai come utilizzare i loop Ansible per ripetere un'attività più volte senza dover riscrivere l'intera attività più e più volte.
Prima di esaminare i loop in Ansible, spero che tu abbia seguito altri capitoli di questa serie di tutorial di Ansible. Dovresti conoscere il concetto di playbook Ansible, conoscere i comandi ad hoc e conoscere la terminologia di base associata ad Ansible come elenco, dizionari ecc.
È anche apprezzata la conoscenza delle basi di YAML.
Ciclo sugli elenchi
Ansible utilizza le parole chiave loop per scorrere gli elementi di un elenco. Per dimostrare, creiamo un playbook molto semplice chiamato print-list.yml che mostra come stampare gli elementi in una lista:
[[email protected] plays]$ cat print-list.yml
---
- name: print list
hosts: node1
vars:
prime: [2,3,5,7,11]
tasks:
- name: Show first five prime numbers
debug:
msg: "{{ item }}"
loop: "{{ prime }}"
Nota che utilizzo l'elemento variabile con cicli Ansible. L'attività verrebbe eseguita cinque volte, pari al numero di elementi nel primo elenco.
Alla prima esecuzione, l'elemento la variabile verrà impostata sul primo elemento nell'array principale (2). Nella seconda esecuzione, la variabile item verrà impostata sul secondo elemento nell'array prime (3) e così via.
Vai avanti ed esegui il playbook per vedere tutti gli elementi del prime elenco visualizzato:
[[email protected] plays]$ ansible-playbook print-list.yml
PLAY [print list] **************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node1]
TASK [Show first five prime numbers] *******************************************
ok: [node1] => (item=2) => {
"msg": 2
}
ok: [node1] => (item=3) => {
"msg": 3
}
ok: [node1] => (item=5) => {
"msg": 5
}
ok: [node1] => (item=7) => {
"msg": 7
}
ok: [node1] => (item=11) => {
"msg": 11
}
PLAY RECAP *********************************************************************
node1 : ok=2 changed=0 unreachable=0 failed=0
Ora applichi i loop a un'applicazione reale. Ad esempio, puoi creare un add-users.yml playbook che aggiungerebbe più utenti su tutti gli host nei dbservers gruppo:
[[email protected] plays]$ cat add-users.yml
---
- name: Add multiple users
hosts: dbservers
vars:
dbusers:
- username: brad
pass: pass1
- username: david
pass: pass2
- username: jason
pass: pass3
tasks:
- name: Add users
user:
name: "{{ item.username }}"
password: "{{ item.pass | password_hash('sha512') }}"
loop: "{{ dbusers }}"
Per prima cosa ho creato un dbusers list che è fondamentalmente un elenco di hash/dizionari. Ho quindi utilizzato l'utente modulo insieme a un ciclo per aggiungere gli utenti e impostare le password per tutti gli utenti nei dbusers elenco.
Nota che ho utilizzato anche la notazione tratteggiata item.username e item.pass per accedere ai valori delle chiavi all'interno degli hash/dizionari dei dbusers elenco.
Vale anche la pena notare che ho usato la password_hash('sha512') filtro per crittografare le password degli utenti con sha512 algoritmo di hashing come utente il modulo non consente di impostare password utente non crittografate.
Suggerimento per l'esame RHCE:avrai accesso alla pagina docs.ansible.com del tuo esame. È una risorsa molto preziosa, soprattutto nella sezione "Domande frequenti"; troverai numerose domande How-to con risposte e spiegazioni.Ora eseguiamo add-users.yml playbook:
Leggi la storia completa
Il resto dell'articolo è disponibile solo per i membri LHB. Puoi iscriverti ora GRATUITAMENTE per leggere il resto di questo articolo insieme all'accesso a tutti i post riservati ai membri. Ti iscrivi anche alla nostra newsletter quindicinale Linux.
IscrivitiHai già un account?Accedi