在我的Ansible剧本中,我读取一个目录列表到一个列表中。然后,我想从这些目录中的每个目录读取一个名为“config.yml”的文件,并将它们的内容放入字典中,以便我可以通过该字典中的目录名称引用配置数据。
第一部分没有问题,但我无法使第二部分工作:
步骤1:加载目录:
第二步,从目录中加载配置:
错误信息:
步骤1:加载目录:
- name: Include directories
include_vars:
file: /main-config.yml
name: config
第二步,从目录中加载配置:
- name: load deploymentset configurations
include_vars:
file: /path/{{ item }}/config.yml
name: "allconfs.{{ item }}" ## << This is the problematic part
with_items:
- "{{ config.dirs }}"
我尝试了不同的方法,例如"allconfs['{{ item }}']
,但似乎都不起作用。Playbook已成功完成,但数据未出现在字典中。
我还尝试预先定义外部字典,但也没有起作用。
配置文件本身非常简单:
/main-config.yml:
dirs:
- dir1
- dir2
- dir3
/path/dir1/config.yml:
some_var: "some_val"
another_var: "another val"
我希望能够像这样访问config.yml文件的值:
{{ allconfs.dir1.some_var }}
更新尝试Konstantins的方法:
- name: load deploymentset configurations
include_vars:
file: /repo/deploymentsets/{{ item }}/config.yml
name: "default_config"
with_items:
- "{{ config.deploymentsets }}"
register: default_configs
- name: combine configs
set_fact:
default_configs: "{{ dict(default_configs.results | json_query('[].[item, ansible_facts.default_config]')) }}"
错误信息:
致命错误: [127.0.0.1]: 失败! => {"failed": true, "msg": "在({{ dict(default_configs.results | json_query('[].[item, ansible_facts.default_config]')) }}) 上出现了意外的模板类型错误: <lambda>()接受0个参数,但实际传入了1个"}
/main-config.yml
和/path/{{ item }}/config.yml
的示例? - kfreezy