GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser des variables dans Ansible Playbook

Si vous avez fait de la programmation en Python, Java, C, C++ ou dans tout autre langage de programmation, les variables ne sont pas étrangères. Tout comme dans les langages de programmation, les variables dans Ansible sont utilisées pour stocker une valeur.

Dans Ansible, les variables offrent la flexibilité indispensable dans les Playbooks, les modèles et les inventaires, comme nous le verrons plus tard dans ce didacticiel. Les variables intégrées peuvent être utilisées pour fournir des informations système telles que le nom d'hôte, l'architecture du système, les interfaces, etc. Les variables peuvent également être utilisées pour remplacer des chaînes et également dans des boucles pour parcourir un ensemble de valeurs donné.

Un nom de variable valide est composé des caractères suivants

  • Lettres
  • Chiffres
  • Traits de soulignement
  • Une combinaison de deux ou de tous les éléments ci-dessus

Une variable DOIT TOUJOURS COMMENCER PAR UNE LETTRE et NE DOIT PAS CONTENIR D'ESPACES.

Exemples de noms de variables acceptables :

  •  platine
  •  table_tournante
  •  platine01
  •  platine_01

Les noms ci-dessous ne sont pas considérés comme des noms de variables valides

  • tourner la table
  •  table tournante
  •  01platine
  •  01

Examinons maintenant différents cas d'utilisation des variables dans Ansible

Variables dans les Playbooks

Comme vous le savez, un playbook est une collection de jeux ou de tâches à effectuer sur un système distant. Dans les playbooks, les variables sont pratiques pour déterminer comment les tâches peuvent être exécutées. Attribuer une valeur à une variable dans un playbook est assez simple et direct.

Commencez par appeler les vars mot-clé puis appelez le nom de la variable suivi de la valeur comme indiqué.

---
 - hosts: all
   vars:
     salutations: Hello guys!
   tasks:
   - name: Ansible Variable Basic Usage
       debug:
       msg: "{{ salutations }}"

Dans le playbook ci-dessus, le nom de la variable est salutations et la valeur est Hello world ! Lorsque le playbook est exécuté, la valeur du playbook est accessible en plaçant la variable entre accolades comme indiqué ci-dessus. Lorsqu'il est exécuté, le playbook affiche le message "Bonjour les gars ’ sur le terminal.

Variables avec tableaux

Vous pouvez utiliser des tableaux et les affecter à des variables comme indiqué dans la syntaxe ci-dessous :

variables :

nom_tableau :

– valeur1

– valeur2

Par exemple, le playbook ci-dessous contient un tableau de 5 noms d'étudiants stockés dans une variable appelée étudiants. Vous pouvez accéder aux noms des étudiants via l'indexation (comme vous le feriez dans des tableaux dans n'importe quel autre langage de programmation) Par exemple, pour récupérer le nom "Arthur" dans la liste des tableaux, utilisez la syntaxe étudiants [2] comme indiqué ci-dessous.

- hosts: all
  vars:
    students:
      - Mark
      - Melisa
      - Arthur
      - Kevin
      - Lisa

  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ students[2] }}"

Variables avec dictionnaires

À partir de la liste Array, vous pouvez définir plus précisément chacune des entrées à l'aide d'une paire clé-valeur formant ce que nous appelons une liste de dictionnaires. La syntaxe est indiquée ci-dessous

variables :

nom_tableau :

nom_dictionnaire1 :

valeur1 :valeur de l'élément1

valeur2 :valeur de l'élément2

nom_dictionnaire2 :

valeur1 :valeur de l'élément1

valeur2 :valeur de l'élément2

En utilisant notre exemple précédent, nous pouvons avoir des listes de dictionnaires ci-dessous

- hosts: all
  vars:
    students:
         - Mark: 
             city: Melbourne
             address: 0045-0987-8642
         - Angela: 
             city: Sydney
             address: 3456-7685-9087

Pour accéder au dictionnaire, ajoutez simplement la tâche ci-dessous

  tasks:
    - debug:
        var: students

Variables dans les fichiers d'inventaire

Si vous avez différents systèmes hôtes qui partagent des attributs ou des valeurs similaires, vous pouvez définir ce que nous appelons des variables de groupe. Ceux-ci sont utilisés pour attribuer les attributs communs à tous les hôtes.

Par exemple :

