|
| 1 | +--- |
| 2 | +title: Ansible - Précédence des variables |
| 3 | +tags: [ Ansible, ci-cd ] |
| 4 | +layout: post |
| 5 | +category: devops |
| 6 | +complexity: 1 |
| 7 | +has_code: true |
| 8 | +disableComments: true |
| 9 | +--- |
| 10 | +Ansible est un outil open-source d'automatisation de la gestion de configuration, du déploiement d'applications, voir de l'orchestration de tâches IT que j'utilise régulièrement pour le déploiement automatisé de configuration de serveurs ou de mise à jour d'application. |
| 11 | + |
| 12 | +Ansible a plusieurs avantages à mon goût : |
| 13 | +- ne nécessite par d'installer un logiciel sur les nœuds/serveurs gérés. |
| 14 | +- syntaxe basée sur YAML que l'on retrouve dans de nombreux autres outils (bon, ce n'est pas forcément le meilleur choix). |
| 15 | +- description principalement de l'état final attendu plutôt que des étapes pour l'atteindre |
| 16 | +- documentation détaillée |
| 17 | +- composants facilement réutilisables (Rôles, Ansible Galaxy, etc.) |
| 18 | + |
| 19 | +## Importance des variables dans Ansible |
| 20 | + |
| 21 | +De part sa flexibilité, les variables dans Ansible jouent un rôle essentiel, elles permettent de rendre les `playbooks` et les `rôles` plus dynamique et réutilisable : |
| 22 | + |
| 23 | +- permettent de définir des valeurs par défaut pour les `rôles`, les `playbooks`, les `hosts` (serveurs), les `inventories` (environnement). |
| 24 | +- le mécanisme de surcharge et de précédence permet sa grande flexibilité |
| 25 | +- factorisation et réutilisation des valeurs : réutilisation d'une valeur définie une seule fois |
| 26 | +- simplification de la maintenance, un bon découpage permet de retrouver les variables à mettre à jour rapidement en fonction des cas d'usages (upgrade de version vs. nouveau serveur) |
| 27 | +- sécurité avec `ansible vault` qui permet de crypter les variables sensibles |
| 28 | +- construction de variable à partir d'autres variables. |
| 29 | + |
| 30 | +Exemple : |
| 31 | + |
| 32 | +```yaml |
| 33 | +--- |
| 34 | +- hosts: webservers |
| 35 | + vars: |
| 36 | + server_name: "example.com" |
| 37 | + deploy_path: "/var/www/html" |
| 38 | + tasks: |
| 39 | + - name: Deploy application |
| 40 | + copy: |
| 41 | + src: /local/path/to/app |
| 42 | + dest: "{{ deploy_path }}" |
| 43 | + - name: Configure server |
| 44 | + template: |
| 45 | + src: /local/path/to/{{ server_name }}.j2 |
| 46 | + dest: /etc/nginx/sites-available/{{ server_name }} |
| 47 | +``` |
| 48 | +
|
| 49 | +Ici, les variables `server_name` et `deploy_path` rendent le playbook plus facile à maintenir. |
| 50 | + |
| 51 | +La documentation d'Ansible propose une douzaine d'emplacements où des variables peuvent être définies, si on ne comprend pas le principe sous-jacent et le fonctionnement de surcharge/précédence, on se retrouve vite perdu, avec des variables en conflits ou non définie quand on en a besoin. |
| 52 | + |
| 53 | +C'est donc l'objectif de cet article, de vous aidez à y voir plus clair. |
| 54 | + |
| 55 | +## Qu'est-ce que la Précédence des Variables ? |
| 56 | + |
| 57 | +La documentation d'`Ansible` présente [22 niveaux de définition des variables](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#understanding-variable-precedence), mais quand on y regarde de plus prêt il y a un peu de redondance et certains niveaux sont très rarement utilisés. |
| 58 | + |
| 59 | +Le principe général est de partir du niveau le plus générique (facilement surchargé), vers le niveau spécifique (qui surcharge tout ce qui a été définie précédemment). |
| 60 | + |
| 61 | +### Principaux groupes de variables |
| 62 | + |
| 63 | +- Role |
| 64 | +- |
| 65 | + |
| 66 | +### Définition et concept |
| 67 | +### Pourquoi la précédence est-elle cruciale ? |
| 68 | + |
| 69 | +## Les Niveaux de Précédence des Variables dans Ansible |
| 70 | + |
| 71 | +### Variables de la ligne de commande |
| 72 | +### Variables des tâches |
| 73 | +### Variables des blocs |
| 74 | +### Variables des rôles |
| 75 | +### Variables des groupes d'inventaire |
| 76 | +### Variables des hôtes |
| 77 | +### Variables par défaut |
| 78 | +### Variables fact |
| 79 | +### Variables d'environnement |
| 80 | +### Variables de fichiers YAML et JSON |
| 81 | +### Variables de Playbooks |
| 82 | +## Exemples Pratiques de Précédence des Variables |
| 83 | + |
| 84 | +### Exemple simple avec un Playbook |
| 85 | +### Utilisation des rôles et précédence des variables |
| 86 | +### Exemple avancé avec des groupes et des hôtes |
| 87 | + |
| 88 | +## Résolution des Conflits de Variables |
| 89 | + |
| 90 | +### Techniques pour éviter les conflits |
| 91 | +### Stratégies de résolution lors des conflits de variables |
| 92 | +### Utilisation de la fonction set_fact |
| 93 | + |
| 94 | +## Bonnes Pratiques pour la Gestion des Variables |
| 95 | + |
| 96 | +### Organisation des variables |
| 97 | +### Documentation des variables |
| 98 | +### Utilisation des namespaces |
| 99 | +## Outils et Ressources Complémentaires |
| 100 | + |
| 101 | +### Modules Ansible utiles pour la gestion des variables |
| 102 | +### Documentation officielle d'Ansible |
| 103 | +### Communautés et forums de discussion |
| 104 | +## Conclusion |
| 105 | + |
| 106 | +### Récapitulatif des points clés |
| 107 | +### Importance de la maîtrise de la précédence des variables |
| 108 | +### Encouragement à l'expérimentation et à l'apprentissage continu |
0 commit comments