Dans certains rôles ansibles (par exemple roles/my-role/
) J'ai de gros fichiers de variables par défaut (defaults/main.yml
). Je voudrais diviser le main.yml
dans plusieurs fichiers plus petits. Est-il possible de faire ça?
J'ai essayé de créer les fichiers defaults/1.yml
et defaults/2.yml
, mais ils ne sont pas chargés par ansible.
La fonctionnalité que je décris ci-dessous est disponible depuis Ansible 2.6, mais a obtenu un correctif de bogue dans v2.6.2 et un autre (mineur) dans v2.7.
Pour voir une solution pour les anciennes versions, voir la réponse de Paul.
defaults/main/
Au lieu de créer defaults/main.yml
, créez un répertoire - defaults/main/
- et placez tous les fichiers YAML dedans.
defaults/main.yml
→ defaults/main/*.yml
Ansible chargera tout *.yml
fichier dans ce répertoire, vous pouvez donc nommer vos fichiers comme roles/my-role/defaults/main/{1,2}.yml
.
Remarque, l'ancien fichier - defaults/main.yml
- ne doit pas exister. Voir ce commentaire Github .
vars/main/
Soit dit en passant , la solution ci-dessus fonctionne également pour vars/
:
vars/main.yml
→ vars/main/*.yml
La fonctionnalité a été introduite dans la v2.6 - git commit , Pull Request , principal problème Github .
Il y a eu deux corrections de bugs:
Si vous n'utilisez pas 2.6 (ce que vous devriez probablement, mais je comprends que ce n'est pas toujours une option), alors vous pourriez trouver include_vars utile.
- name: Include vars of stuff.yaml into the 'stuff' variable (2.2).
include_vars:
file: stuff.yaml
name: stuff
- name: Conditionally decide to load in variables into 'plans' when x is 0, otherwise do not. (2.2)
include_vars:
file: contingency_plan.yaml
name: plans
when: x == 0
- name: Load a variable file based on the OS type, or a default if not found. Using free-form to specify the file.
include_vars: "{{ item }}"
with_first_found:
- "{{ ansible_distribution }}.yaml"
- "{{ ansible_os_family }}.yaml"
- default.yaml
- name: Bare include (free-form)
include_vars: myvars.yaml
- name: Include all .json and .jsn files in vars/all and all nested directories (2.3)
include_vars:
dir: vars/all
extensions:
- json
- jsn
- name: Include all default extension files in vars/all and all nested directories and save the output in test. (2.2)
include_vars:
dir: vars/all
name: test
- name: Include default extension files in vars/services (2.2)
include_vars:
dir: vars/services
depth: 1
- name: Include only files matching bastion.yaml (2.2)
include_vars:
dir: vars
files_matching: bastion.yaml
Notez cependant qu'il s'agit d'une directive de tâche. Ce n'est pas aussi simple que de pouvoir l'inclure dans le fichier par défaut lui-même.