Supposons que nous ayons 2 serveurs Web :webserver_1 et webserver_2 qui écoutent tous les deux le port 443 et dont le serveur ntp est us.pool.ntp.org. Le fichier d'inventaire apparaîtra comme indiqué :

[web_servers]
webserver_1
webserver_2

[web_servers:vars]
http_port=443
ntp_server=us.pool.ntp.org

Dans le fichier playbook YAML, cela serait représenté comme indiqué

   web_servers:
     hosts:
       web_server_1:
       web_server_2:
         
         vars:
           http_port=80
           ntp_server=us.pool.ntp.org

La première section définit les hôtes distants qui sont webserver_1 et webserver_1 , tandis que la deuxième section regroupe les attributs communs entre les deux serveurs. C'est une méthode très pratique pour appliquer des variables communes à plusieurs systèmes hôtes.

Variables d'hôte et de groupe

Bien que vous puissiez spécifier des variables dans le fichier d'inventaire, la pratique courante déconseille de stocker des variables dans le fichier d'inventaire. C'est là qu'interviennent les fichiers de variable d'hôte et de groupe.

Dans un fichier de variable hôte, la variable s'applique uniquement à un système hôte dans le fichier d'inventaire. Le fichier de variable hôte est généralement stocké dans les host_vars répertoire qui est généralement spécifié dans /etc/ansible/ chemin.

Considérez le fichier d'inventaire ci-dessous où nous avons 2 serveurs chacun utilisant différents serveurs ntp

[web_servers]
webserver_1  ntp_server=uk.pool.ntp.org
webserver_2  ntp_server=de.pool.ntp.org

Au lieu de spécifier la variable ntp_server dans le fichier d'inventaire, créez deux fichiers de variables hôtes dans le répertoire host_vars avec le nom de fichier correspondant à chacun des noms d'hôte des systèmes hôtes :

# vim /etc/ansible/host_vars/webserver_1
---
ntp_server=uk.pool.ntp.org

# vim /etc/ansible/host_vars/webserver_2
---
ntp_server=de.pool.ntp.org

Si les systèmes hôtes partagent les mêmes valeurs, créez un fichier de variable de groupe dans group_vars annuaire. Le nom du fichier de la variable de groupe doit correspondre au groupe des hôtes

Considérez le fichier d'inventaire ci-dessous

[web_servers]
webserver_1
webserver_2
[web_servers:vars]
ansible_user=root
ansible_port=22

La deuxième section peut être définie comme un fichier dans le répertoire group_vars comme indiqué. Cela devrait être dans le répertoire /etc/ansible. N'oubliez pas que le nom du fichier doit être le même que le nom du groupe.

# vim /etc/ansible/group_vars/web_servers
---
ansible_user=root
ansible_port=22

Ici, les variables seront accessibles à tous les hôtes du groupe nommé web_servers.

Variables spéciales dans Ansible Playbook

Une autre catégorie de variables sont les variables spéciales. Ce sont des variables intégrées qui ne peuvent pas être définies par l'utilisateur et qu'Ansible remplacera toujours. Pour obtenir une liste de noms de variables système uniques, exécutez la commande

# ansible -m nom d'hôte de configuration

Voici des exemples de telles variables spéciales :

  • ansible_all_ipv4_addresses
  • ansible_architecture ,
  • ansible_bios_version ,
  • ansible_os_family ,
  • ansible_distribution,

Cela affichera une sortie au format JSON

# ansible -m setup localhost

Avec la flexibilité et la facilité d'utilisation, les variables remplissent une fonction essentielle dans les playbooks et les fichiers d'inventaire. Ils évitent les répétitions inutiles et facilitent grandement la vie de l'administrateur système.

Lire aussi : Comment utiliser les boucles dans Ansible Playbook

Lire aussi  :Comment utiliser Ansible Vault pour sécuriser les données sensibles


Linux
  1. Comment j'utilise Ansible et anacron pour l'automatisation

  2. Comment utiliser Ansible pour configurer la surveillance du système avec Prometheus

  3. Comment créer un Playbook Ansible

  4. Comment installer des packages logiciels avec un playbook Ansible

  5. Comment utiliser les variables atomiques en C ?

Comment créer et utiliser des faits personnalisés dans Ansible

Comment utiliser des variables dans les scripts Shell

Comment définir et utiliser des gestionnaires dans des playbooks Ansible

Comment utiliser le modèle Jinja2 dans Ansible

Comment utiliser Ansible pour configurer Vim

Comment utiliser Ansible pour envoyer un e-mail avec Gmail