freehck.var_loader
freehck.var_loader
Ce rôle inclut des variables d'un répertoire spécifique.
Idée
Lors du développement de CI/CD pour un projet assez important, nous avons constaté qu'il était très pratique de stocker les variables d'environnement dans des répertoires spécifiques à chaque environnement, puis de les charger. Ensuite, nous avons trouvé utile de séparer les identifiants et les variables communes dans des répertoires séparés. Les répertoires ont simplement une structure comme celle-ci :
.
├── common-vars
│ ├── project-A
│ │ └── dev
│ └── project-B
│ └── dev
├── credentials
│ ├── project-A
│ │ ├── dev
│ │ └── prod
│ └── project-B
│ ├── dev
│ └── prod
└── env-vars
├── project-A-env01
├── project-A-env02
├── project-A-prod
├── project-B-env01
├── project-B-env02
└── project-B-prod
Nous plaçons les hôtes d'un même environnement dans un groupe (appelons-le par exemple project-a-env01
), et spécifions dans le fichier approprié sous group_vars
les répertoires à partir desquels charger les variables (comme dans l'exemple ci-dessous).
L'avantage de cette approche est que les variables incluses ont toujours la priorité maximale (à l'exception de --extra-vars
), vous savez donc toujours où chercher vos paramètres d'environnement.
Variables du Rôle
var_loader_root : ici, les répertoires avec les environnements sont stockés
var_loader_group_name : répertoire contenant les variables d'environnement, ce chemin est relatif à var_loader_root
var_loader_src : si spécifié, le rôle chargera des variables uniquement à partir de ce répertoire
Valeurs par Défaut du Rôle
var_loader_src : "{{ var_loader_root }}/{{ var_loader_group_name }}"
Exemple de Playbook
Ce extrait inclura tous les fichiers *.yml
du répertoire playbook_dir/vars/dev :
- hosts: groupe-contenant-tous-les-hôtes-pour-l-env-dev
roles:
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/vars"
var_loader_group_name: "dev"
Ce extrait inclura tous les fichiers *.yml
de /home/user/my-env :
- hosts: groupe-contenant-tous-les-hôtes-pour-l-env-dev
roles:
- role: freehck.var_loader
var_loader_src: "/home/user/my-env"
Ce extrait inclura tous les fichiers *.yml
de : playbook_dir/creds/dev, playbook_dir/env-vars/dev, playbook_dir/common-vars/my-dev-env :
--- playbook.yml ---
- hosts: groupe-contenant-tous-les-hôtes-pour-l-env-dev
roles:
# charger les identifiants
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/creds"
var_loader_group_name: "{{ credentials_library }}"
# charger des variables spécifiques à ce groupe d'environnements
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/common-vars"
var_loader_group_name: "{{ env_group_name }}"
# charger les variables spécifiques à l'environnement
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/env-vars"
var_loader_group_name: "{{ env_name }}"
--- group_vars/groupe-contenant-tous-les-hôtes-pour-l-env-dev.yml ---
credentials_library: "dev"
env_group_name: "dev"
env_name: "my-dev-env"
Licence
MIT
Informations sur l'Auteur
Dmitrii Kashin, freehck@freehck.ru
ansible-galaxy install freehck.var_loader