我的host_vars文件有大约5 k行的yml代码。2所以我希望有单独的yml文件-每个服务一个文件。
简化示例:
user@test $ cat production/split_configs/a.example.net.yml
my_array:
- a.example.net
user@test $ cat production/split_configs/b.example.net.yml
my_array:
- b.example.net
user@test $ cat webhosts.yml
- hosts: myservers
pre_tasks:
- name: merge ansible arrays
tags: always
delegate_to: localhost
block:
- name: find config files
find:
paths: production/configs/
patterns: '*.yml'
register: find_results
- name: aaa
debug:
msg: "{{ find_results.files }}"
- name: bbb
debug:
msg: "{{ item.path }}"
with_items: "{{ find_results.files }}"
- name: ccc
debug:
msg: "{{ lookup('file', 'production/configs/a.example.net.yml') }}"
- name: ddd
debug:
msg: "{{ lookup('file', item.path) }}"
loop: "{{ find_results.files }}"
tasks:
- name: eee
debug:
msg: "{{ my_array }}"
目标是合并两个数组的内容,并在任务eee
中打印合并的内容:
my_array:
- a.example.net
- b.example.net
任务aaa
打印有关文件的信息(路径,模式,uid,...)-它工作。
任务bbb
和ddd
什么也不打印,我不明白为什么。
任务ccc
打印文件的内容。但路径写在剧本中:-(
加载文件后,我需要合并它们。我的想法是在任务中使用类似set_fact: my_array="{{ my_array + my_array }}"
的with_items: "{{ find_results.files }}"
。这是个好主意吗?或者我能做得多好?
2条答案
按热度按时间lx0bsm1f1#
例如,下面的任务可以完成这项工作
给予
q3qa4bjr2#
您可以使用简单的cat命令将这些文件合并到一个文件中,然后包括var文件,例如-
会给予你结果-