Preciso escrever algumas linhas em um arquivo YAML por um número variável de vezes:
- 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
Quero escrever o número de execução de cada iteração no arquivo também. Semelhante ao seguinte loop for:
for i in {1..a_variable}
do
echo "i"
done
Como manter o controle de onde você está em um loop?
Primeiro, as novas tentativas não são loops, pois não iteram sobre nada. Elas apenas pesquisam até que a condição seja atendida. Em vez disso, você precisa colocar sua
lineinfile
execução em umloop
que iteraria sobre um intervalo de 0 até seu valor. Algo assim (não posso validar agora, apenas mostrando a ideia):Então, você pode usar a variável padrão
item
ou defini-la como outra usando aloop_var
diretiva opcional doloop_control
parâmetro.Mas isso é verdade para casos simples. No mundo real, itera-se sobre alguma lista de objetos, então o Ansible fornece uma variável especial apenas para esse caso. É abordado em Rastreando o progresso por meio de um loop com
index_var
:Você também pode considerar criar um modelo para o arquivo com o Jinja2.
P: " Semelhante ao seguinte loop for. "
Com base na ideia já dada , um manual de exemplo mínimo
resultará em uma saída de
e um conteúdo de arquivo de
Mesmo que isso seja tecnicamente possível, deve-se ter em mente o Zen do Ansible .
Documentação
range()
loop