如何在整个过程中缓存 Ansible 组和主机变量

如何在整个过程中缓存 Ansible 组和主机变量

我有一个针对某些主机的剧本,这些主机具有组变量和主机变量,它们使用自定义查找插件从 API 端点提取值。

ansible_user: "{{ lookup(get_value_from_endpoint) }}"

从此 API 端点提取的组变量中的一个重要信息是ansible_user,如示例所示。出于安全目的,用户名在 API 端点中是安全的,因此操作员(使用ansible-playbookAnsible Tower 或 AWX 的人员)只需访问 API 端点,这样用户名就不会提交给 git。

还可以从 API 中提取更多信息。

问题是查找插件在每个任务上执行。因此,如果我在剧本中有 25 个任务,那么至少会有 25 个 API 调用。

有什么方法可以“缓存”此变量以便它在整个剧本执行过程中一直存在吗?

干杯

答案1

如果您无法将该信息存储在您的库存中,但您希望剧本一次运行中的信息可以在几天后的下一次运行中可用,并且可能在不同的机器上可用,您有以下选择。

  • 在第一次运行剧本时获取事实并将其直接存储在主机上(例如,在 JSON 文件中)。下次运行时,您可以检查该文件是否存在,然后读取它并将信息还原为本次运行的事实。

如果你只想在每次运行剧本时获取一次事实,那么创建一个任务,注册 API 输出并使用该寄存器,例如

- uri:
    ..
  register: api_facts

- uri:
    api: "{{ api_facts.stdout }}"

当然,您可以重新格式化输出api_facts并使用set_fact来格式化它。因此,每次运行剧本时,您只需调用一次 API。

相关内容