组变量中的 Ansible 查找插件被多次调用



我编写了一个查找插件来从密码存储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问题链接

最新更新