我有一个针对某些主机的剧本,这些主机具有组变量和主机变量,它们使用自定义查找插件从 API 端点提取值。
ansible_user: "{{ lookup(get_value_from_endpoint) }}"
从此 API 端点提取的组变量中的一个重要信息是ansible_user
,如示例所示。出于安全目的,用户名在 API 端点中是安全的,因此操作员(使用ansible-playbook
Ansible 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。