ansible 查找不适用于环境变量

Pet*_*eks 1 lookup environment-variables ansible

Ansible 查找不适用于环境变量。

这有效:

- name: WIN_SHELL | Get ComputerName
  win_shell: $Env:ComputerName
  register: computerName

- debug:
    var: computerName.stdout_lines.0
Run Code Online (Sandbox Code Playgroud)

这些都没有:

- debug:
    msg: '{{lookup("env", "ComputerName")}}'

- debug:
    msg: '{{ lookup("env", "COMPUTERNAME") }}'

- debug:
    msg: '{{ lookup("env", "computername") }}'

- debug:
    msg: '{{ lookup("env", "computerName") }}'
Run Code Online (Sandbox Code Playgroud)

关于 ansible 查找有什么我不明白的地方吗?或者是否有一些情有可原的情况阻止了这一点?我宁愿使用 ansible 查找而不是 win_shell 来保持幂等性。

Zei*_*tor 6

env因为所有其他查找都是在控制器机器上执行的。在本例中,查找文档页面的概要中很好地回忆了这一点env

允许您在调用 Ansible 时查询控制器上可用的环境变量。

因此,win_shell您示例中的任务(在远程计算机上执行)绝对不等于您的查找测试(在控制器上执行)。

如果您没有在主机上禁用事实收集(即通过gather_facts: false在剧本中设置),则所有环境变量都应该可以在ansible_env字典中访问。以下任务应该使您能够阅读所有这些内容并确保您的设置正确(以及获取其正确的名称以使用它)。

- name: Debug all env vars
  debug:
    var: ansible_env
Run Code Online (Sandbox Code Playgroud)