Comment passer des variables aux playbooks Ansible

AnsibleAnsibleBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ansible est un outil d'automatisation puissant qui vous permet de rationaliser la gestion de votre infrastructure informatique. L'une des fonctionnalités clés d'Ansible est sa capacité à gérer les variables, ce qui vous permet de rendre vos playbooks plus dynamiques et adaptables. Dans ce tutoriel, nous allons explorer comment passer des variables aux playbooks Ansible, des bases aux techniques plus avancées, pour vous aider à optimiser vos flux de travail d'automatisation.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) ansible/InventoryManagementGroup -.-> ansible/group_variables("Set Group Variables") ansible/InventoryManagementGroup -.-> ansible/host_variables("Set Host Variables") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") ansible/PlaybookEssentialsGroup -.-> ansible/with_items("Iterate Items") subgraph Lab Skills ansible/group_variables -.-> lab-415021{{"Comment passer des variables aux playbooks Ansible"}} ansible/host_variables -.-> lab-415021{{"Comment passer des variables aux playbooks Ansible"}} ansible/playbook -.-> lab-415021{{"Comment passer des variables aux playbooks Ansible"}} ansible/with_items -.-> lab-415021{{"Comment passer des variables aux playbooks Ansible"}} end

Introduction aux variables Ansible

Ansible est un outil d'automatisation informatique puissant qui vous permet de gérer facilement votre infrastructure et vos applications. L'une des fonctionnalités clés d'Ansible est sa capacité à travailler avec des variables, qui sont utilisées pour stocker et manipuler des données dans vos playbooks.

Les variables dans Ansible peuvent être définies à différents niveaux, notamment :

Variables au niveau de l'hôte

Ce sont des variables spécifiques à un hôte particulier ou à un groupe d'hôtes. Elles peuvent être définies dans le fichier d'inventaire ou dans des fichiers de variables séparés.

## inventory.yml
all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.100
      app_version: 2.0
    webserver2:
      ansible_host: 192.168.1.101
      app_version: 2.1

Variables au niveau du groupe

Ce sont des variables qui sont appliquées à un groupe d'hôtes. Elles peuvent être définies dans le fichier d'inventaire ou dans des fichiers de variables séparés.

## group_vars/webservers.yml
app_name: MyApp
db_host: 10.0.0.50

Variables au niveau du play

Ce sont des variables spécifiques à un play particulier dans un playbook. Elles peuvent être définies dans le play lui-même.

- hosts: webservers
  vars:
    app_port: 8080
    log_level: info

Variables au niveau de la tâche

Ce sont des variables spécifiques à une tâche particulière dans un play. Elles peuvent être définies dans la tâche elle-même.

- name: Install package
  apt:
    name: "{{ package_name }}"
    state: present
  vars:
    package_name: nginx

Comprendre comment travailler avec ces différents types de variables est crucial pour gérer efficacement vos playbooks Ansible et automatiser votre infrastructure.

Passage de variables aux playbooks Ansible

Maintenant que vous avez une compréhension de base des variables Ansible, explorons comment passer des variables à vos playbooks Ansible. Il existe plusieurs façons de le faire :

Arguments de ligne de commande

Vous pouvez passer des variables à votre playbook en utilisant l'option -e ou --extra-vars lors de l'exécution de la commande ansible-playbook.

ansible-playbook site.yml -e "app_version=2.2 db_host=10.0.0.60"

Fichiers de variables

Vous pouvez définir des variables dans des fichiers YAML séparés et les passer à votre playbook en utilisant l'option --extra-vars.

ansible-playbook site.yml --extra-vars "@vars.yml"
## vars.yml
app_name: MyApp
app_version: 2.2
db_host: 10.0.0.60

Variables d'inventaire

Comme mentionné dans la section précédente, vous pouvez définir des variables dans votre fichier d'inventaire et elles seront disponibles pour votre playbook.

## inventory.yml
all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.100
      app_version: 2.0
    webserver2:
      ansible_host: 192.168.1.101
      app_version: 2.1

Variables de playbook

Vous pouvez également définir des variables dans votre playbook en utilisant le mot-clé vars.

- hosts: webservers
  vars:
    app_name: MyApp
    app_version: 2.2
    db_host: 10.0.0.60
  tasks:
    - name: Print variables
      debug:
        msg: "App name: {{ app_name }}, App version: {{ app_version }}, db host: {{ db_host }}"

En comprenant ces différentes façons de passer des variables à vos playbooks Ansible, vous pouvez rendre votre automatisation plus flexible et adaptable à différents environnements et exigences.

Gestion avancée des variables dans Ansible

Bien que les méthodes de base pour passer des variables aux playbooks Ansible soient simples, Ansible propose également des fonctionnalités plus avancées pour travailler avec les variables. Explorons-en quelques-unes :

Priorité des variables

Ansible a un ordre de priorité bien défini pour les variables, ce qui est important à comprendre lorsque vous travaillez avec plusieurs sources de variables. L'ordre, du plus élevé au plus bas, est le suivant :

  1. Paramètres de ligne de commande (par exemple, -e "var=value")
  2. Paramètres de tâche (par exemple, vars dans une tâche)
  3. Paramètres d'inclusion (par exemple, vars dans un fichier inclus)
  4. Paramètres de bloc (par exemple, vars dans un bloc)
  5. Paramètres de play (par exemple, vars dans un play)
  6. Variables par défaut des rôles (par exemple, defaults/main.yml)
  7. Variables d'inventaire (par exemple, dans inventory.yml)
  8. Informations sur l'hôte (par exemple, collectées par le module setup)
  9. Variables des rôles et d'inclusion (par exemple, vars/main.yml)
  10. Définition d'informations (par exemple, en utilisant le module set_fact)

Comprendre cet ordre de priorité peut vous aider à résoudre les conflits et à vous assurer que vos variables sont utilisées comme prévu.

Filtres et tests de variables

Ansible propose un ensemble riche de filtres et de tests Jinja2 que vous pouvez utiliser pour manipuler et valider vos variables. Voici quelques exemples :

  • Filtre default : {{ my_var | default('default_value') }}
  • Filtre to_json : {{ my_dict | to_json }}
  • Test is_defined : {% if my_var is defined %}...{% endif %}
  • Test is_number : {% if my_var is number %}...{% endif %}

Ceux-ci peuvent être très utiles pour gérer des scénarios de variables complexes.

Variables chiffrées avec Vault

La fonctionnalité Vault d'Ansible vous permet de chiffrer des variables sensibles, telles que des mots de passe ou des clés API, afin qu'elles puissent être stockées et utilisées en toute sécurité dans vos playbooks. Cela est particulièrement important pour maintenir la sécurité dans votre automatisation d'infrastructure.

## vars.yml
db_password: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  32313633326533343161663036623463
  3163303236303836343239653533326134
  3134613161623464

En comprenant ces techniques avancées de gestion des variables, vous pouvez faire passer votre automatisation Ansible au niveau supérieur, la rendant plus robuste, plus sécurisée et plus adaptable aux besoins de votre organisation.

Résumé

Dans ce tutoriel sur Ansible, vous avez appris à passer des variables à vos playbooks, depuis l'affectation simple de variables jusqu'aux techniques de gestion de variables plus complexes. En maîtrisant la gestion des variables, vous pouvez créer des playbooks Ansible flexibles et dynamiques qui s'adaptent aux besoins changeants de votre infrastructure. Appliquez ces stratégies pour améliorer votre automatisation basée sur Ansible et faire passer vos opérations informatiques au niveau supérieur.