在给定条件的情况下跳过 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
我试图在将特定变量传递到剧本时跳过 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