Ansible - 带有变量端的with_sequence循环的条件,可能小于start

时间:2017-06-23 15:13:46

标签: loops ansible

我遇到了一个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

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