如何获取远程主机的环境变量

17

我在处理远程主机的环境变量时遇到了问题。例如,当我尝试 {{ lookup('env', 'PATH') }} 时,它返回的是我的客户机路径而不是远程主机的路径。

如何获取/更改远程主机的环境变量?

我的playbook:

---
- name : playbook
  hosts : webservers
  gather_facts: yes
  remote_user: user1
  vars:
   Path: "{{lookup('ansible_env','PATH')}}"
  roles :
 - task1
 - task2 
 - task3 

这返回的是我的机器路径,而不是名为user1的远程主机路径。我是Ansible的初学者,需要一些帮助。谢谢。


为什么要查找,只需使用{{ ansible_env.PATH }} ----------> 路径:"{{ ansible_env.PATH }}" - Raul Hugo
2个回答

26
lookup函数的行为已经明确记录

插件允许从外部源中访问Ansible中的数据。这些插件在Ansible控制机器上进行评估...

关于访问远程环境变量,有一个常见问题解答

Ansible 1.4还将通过“ansible_env”变量将远程环境变量作为事实提供:

{{ ansible_env.SOME_VARIABLE }}
请注意,远程事实(如ansible_env)仅在启用事实收集时才可用(这是ansible的默认行为,但可以在配置文件或playbook中禁用)。
如果您想要修改远程主机的环境变量,您需要查看文档the documentation中描述的environment指令:

Ansible使用 "environment" 关键字让您轻松配置环境。以下是一个示例:

- hosts: all
  remote_user: root

  tasks:

    - apt: name=cobbler state=installed
      environment:
        http_proxy: http://proxy.example.com:8080
这会为该特定任务设置环境变量,但它不是持久的修改。

我尝试使用 {{ ansible_env.PATH}},但仍然返回本地机器的相同路径。我尝试获取其他变量,如仍然返回空字符串""或返回变量的值(如果在我的本地机器上定义了该变量)。 我尝试使用命令 ansible all -m setup 在远程主机中发现所有的 ansible_env 变量,但我无法找到在远程主机上定义的所有变量。 - mndhr

2
根据文档,你不能在远程机器上使用 lookup 关键字,该关键字仅适用于本地机器。

相反,您需要使用 {{ ansible_env.PATH}}


我尝试使用 {{ ansible_env.PATH }},但仍然返回我的本地机器的相同路径。我尝试获取其他变量,如仍然返回空字符串 "" 或者如果在我的本地机器上定义了该变量,则返回该变量的值。 - mndhr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接