如何跟踪您在 Ansible 循环中的位置

问题描述 投票:0回答:1

我需要在 Yaml 文件中写入一些行,次数不定:

- name: Retry a task until a certain condition is met
  lineinfile:
    path: /root/file
    insertafter: '^listeners:'
    line: 'iteration #iteration_number++'
  retries: {{ a_variable }}
  delay: 10

我也想将每次迭代的执行次数写入文件。类似于下面的for循环:

for i in {1..a_variable}
  do
    echo "i"
  done

如何跟踪自己处于循环中的位置?

for-loop variables ansible iteration
1个回答
0
投票

首先,重试不是循环,因为它们不会迭代任何内容。他们只是进行轮询,直到满足条件为止。相反,您需要将

lineinfile
执行放入
loop
中,该执行将在 0 到您的值的范围内迭代。像这样的东西(我现在无法验证,只是展示想法):

 - name: Retry a task until a certain condition is met
   lineinfile:
     path: /root/file
     insertafter: '^listeners:'
     line: 'iteration #iteration_number++'
   loop: "{{ lookup('range', 0, a_variable }}"

然后,您可以使用默认的

item
变量,或使用
loop_var
参数的可选
loop_control
指令将其设置为另一个变量。

但对于简单的情况来说确实如此。在现实世界中,人们会迭代一些对象列表,因此 Ansible 专门针对这种情况提供了一个特殊变量。它被覆盖在 通过循环跟踪进度

index_var
:

要跟踪循环中的位置,请使用

index_var
指令和
loop_control
。该指令指定一个变量名来包含当前循环索引。

    - name: Count our fruit
      ansible.builtin.debug:
        msg: "{{ item }} with index {{ my_idx }}"
      loop:
        - apple
        - banana
        - pear
      loop_control:
        index_var: my_idx

您也可以考虑使用 Jinja2 来模板化文件。

© www.soinside.com 2019 - 2024. All rights reserved.