在角色任务中设置ansible环境

在角色任务中设置ansible环境,ansible,Ansible,我试图设置命令运行的环境,但无论我做什么,似乎都无法为命令任务正确设置环境 我在一个名为testkitchen - name: Debug command: echo $PATH > /tmp/pathdoc && echo $GEM_PATH > /tmp/gempath environment: PATH: "{{ lookup('env', 'PATH') }}:/usr/local/bin:" GEM_PATH: "{{ rvm1_in

我试图设置命令运行的环境,但无论我做什么,似乎都无法为
命令
任务正确设置环境

我在一个名为
testkitchen

- name: Debug
  command: echo $PATH > /tmp/pathdoc && echo $GEM_PATH > /tmp/gempath
  environment:
    PATH: "{{ lookup('env', 'PATH') }}:/usr/local/bin:"
    GEM_PATH: "{{ rvm1_install_path }}/gems/ruby-{{ ruby_version }}:\
               {{ rvm1_install_path }}/gems/ruby-{{ ruby_version }}@global"
我是从这样的剧本中给这个角色打电话的

- hosts: all 
  become: true
  roles:
  - kitchen-tester
我已经尝试在角色变量、剧本变量和现在的任务中设置变量,但是无论我做什么,文件
/tmp/pathdoc
都显示了这个路径
/sbin:/bin:/usr/sbin:/usr/bin
,而GEM\u路径变量甚至没有设置

我是不是错过了什么?
Ansible v2.6

文档说明了
命令
模块:

给定的命令将在所有选定节点上执行。它不会通过shell进行处理,因此像$HOME这样的变量和像“”、“;”和“&”这样的操作将不起作用(如果需要这些功能,请使用shell模块)

尝试改用
shell
模块:

shell模块采用命令名,后跟一系列以空格分隔的参数。它几乎与命令模块完全相同,但通过远程节点上的shell(/bin/sh)运行命令

另外,请记住,
查找
插件是在Ansible主机上执行的,而不是在远程主机上执行的。

上述场景的输出如下所示:

changed: [192.168.3.103] => {"changed": true, "cmd": ["echo", "$PATH", ">", "/tmp/pathdoc", "&&", "echo", "$GEM_PATH", ">", "/tmp/gempath"], "delta": "0:00:00.002654", "end": "2018-07-11 11:24:02.994448", "invocation": {"module_args": {"_raw_params": "echo $PATH > /tmp/pathdoc && echo $GEM_PATH > /tmp/gempath", "_uses_shell": false, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 0, "start": "2018-07-11 11:24:02.991794", "stderr": "", **"stdout": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin: > /tmp/pathdoc && echo /tmp/gems/ruby-1:/tmp/gems/ruby-1@global > /tmp/gempath", "stdout_lines"**: **["/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/bin: > /tmp/pathdoc && echo /tmp/gems/ruby-1:/tmp/gems/ruby-1@global > /tmp/gempath"]**, "warnings": []}
查看上述输出的标准输出部分,您会注意到设置了GEM_PATH和PATH,但它们不是单独的echo命令,因为您认为它们只是一个echo命令,字符串的其余部分是该命令的参数。 另一件事是使用&&对命令进行分组,这是我不知道的。我用“;”因此,如果您确定&&可以用于分组,请使用它

因此,为了获得预期的结果,请使用shell或在命令中调用shell

希望有帮助

问候 Sudhakar通常(但不一定)是比
更好的选择