Как разбить файл `defaults/main.yml` на роль ANSIBLE на несколько файлов?

В некоторых заданных ролях (например, roles/my-role/У меня есть довольно большие файлы переменных по умолчанию (defaults/main.yml). Я хотел бы разделить main.yml в несколько небольших файлов. Возможно ли это сделать?

Я пытался создать файлы defaults/1.yml а также defaults/2.yml, но они не загружаются ansible.

2 ответа

Решение

Начиная с Ansible 2.6 можно заменить defaults/main.yml по каталогу: defaults/main/*.yml, (То же самое верно для vars/main/*.yml.) Ansible загрузит любой *.yml файл в этом каталоге, так что вы можете назвать ваши файлы как roles/my-role/defaults/main/{1,2}.yml,

Эта функция была реализована в ansible commit 95ce00f,

Если вы не используете 2.6 (что вам, вероятно, следует, но я понимаю, что это не всегда вариант), то вам может пригодиться include_vars.

- 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

Обратите внимание, что это директива задачи, хотя. Это не так просто, как просто включить его в сам файл по умолчанию.

Другие вопросы по тегам