我想在剧本或其他角色中引用一些角色变量。只要角色在静态位置,我就可以使用:
vars_files:
- ../roles/creds/vars/main.yml
尽管角色可以在很多地方使用。它们都在我们的ansible.cfg中的role_path变量中定义。我可以在剧本中引用此变量吗?像这样:
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变量?