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

How to get environment variables of remote host

我在使用远程主机的环境变量时遇到问题。例如,当我尝试 {{ lookup('env', 'PATH') }} 这个 return 是我的来宾机器的路径,而不是远程主机的路径。

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

我的剧本:

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

那是 return 我机器的路径,而不是名为 user1 的远程主机的路径 我是 ansible 的初学者,需要一些帮助。提前谢谢你。

根据文档 here,您不能对远程计算机使用 lookup,该关键字仅适用于本地计算机。

相反,您想使用 {{ ansible_env.PATH}}

lookup 函数的行为是 documented explicitly:

plugins allow access of data in Ansible from outside sources. These plugins are evaluated on the Ansible control machine...

有一个关于访问远程环境变量的FAQ

Ansible 1.4 will also make remote environment variables available via facts in the ‘ansible_env’ variable:

{{ ansible_env.SOME_VARIABLE }}

请注意,远程事实(如 ansible_env)仅在启用事实收集时可用(这是 ansible 的默认行为,但可以在配置文件或您的剧本中禁用)。

如果你想修改远程主机的环境,你再次查看the documentation,它描述了environment指令:

Ansible makes it easy for you to configure your environment by using the ‘environment’ keyword. Here is an example:

- hosts: all
  remote_user: root

  tasks:

    - apt: name=cobbler state=installed
      environment:
        http_proxy: http://proxy.example.com:8080

这些设置了一个环境变量为此特定任务。不是持久化修改。