我在一本ansible剧本中有一个命令:
- name: extract the tarball
command: tar --ignore-command-error -xvkf release.tar
预计有些文件不会被提取,因为它们已经存在(-k
标志)。
但是,由于tar提取有错误代码,因此会导致整个playbook停止运行。
我该如何解决这个问题?如你所见,我试过--ignore-command-error
无济于事。
答案 0 :(得分:32)
您想使用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
查找特定文件名。
答案 1 :(得分:9)
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
的输出。如果文件不可读,不存在或者其他什么,您可能仍然希望失败,但是当存档被破坏且无法提取时,它可能会失败。