首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在角色任务中设置可访问的环境

在角色任务中设置可访问的环境
EN

Stack Overflow用户
提问于 2018-07-07 06:21:36
回答 2查看 901关注 0票数 0

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

我在一个名为test-kitchen的角色中运行此任务

代码语言:javascript
复制
- 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"

我从一个剧本中调用角色,看起来像这样。

代码语言:javascript
复制
- hosts: all 
  become: true
  roles:
  - kitchen-tester

我已经尝试在角色变量、剧本变量以及现在的任务中设置变量,但无论我做什么,文件/tmp/pathdoc都会显示此路径/sbin:/bin:/usr/sbin:/usr/bin,而GEM_PATH变量甚至都没有设置。

我是不是错过了什么愚蠢的东西?Ansible v2.6

EN

回答 2

Stack Overflow用户

发布于 2018-07-11 14:34:24

几点观察:

以上场景的输出如下:

代码语言:javascript
复制
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": []}

查看上面输出的stdout部分,您将注意到设置了GEM_PATH和PATH,但它们不是单独的echo命令,因为您认为它们只是一个echo命令,而字符串的其余部分是此命令的参数。另一件事是用&&对命令进行分组,这是我不知道的。我使用';‘,所以如果您确定&&可以用于分组,请使用它。

因此,对于预期结果,请使用shell或在命令中调用shell。

希望这能有所帮助。

关于Sudhakar

票数 0
EN

Stack Overflow用户

发布于 2018-07-07 06:30:54

文档中提到了command模块:

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

请尝试使用shell模块:

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

此外,请记住,lookup插件在Ansible主机上执行,而不是在远程主机上执行。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51218305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档