Ansible:返回上一个任务的状态

Ansible:返回上一个任务的状态

我正在使用此命令从 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模块。

相关内容