我需要在 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
如何追踪循环中的当前位置?
首先,重试不是循环,因为它们不会迭代任何东西。它们只是轮询直到满足条件。相反,您需要将执行
lineinfile
放在一个loop
会迭代从 0 到您的值的范围中。类似这样(我现在无法验证,只是展示这个想法):然后,您可以使用默认变量或使用参数的
item
可选指令将其设置为另一个变量。loop_var
loop_control
但对于简单情况来说,这是正确的。在现实世界中,人们会迭代一些对象列表,因此 Ansible 专门为这种情况提供了一个特殊变量。它在 通过循环跟踪进度
index_var
中介绍:您可能还考虑使用 Jinja2 对文件进行模板化。
问:“类似下面的for循环。 ”
根据已经给出的想法,一个最小的示例剧本
将导致输出
以及文件内容
即使这在技术上是可行的,人们也应该牢记Ansible 的禅意。
文档
range()
loop