在给定条件的情况下跳过 Ansible 循环的特定迭代

Skip a specifc iteration of an Ansible loop given a condition

我试图在将特定变量传递到剧本时跳过 Ansible 循环迭代。

我在 ansible 任务中有以下 with_items:

...
...

with_items:
        - "item1"
        - "{{ 'item2' if my_env != 'my_env_1' }}" 

我希望 playbook 在 my_env == 'my_env_1'

时完全跳过第二项并且不执行任何操作

上面的代码片段对我来说似乎很有意义,但是当我 运行 剧本时,我收到以下错误:

fatal: [...]: FAILED! => {"msg": "the inline if-expression on line 1 evaluated to false and no else section was defined."}

我的 else 语句是希望剧本跳过它。有什么办法可以指定吗?

谢谢。

问:“当my_env == 'my_env_1'时跳过循环中的第二项”

A:例如,使用三元展平列表

shell> cat pb.yml
- hosts: localhost
  tasks:
    - debug:
        var: item
      loop: "{{ my_list|flatten }}"
      vars:
        my_list:
          - item1
          - "{{ (my_env == 'my_env_1')|ternary([], 'item2') }}"
          - item3

给出(删节)

shell> ansible-playbook pb.yml -e my_env=my_env_1

...

TASK [debug] **************************************************
ok: [localhost] => (item=item1) => 
  ansible_loop_var: item
  item: item1
ok: [localhost] => (item=item3) => 
  ansible_loop_var: item
  item: item3
shell> ansible-playbook pb.yml -e my_env=my_env_X

...

TASK [debug] **************************************************
ok: [localhost] => (item=item1) => 
  ansible_loop_var: item
  item: item1
ok: [localhost] => (item=item2) => 
  ansible_loop_var: item
  item: item2
ok: [localhost] => (item=item3) => 
  ansible_loop_var: item
  item: item3