almaops.vars
AVERTISSEMENT DE DÉPRÉCATION
Ce rôle Ansible a été déprécié au profit de la collection almaops.common
.
almaops.vars
Ce rôle inclut des variables d'un répertoire spécifique.
Idée
Lors du développement d'un CI/CD pour un projet assez grand, nous avons constaté qu'il est très pratique de stocker des variables dans des répertoires spécifiques pour chaque environnement, puis de les charger. Nous avons ensuite découvert qu'il est utile de séparer les identifiants et les variables communes dans des répertoires distincts. Les répertoires ont simplement une structure comme ceci :
.
├── variables-communes
│ ├── projet-A
│ │ └── dev
│ └── projet-B
│ └── dev
├── identifiants
│ ├── projet-A
│ │ ├── dev
│ │ └── prod
│ └── projet-B
│ ├── dev
│ └── prod
└── variables-env
├── projet-A-env01
├── projet-A-env02
├── projet-A-prod
├── projet-B-env01
├── projet-B-env02
└── projet-B-prod
Nous regroupons les hôtes du même environnement dans un groupe (appelons-le par exemple projet-a-env01
), et nous spécifions dans le fichier approprié sous group_vars
les répertoires d'où charger les variables (comme dans l'exemple ci-dessous).
L'avantage de cette approche est que les variables incluses ont toujours la priorité maximale (sauf --extra-vars
), donc vous savez toujours où chercher vos paramètres d'environnement.
Variables du rôle
vars_root : ici se trouvent les répertoires avec les environnements
vars_group : répertoire avec les variables d'environnement, ce chemin est relatif à vars_root
vars_source : si spécifié, le rôle chargera les variables uniquement depuis ce répertoire
Defaults du rôle
vars_source : "{{ vars_root }}/{{ vars_group }}"
Exemple de Playbook
Ce code inclura tous les fichiers *.yml
de playbook_dir/vars/dev :
- hosts: groupe-contenant-tous-les-hôtes-pour-l-env-dev
roles:
- role: almaops.vars
vars_root: "{{ playbook_dir }}/vars"
vars_group: "dev"
Ce code inclura tous les fichiers *.yml
de /home/user/my-env
- hosts: groupe-contenant-tous-les-hôtes-pour-l-env-dev
roles:
- role: almaops.vars
vars_source: "/home/user/my-env"
Ce code inclura tous les fichiers *.yml
de : playbook_dir/creds/dev, playbook_dir/env-vars/dev, playbook_dir/common-vars/mon-env-dev
--- playbook.yml ---
- hosts: groupe-contenant-tous-les-hôtes-pour-l-env-dev
roles:
# charger les identifiants
- role: almaops.vars
vars_root: "{{ playbook_dir }}/creds"
vars_group: "{{ credentials_library }}"
# charger les variables spécifiques pour ce groupe d'environnement (groupe d'environments similaires)
- role: almaops.vars
vars_root: "{{ playbook_dir }}/common-vars"
vars_group: "{{ env_group_name }}"
# charger les variables spécifiques à l'environnement
- role: almaops.vars
vars_root: "{{ playbook_dir }}/env-vars"
vars_group: "{{ env_name }}"
--- group_vars/groupe-contenant-tous-les-hôtes-pour-l-env-dev.yml ---
credentials_library: "dev"
env_group_name: "dev"
env_name: "mon-env-dev"
Licence
MIT
ansible-galaxy install almaops.vars