无法在 when 子句中为 ansible 角色设置多个条件
Unable to set multiple conditions in when clause for ansible roles
我的ENV
是DEV
而instance_name
是myapp44
因此,我希望 myapp7
的角色在 when 条件失败时跳过。
下面是我的角色,它工作正常并在 when 子句失败时跳过。
- { role: myapp7, ENV: "{{ENV}}", ACTION: "{{ACTION}}", when: "'myapp7' in instance_name" }
问题是我希望使用 and
条件测试多个条件。我预计它会失败并跳过,但该角色会被调用。
- { role: myapp7, ENV: "{{ENV}}", ACTION: "{{ACTION}}", when: ENV != 'perf' and "'myapp7' in instance_name" }
在调试中观察到同样的问题
- debug:
msg: " Instance myapp7"
when: "'myapp7' in instance_name"
- debug:
msg: " Instance myapp7 with multi condition"
when: ENV != 'perf' and "'myapp7' in instance_name"
tags: trigger
- debug:
msg: " Instance myapp7 with brackets"
when: (ENV != 'perf' and "'myapp7' in instance_name")
tags: trigger
我希望所有三个条件都失败,但在上述调试中只有第一个条件失败。
能否请您建议如何为角色编写多个 when 条件?
你是 over-quoting 东西。当你写:
when: ENV != 'perf' and "'myapp7' in instance_name"
您正在写:
when: (ENV != 'perf') and "a nonempty string"
而 non-empty 字符串的计算结果总是 true
,因此该表达式的后半部分是 no-op。你想要:
when: "ENV != 'perf' and 'myapp7' in instance_name"
我更喜欢对 when
表达式使用备用 YAML 引用机制,因为我认为它使事情更容易阅读。下面的表达式与前面的表达式完全等价:
when: >-
ENV != 'perf' and 'myapp7' in instance_name
我的ENV
是DEV
而instance_name
是myapp44
因此,我希望 myapp7
的角色在 when 条件失败时跳过。
下面是我的角色,它工作正常并在 when 子句失败时跳过。
- { role: myapp7, ENV: "{{ENV}}", ACTION: "{{ACTION}}", when: "'myapp7' in instance_name" }
问题是我希望使用 and
条件测试多个条件。我预计它会失败并跳过,但该角色会被调用。
- { role: myapp7, ENV: "{{ENV}}", ACTION: "{{ACTION}}", when: ENV != 'perf' and "'myapp7' in instance_name" }
在调试中观察到同样的问题
- debug:
msg: " Instance myapp7"
when: "'myapp7' in instance_name"
- debug:
msg: " Instance myapp7 with multi condition"
when: ENV != 'perf' and "'myapp7' in instance_name"
tags: trigger
- debug:
msg: " Instance myapp7 with brackets"
when: (ENV != 'perf' and "'myapp7' in instance_name")
tags: trigger
我希望所有三个条件都失败,但在上述调试中只有第一个条件失败。
能否请您建议如何为角色编写多个 when 条件?
你是 over-quoting 东西。当你写:
when: ENV != 'perf' and "'myapp7' in instance_name"
您正在写:
when: (ENV != 'perf') and "a nonempty string"
而 non-empty 字符串的计算结果总是 true
,因此该表达式的后半部分是 no-op。你想要:
when: "ENV != 'perf' and 'myapp7' in instance_name"
我更喜欢对 when
表达式使用备用 YAML 引用机制,因为我认为它使事情更容易阅读。下面的表达式与前面的表达式完全等价:
when: >-
ENV != 'perf' and 'myapp7' in instance_name