我编写了一个查找插件来从密码存储API获取密码。我正在获取例如主机机密。为了避免单独向每个主机添加查找插件调用,我只是将其放置在group_vars/all.yml
中,如下所示:
ansible_password: "{{ lookup('some_vars') }}"
当我运行剧本时(例如site-ping.yml
只做一个登录和ping),仅限于1个主机,我仍然看到插件实际上是如何被调用两次的(因此进行了两次API调用)。
gather_facts
设置为no
。如果我将其设置为yes
我实际上会收到 4 个查找插件调用。
为什么会这样?ansible 中的group_vars
是否在运行时初始化两次?我应该在哪里放置查找插件调用以避免这种情况?有什么最佳实践吗?
也许不是最终的解决方案,但我找到了一种解决方法,以避免在group_vars
中定义 ansible 调用查找插件两次的行为。而不是直接调用查找插件进行ansible_password
,例如:
ansible_password: "{{ lookup('some_lookup_vars') }}"
我引入了一个这样的临时变量:
password_lookup: "{{ lookup('some_lookup_vars') }}"
ansible_password: "{{ password_lookup }}"
奇怪,但我假设 Ansible 尝试检查变量是否已初始化,从而触发查找插件。这样查找插件将只触发一次。
编辑:另请参阅此处:#52290 Github问题链接