Ansible playbook смотреть в каталогах ролей - PullRequest
0 голосов
/ 10 октября 2019

У меня есть некоторые переменные в роли, на которую я хотел бы сослаться в сборнике пьес, или на другую роль. Пока роль находится в статическом расположении, я могу сделать это, используя:

  vars_files:
    - ../roles/creds/vars/main.yml

Хотя есть несколько мест, где могут быть роли. Все они определены в нашем ansible.cfg в переменной role_path. Могу ли я сослаться на эту переменную в playbook? Что-то вроде:

  vars_files:
    - "{{ lookup('config', 'DEFAULT_ROLES_PATH')}}/creds/vars/main.yml"

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

Исходная роль можетбыть плохо построенным. Глядя на DEFAULT_PRIVATE_ROLE_VARS, кажется, что может быть лучше изменить роль creds, чтобы она определяла только переменные (вместо того, чтобы реализовывать их), а затем вызывать ее перед любой ролью, для которой нужны переменные, что позволяет детально использовать переменные. Есть ли документация по ролям, которая определяет переменные, которые являются предпочтительным методом, вместо того, чтобы пытаться ссылаться на переменные роли напрямую?

Редактировать: Работает что-то вроде следующего:

- name: import
  include_vars: "{{lookup('first_found', params)}}"
  vars:
    params:
      files:
        - 'ain.yml'
        - 'main.yml'
        - 'plain.yml'
      paths: 
        - '/var/does/not/exist/roles/creds/vars'
        - '/home/amos/ansible/roles/creds/vars'

Однако у меня нетнашел способ заставить его принять цикл. Такие вещи, как следующие:

- name: put roles list in variable for loop
  set_fact:
    roledirs: "{{ lookup('config', 'DEFAULT_ROLES_PATH', wantlist=True) | flatten(1) }}"

- name: import
  include_vars: "{{lookup('first_found', params)}}"
  vars:
    params:
      files:
        - 'ain.yml'
        - 'main.yml'
        - 'plain.yml'
      paths:
        - "{{ roledirs }}/creds/vars"

Не работает. Из документации видно, что first_found хочет, чтобы список был для него перечислен, но не будет расширять список для себя. Есть ли способ получить first_found для расширения переменной roledirs?

...