我遇到了一个ansible with_sequence循环的问题,其中end是一个可能为零的变量。 我正在寻找一种跳过循环的方法,所以我没有得到错误“向后计数使得步幅消极”。
简化样本:
- name : Register zero as var
# The real command is something like "script | filter | wc -l"
shell: echo 0
register: countvar
# I want this loop to run only when countvar is > 0
- name: Do smthg with countvar
command: echo "{{ item }}"
with_sequence: start=1 end={{countvar.stdout|int}}
when: countvar.stdout|int >= 1
答案 0 :(得分:2)
when
条件在循环的每次迭代中执行,它不能用作不进入循环的方法,只是为了跳过迭代。
如果您使用的是ansible> = 2.0,则可以根据您的情况使用block
围绕您的任务:
- block:
- name: Do smthg with countvar
command: echo "{{ item }}"
with_sequence: start=1 end={{countvar.stdout|int}}
when: countvar.stdout|int > 0
但是,正如你所说,它不起作用(我没有测试我的答案),因为无论如何评估end
值并且任务失败。解决方案是保护它,然后您可以跳过block
部分:
- name: Do smthg with countvar
command: echo "{{ item }}"
with_sequence: start=1 end={{countvar.stdout|int if countvar.stdout|int > 0 else 1}}
when: countvar.stdout|int > 0