使用Ansible我想将键值对存储在目标机器上的文件中。
它将由单独的Ansible角色创建/更改,可能还有添加/删除等操作。我已经可以使用ansible-xml模块用于此目的(但如果使用不同的格式可以使用以下内容,我不介意)。
是否有任何“Ansibly”方式来获取远程XML(或其他格式)文件的内容并将值填充到事实(变量)中?
答案 0 :(得分:3)
不确定目标计算机上的"远程文件是什么意思" ,但请查看Local facts。
您可以在目标计算机上的/etc/ansible/facts.d/
处存储静态文件,并附上一些事实
您还可以编写一个可执行脚本并将其放在那里 - 它可以执行您想要的任何操作,然后将事实作为JSON打印到stdout。
答案 1 :(得分:0)
如果Local facts机制不允许足够的灵活性,则可以通过使用内置模块copy和slurp进行手动操作。
可以使用copy
参数使用content
模块来存储事实。要加载它们,请使用slurp
模块。请注意,slurp使用Base64编码对文件内容进行编码,以防止Jinja2解析器解析内容。但这正是我们想要的,因此您可以使用b64decode
过滤器对内容进行解码。
示例:
- name: Set facts
set_fact:
data:
testing: test string
does_it_work: yes it does!
- name: Store facts
copy:
dest: /tmp/any_path_you_want
content: "{{ data }}"
- name: Read facts
slurp:
src: /tmp/any_path_you_want
register: slurp_output
- name: Load facts
set_fact:
data2: "{{ slurp_output['content'] | b64decode }}"
- name: Display facts
debug:
var: data2