bash - 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。之前的所有步骤都很好,直到这一步。任何建议表示赞赏。
解决方案
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 上按预期工作)。
推荐阅读
- python - 将 node.js 与 python 结合起来是个好主意吗?
- android - 在Android中打开位图时FileNotFound
- python - 为什么字典值比较在 python 中不起作用
- autocomplete - Omnisharp + Neovim 不检测缓冲区中未加载的 csharp 文件
- r - 合并功能重复所有行
- python - 如何使用 Selenium 找到并单击 data-qa 按钮?
- c# - 我的对象数组中的内部对象未正确分组
- python - 如何使用 torchtext v0.9 实现自定义数据集?
- flutter - 在 Flutter 应用程序的 Obx() 侦听器中调用 Get.back()
- python - pandas - 为什么 iloc 和 loc 的输出不同