无法在 when 子句中为 ansible 角色设置多个条件

Unable to set multiple conditions in when clause for ansible roles

我的ENVDEVinstance_namemyapp44

因此,我希望 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