如何让 Ansible 忽略失败的 tarball 提取?

How do I make Ansible ignore failed tarball extraction?

我在 ansible 剧本中有一个命令:

- name: extract the tarball
  command: tar --ignore-command-error -xvkf release.tar

预计某些文件不会被提取,因为它们已经存在(-k 标志)。

但是,这会导致 ansible 停止整个剧本,因为 tar 提取中存在错误代码。

我该如何解决这个问题?如您所见,我已尝试 --ignore-command-error 无济于事。

您想使用 ignore_errors 参数:

- name: extract the tarball
  command: tar --ignore-command-error -xvkf release.tar
  ignore_errors: yes

"Ignore Failed Commands" in the Error Handling documentation page

当您可以通过某种方式检测成功时,

ignore_errors 效果最佳 - 您可以 register 输出并检查,或者您可以使用 creates 查找特定文件名。

ignore_errors: yes 仍会引发错误,在提示中显示失败的任务。如果您希望该任务静默失败,您可以设置 failed_when: false 或更复杂的条件,如 manual:

中所述
- name: this command prints FAILED when it fails
  command: /usr/bin/example-command -x -y -z
  register: command_result
  failed_when: "'FAILED' in command_result.stderr"

因此您可以搜索 stderr 的输出。如果文件不可读、不存在或其他原因,您可能仍然希望失败,但当存档损坏且无法提取时,您不会失败。