Ansible:有没有办法从目标机器上的文件加载事实?
Ansible: is there a way to load facts from a file on a target machine?
使用 Ansible,我想将键值对存储在目标机器上的文件中。
这将是 created/changed 由单独的 Ansible 角色,可能具有 add/remove 之类的操作。我已经可以为此目的使用 ansible-xml 模块(但是,如果以下内容可以使用不同的格式,我不介意)。
是否有任何 "Ansibly" 方法来获取远程 XML(或其他格式)文件的内容并将值填充到事实(变量)中?
不确定 "remote file on the target machine" 是什么意思,但请看一下 Local facts.
您可以在目标机器上的 /etc/ansible/facts.d/
处存储一个包含一些事实的静态文件。
您还可以编写一个可执行脚本并将其放在那里——它可以做任何您想做的事情,然后应该将事实打印到标准输出为 JSON.
如果 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
使用 Ansible,我想将键值对存储在目标机器上的文件中。
这将是 created/changed 由单独的 Ansible 角色,可能具有 add/remove 之类的操作。我已经可以为此目的使用 ansible-xml 模块(但是,如果以下内容可以使用不同的格式,我不介意)。
是否有任何 "Ansibly" 方法来获取远程 XML(或其他格式)文件的内容并将值填充到事实(变量)中?
不确定 "remote file on the target machine" 是什么意思,但请看一下 Local facts.
您可以在目标机器上的 /etc/ansible/facts.d/
处存储一个包含一些事实的静态文件。
您还可以编写一个可执行脚本并将其放在那里——它可以做任何您想做的事情,然后应该将事实打印到标准输出为 JSON.
如果 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