首页 > 解决方案 > ANSIBLE - shell 任务返回非零返回码,但在终端中工作

问题描述

我有一个可靠的任务:

  - name: Get vault's binary path
    shell: type -p vault
    register: vault_binary_path

返回

 TASK [update_vault : Get vault's binary path] **********************************************************************************************************************************************************************
fatal: [xxxxx]: FAILED! => {"changed": true, "cmd": "type -p vault", "delta": "0:00:00.003303", "end": "2020-04-08 11:37:19.636528", "msg": "non-zero return code", "rc": 1, "start": "2020-04-08 11:37:19.633225", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

但是当我在 shell 中运行它时它返回就好了

[root@ip-xxxxx]# type -p vault
/usr/local/bin/vault

我以 root 身份运行 ansible,并使用become: true。之前的所有步骤都很好,直到这一步。任何建议表示赞赏。

标签: bashshellansible

解决方案


PATH在你的剧本中定义一个更新:

environment:
  PATH: "{{ ansible_env.PATH }}:/usr/local/bin"

...所以/usr/local/bin保证包括在内。

(此外,虽然在编写特定于 bash 的代码时type几乎总是优于which,但情况并非如此,因为您shell可能是/bin/sh,这不能保证支持 POSIX sh 规范中未提供的任何功能。考虑更改为shell: command -v vault,保证在所有符合 POSIX 的 shell 上按预期工作)。


推荐阅读