Ansible - Variabili

Le variabili nei playbook sono very similarutilizzare le variabili in qualsiasi linguaggio di programmazione. Ti aiuta a usare e assegnare un valore a una variabile e a usarlo ovunque nel playbook. Si possono porre condizioni attorno al valore delle variabili e di conseguenza usarle nel playbook.

Esempio

- hosts : <your hosts> 
vars:
tomcat_port : 8080

Nell'esempio precedente, abbiamo definito un nome di variabile tomcat_port e assegnato il valore 8080 a quella variabile e puoi usarlo nel tuo playbook dove necessario.

Prendiamo ora un riferimento dall'esempio condiviso. Il codice seguente proviene da uno dei ruoli (install-tomcat) -

block: 
   - name: Install Tomcat artifacts 
      action: > 
      yum name = "demo-tomcat-1" state = present 
      register: Output 
          
   always: 
      - debug: 
         msg: 
            - "Install Tomcat artifacts task ended with message: {{Output}}" 
            - "Installed Tomcat artifacts - {{Output.changed}}"

Qui, l'output è la variabile utilizzata.

Esaminiamo tutte le parole chiave utilizzate nel codice sopra:

  • block - Sintassi Ansible per eseguire un determinato blocco.

  • name - Nome pertinente del blocco: viene utilizzato nella registrazione e aiuta nel debug di ciò che tutti i blocchi sono stati eseguiti con successo.

  • action- Il codice accanto al tag di azione è l'attività da eseguire. L'azione è di nuovo una parola chiave Ansible utilizzata in yaml.

  • register - L'output dell'azione viene registrato utilizzando la parola chiave register e Output è il nome della variabile che contiene l'output dell'azione.

  • always - Ancora una volta una parola chiave Ansible, afferma che di seguito verrà sempre eseguita.

  • msg - Visualizza il messaggio.

Utilizzo della variabile - {{Output}}

Questo leggerà il valore della variabile Output. Inoltre, poiché viene utilizzato nella scheda msg, stamperà il valore della variabile di output.

Inoltre, puoi utilizzare anche le proprietà secondarie della variabile. Come nel caso in cui si controlla {{Output.changed}} se l'output è stato modificato e di conseguenza lo si usa.

Gestione delle eccezioni nei playbook

La gestione delle eccezioni in Ansible è simile alla gestione delle eccezioni in qualsiasi linguaggio di programmazione. Di seguito è mostrato un esempio della gestione delle eccezioni nel playbook.

tasks: 
   - name: Name of the task to be executed 
      block: 
         - debug: msg = 'Just a debug message , relevant for logging' 
         - command: <the command to execute> 
      
      rescue: 
         - debug: msg = 'There was an exception.. ' 
         - command: <Rescue mechanism for the above exception occurred) 
      
      always: 
         - debug: msg = "this will execute in all scenarios. Always will get logged"

Di seguito è riportata la sintassi per la gestione delle eccezioni.

  • rescue e always sono le parole chiave specifiche per la gestione delle eccezioni.

  • Block è dove viene scritto il codice (qualsiasi cosa da eseguire sulla macchina Unix).

  • Se il comando scritto all'interno della funzione di blocco fallisce, l'esecuzione raggiunge il blocco di salvataggio e viene eseguita. Nel caso in cui non ci siano errori nel comando sotto la funzione di blocco, il salvataggio non verrà eseguito.

  • Always viene eseguito in tutti i casi.

  • Quindi, se confrontiamo lo stesso con java, è simile a provare, catturare e infine bloccare.

  • Qui, Block è simile a try block dove scrivi il codice da eseguire e rescue è simile a catch block e always è simile a finally.

Loop

Di seguito è riportato l'esempio per dimostrare l'utilizzo dei loop in Ansible.

Il compito è copiare il set di tutti i file war da una directory alla cartella webapps di tomcat.

La maggior parte dei comandi utilizzati nell'esempio seguente sono già stati trattati in precedenza. Qui ci concentreremo sull'uso dei loop.

Inizialmente nel comando 'shell' abbiamo eseguito ls * .war. Quindi, elencherà tutti i file war nella directory.

L'output di quel comando viene preso in una variabile denominata output.

Per eseguire il ciclo, viene utilizzata la sintassi "with_items".

with_items: "{{output.stdout_lines}}" -> output.stdout_lines ci fornisce l'output riga per riga e quindi eseguiamo un loop sull'output con il comando with_items di Ansible.

Allegando l'output di esempio solo per far capire come abbiamo usato stdout_lines nel comando with_items.

--- 
#Tsting 
- hosts: tomcat-node 
   tasks: 
      - name: Install Apache 
      shell: "ls *.war" 
      register: output 
      args: 
         chdir: /opt/ansible/tomcat/demo/webapps 
      
      - file: 
         src: '/opt/ansible/tomcat/demo/webapps/{{ item }}' 
         dest: '/users/demo/vivek/{{ item }}' 
         state: link 
      with_items: "{{output.stdout_lines}}"

Blocchi

Il playbook nella sua totalità è suddiviso in blocchi. Il più piccolo passo da eseguire è scritto in blocco. Scrivere l'istruzione specifica in blocchi aiuta a separare la funzionalità e gestirla con la gestione delle eccezioni, se necessario.

L'esempio di blocchi è trattato nell'uso delle variabili, nella gestione delle eccezioni e nei cicli sopra.

Condizionali

I condizionali vengono utilizzati quando è necessario eseguire un passaggio specifico in base a una condizione.

--- 
#Tsting 
- hosts: all 
   vars: 
      test1: "Hello Vivek" 
   tasks: 
      - name: Testing Ansible variable 
      debug: 
         msg: "Equals" 
         when: test1 == "Hello Vivek"

In questo caso, Equals verrà stampato poiché la variabile test1 è uguale come indicato nella condizione when. when può essere utilizzato con un OR logico e una condizione AND logico come in tutti i linguaggi di programmazione.

Basta cambiare il valore della variabile test1 da Hello Vivek per dire Hello World e vedere l'output.