Ansible - 包含来自远程主机的 vars 文件

问题描述 投票:0回答:3

我想包含远程主机上文件中的变量,而不是 Ansible 运行的控制机。

例如,我有一个文件 /var/database_credentials.yml (在我的网络服务器上)

将该文件中的变量添加到主机变量以便我可以在模板中使用它们的最佳方法是什么?

include_vars 模块仅从控制机获取文件。我可以使用 fetch 模块,但这似乎是不必要的步骤。

amazon-web-services ansible ansible-facts
3个回答
3
投票

将其与

/etc/ansible/facts.d
整合起来应该不难。

您可以在该目录中存储 JSON 文件、INI 文件或可执行脚本,并且在执行安装模块后,内容/输出将作为服务器事实可用。

我不确定是否需要 YAML。您可能很幸运,只需向您的文件添加一个符号链接即可

/var/database_credentials.yml
。 (文档中没有提到 YAML,但如果不支持 YAML 就会很奇怪,因为 Ansible 中的几乎所有内容都基于 YAML)如果不支持,您可以使用您喜欢的语言创建一个脚本,该脚本读取该文件并输出 JSON对象。

请参阅文档中的本地事实 (Facts.d)


0
投票

您可以将远程文件

register
保存为本地变量,然后使用from_yaml进行解析。

- name: "Read yml file"
  ansible.builtin.shell: "cat /var/database_credentials.yml"
  register: result
  
- name: "Parse yml into variable"
  set_fact:
    database_credentials: "{{ result.stdout | from_yaml }}"

0
投票

我使用

slurp
模块的解决方案:

- slurp:
     src: /etc/patroni/patroni.yml
  register: patroni_status
- set_fact:
     patroni_fact:
       "{{ patroni_status['content'] | b64decode | from_yaml }}"
© www.soinside.com 2019 - 2024. All rights reserved.