鉴于以下原因由于when
指令解析为FALSE而无法运行,
- name: testin1
command: echo 'hello'
when: dig_output|d('') == ''
,并且由于when
指令解析为FALSE导致以下任务也无法运行,
- name: testin2
command: echo 'hello'
when: "'NOERROR' not in dig_output.results.0.stdout"
为什么当我期望它也不会运行时,以下任务出乎意料地运行?
- name: testin3
command: echo 'hello'
when: (dig_output|d('') == '') or ("'NOERROR' not in dig_output.results.0.stdout")
答案 0 :(得分:1)
为什么当我期望它也不会运行时,以下任务出乎意料地运行?
因为您在第二步中混淆了YAML引用中的义务,但是Python将所有非空字符串视为Truthy
观察:
- debug: msg="hello"
when: False or ("hello world")
将运行,但是
- debug: msg="hello"
when: False or ()
将无法运行。因此:
- command: echo 'hello'
when: False or ("'NO ERROR' actually the rest does not matter")
是第三个示例的实际操作。您可能想要:
- command: echo 'hello'
when: (dig_output|d('') == '') or ('NOERROR' not in dig_output.results.0.stdout)
因为将其从字符串文字更改为not in
表达式,Python将对该表达式进行评估