我正在使用此命令从 ansible 中的任务返回。
看看他们是否成功。
这是我在剧本中的代码示例:
- name: Install JDK8
shell: cd /tmp/install/ && tar -zxvf jdk-8u51-linux-x64.tar.gz
- name: Echo Install JDK8
shell: echo $?
当我从终端运行剧本时,我没有任何返回值。
用echo命令可以得到返回值吗?
答案1
试图获取$?在您向我们展示的 Ansible 上下文中,要让 Ansible 远程执行的最后一个命令处于成功状态是行不通的。
美元?变量用于返回当前 shell 中运行的最后一个命令的状态。
在您向我们展示的设置中,您既不能保证最后运行的命令是 Ansible 中显示的命令,也不能保证它是相同的 shell,而且根据您的 ssh 客户端配置,甚至可能不是相同的 ssh 会话。
根据 Ansible 官方指南中的示例:如果最后执行的任务/命令成功与否,要执行其他操作,您可以:
tasks:
- command: /bin/false
register: result
ignore_errors: True
- command: /bin/something
when: result is failed
- command: /bin/something_else
when: result is succeeded
有关更多详细信息,请参阅文档->Ansible->条件
答案2
代码中的两个 shell 命令在不同的 shell 中执行,这意味着 ansible 将退出第一个 shell 并为第二个命令启动一个新的 shell。
如果您需要 shell 命令的返回值,它存储在result.rc
:
- name: Install JDK8
shell: cd /tmp/install/ && tar -zxvf jdk-8u51-linux-x64.tar.gz
register: result
ignore_errors: true
- debug:
msg: "The return value was: {{ result.rc }}"
shell
任务不利于幂等性,您可以尝试使用例如该package
模块。