Ansible - Variables

Les variables dans les playbooks sont very similarà l'utilisation de variables dans n'importe quel langage de programmation. Il vous aide à utiliser et à attribuer une valeur à une variable et à l'utiliser n'importe où dans le playbook. On peut mettre des conditions autour de la valeur des variables et les utiliser en conséquence dans le playbook.

Exemple

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

Dans l'exemple ci-dessus, nous avons défini un nom de variable tomcat_port et a attribué la valeur 8080 à cette variable et peut l'utiliser dans votre playbook partout où cela est nécessaire.

Prenons maintenant une référence de l'exemple partagé. Le code suivant provient de l'un des rôles (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}}"

Ici, la sortie est la variable utilisée.

Passons en revue tous les mots-clés utilisés dans le code ci-dessus -

  • block - Syntaxe Ansible pour exécuter un bloc donné.

  • name - Nom pertinent du bloc - il est utilisé dans la journalisation et aide à déboguer ce dont tous les blocs ont été exécutés avec succès.

  • action- Le code à côté de la balise d'action est la tâche à exécuter. L'action est à nouveau un mot clé Ansible utilisé dans yaml.

  • register - La sortie de l'action est enregistrée à l'aide du mot-clé register et Output est le nom de la variable qui contient la sortie de l'action.

  • always - Encore une fois un mot-clé Ansible, il indique que ci-dessous sera toujours exécuté.

  • msg - Affiche le message.

Utilisation de la variable - {{Output}}

Cela lira la valeur de la variable Output. De même, comme il est utilisé dans l'onglet msg, il affichera la valeur de la variable de sortie.

En outre, vous pouvez également utiliser les sous-propriétés de la variable. Comme dans le cas vérifiant {{Output.changed}} si la sortie a été modifiée et l'utiliser en conséquence.

Gestion des exceptions dans les playbooks

La gestion des exceptions dans Ansible est similaire à la gestion des exceptions dans n'importe quel langage de programmation. Un exemple de gestion des exceptions dans le playbook est présenté ci-dessous.

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"

Voici la syntaxe pour la gestion des exceptions.

  • rescue et always sont les mots-clés spécifiques à la gestion des exceptions.

  • Block est l'endroit où le code est écrit (tout ce qui doit être exécuté sur la machine Unix).

  • Si la commande écrite à l'intérieur de la fonction de bloc échoue, alors l'exécution atteint le bloc de secours et elle est exécutée. S'il n'y a pas d'erreur dans la commande sous la fonction de blocage, le sauvetage ne sera pas exécuté.

  • Always est exécuté dans tous les cas.

  • Donc, si nous comparons la même chose avec java, alors il est similaire d'essayer, d'attraper et enfin de bloquer.

  • Ici, Block est similaire à try block où vous écrivez le code à exécuter et rescue est similaire à catch block et always est similaire à finally.

Boucles

Voici l'exemple pour illustrer l'utilisation des boucles dans Ansible.

La tâche consiste à copier l'ensemble de tous les fichiers war d'un répertoire vers le dossier tomcat webapps.

La plupart des commandes utilisées dans l'exemple ci-dessous sont déjà couvertes auparavant. Ici, nous allons nous concentrer sur l'utilisation des boucles.

Au départ, dans la commande 'shell', nous avons fait ls * .war. Ainsi, il listera tous les fichiers war dans le répertoire.

La sortie de cette commande est prise dans une variable nommée output.

Pour boucler, la syntaxe 'with_items' est utilisée.

with_items: "{{output.stdout_lines}}" -> output.stdout_lines nous donne la sortie ligne par ligne puis nous bouclons sur la sortie avec la commande with_items d'Ansible.

Joindre la sortie de l'exemple juste pour faire comprendre comment nous avons utilisé les stdout_lines dans la commande 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}}"

Blocs

Le playbook dans sa totalité est divisé en blocs. La plus petite étape à exécuter est écrite en bloc. L'écriture de l'instruction spécifique dans des blocs permet de séparer les fonctionnalités et de les gérer avec la gestion des exceptions si nécessaire.

L'exemple de blocs est couvert dans l'utilisation des variables, la gestion des exceptions et les boucles ci-dessus.

Conditionnels

Les conditions sont utilisées là où il faut exécuter une étape spécifique en fonction d'une condition.

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

Dans ce cas, Equals sera imprimé car la variable test1 est égale comme mentionné dans la condition when. when peut être utilisé avec une condition OU logique et ET logique comme dans tous les langages de programmation.

Changez simplement la valeur de la variable test1 de Hello Vivek pour dire Hello World et voir le résultat.