- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行自定义命令,因为我还没有找到执行我需要的工作模块,并且我想调整 changed
标志以反射(reflect)实际行为:
- name: Remove unused images
shell: '[ -n "$(docker images -q -f dangling=true)" ] && docker rmi $(docker images -q -f dangling=true) || echo Ignoring failure...'
register: command_result
changed_when: "command_result.stdout == 'Ignoring failure...'"
- debug: var="1 {{ command_result.stdout }}"
when: "command_result.stdout != 'Ignoring failure...'"
- debug: var="2 {{ command_result.stdout }}"
when: "command_result.stdout == 'Ignoring failure...'"
(我知道 shell 命令很丑陋,可以通过更复杂的脚本来改进,但我现在不想这样做)
在无法删除 Docker 镜像的主机上运行此任务会产生以下输出:
TASK: [utils.dockercleaner | Remove unused images] ****************************
changed: [cloud-host] => {"changed": true, "cmd": "[ -n \"$(docker images -q -f dangling=true)\" ] && docker rmi $(docker images -q -f dangling=true) || echo Ignoring failure...", "delta": "0:00:00.064451", "end": "2015-07-30 18:37:25.620135", "rc": 0, "start": "2015-07-30 18:37:25.555684", "stderr": "", "stdout": "Ignoring failure...", "stdout_lines": ["Ignoring failure..."], "warnings": []}
TASK: [utils.dockercleaner | debug var="DIFFERENT {{ command_result.stdout }}"] ***
skipping: [cloud-host]
TASK: [utils.dockercleaner | debug var="EQUAL {{ command_result.stdout }}"] ***
ok: [cloud-host] => {
"var": {
"EQUAL Ignoring failure...": "EQUAL Ignoring failure..."
}
}
所以,我有这个stdout返回值"stdout": "Ignoring failure..."
,并且调试任务显示字符串是相等的,那么为什么任务仍然显示作为“改变”?
我使用的是ansible 1.9.1
。
我引用的文档是这个:http://docs.ansible.com/ansible/playbooks_error_handling.html#overriding-the-changed-result
最佳答案
我认为您可能误解了 changed_when
的作用。
changed_when
根据条件语句的评估将任务标记为已更改,在您的情况下是:
"command_result.stdout == 'Ignoring failure...'"
因此,只要此条件为真,任务就会被标记为已更改。
关于Ansible 和 `changed_when` 基于 `stdout` 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31731756/
为什么我无法使用 changed_when更改返回 failed 的任务的状态至changed ? 例如,我有一个自定义模块,允许我检查卷是否存在,如果卷不存在,它将失败。 剧本片段: --- - n
我正在运行自定义命令,因为我还没有找到执行我需要的工作模块,并且我想调整 changed 标志以反射(reflect)实际行为: - name: Remove unused images shel
我有一个由 ansible 运行的复杂 shell 脚本,当系统发生更改时,我确实想从它与 ansible 进行通信,因此 Ansible 会知道主机已被修改。 这是通过使用 changed_when
我是一名优秀的程序员,十分优秀!