Ansible:有一种方法可以从目标计算机上的文件中加载事实?

问题描述 投票:2回答:2

使用Ansible,我想将键值对存储在目标计算机上的文件中。

它将由单独的Ansible角色创建/更改,可能使用添加/删除之类的操作。我已经可以为此目的使用ansible-xml模块(但是,如果可以使用其他格式,则可以,但是我不介意)。

是否有任何“可转换”方式来获取远程XML(或另一种格式)文件的内容并将值填充到事实(变量)中?

ansible ansible-facts
2个回答
4
投票

[不确定您是什么意思,“目标计算机上的远程文件”,但请查看Local facts

您可以通过一些事实将静态文件存储在目标计算机上的/etc/ansible/facts.d/。您还可以编写一个可执行脚本并将其放在其中–它可以执行所需的任何操作,然后应将事实作为JSON打印到stdout。


1
投票

如果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
© www.soinside.com 2019 - 2024. All rights reserved.