Preciso de um método para parar o loop no Ansible, como break
na for
instrução em C++ ou Bash. Por exemplo, preciso do último valor antes do loop digitalizar para 0.
Odefault/main.yml
---
os_vars:
- 8
- 10
- 15
- 6
- 0
- 7
- 25
Otasks/main.yml
- name: Debug variables
ansible.builtin.set_fact:
a: "{{ item }}"
loop: "{{ os_vars }}"
when: item > 0
E a saída
TASK [test_role : Debug variables] *********************************************
ok: [localhost] => (item=8)
ok: [localhost] => (item=10)
ok: [localhost] => (item=15)
ok: [localhost] => (item=6)
skipping: [localhost] => (item=0)
ok: [localhost] => (item=7)
ok: [localhost] => (item=25)
Eu sei que posso definir outra variável bool para controlar o loop, não atribuí um com os itens a seguir, mas também preciso economizar tempo para aumentar o desempenho deste manual, pois em algum momento esse corpo do loop pode ser uma matriz enorme e não o fazemos preciso verificar os seguintes itens quando alguma condição corresponder...
Por favor, compartilhe seus comentários. Desde já, obrigado.
P: " Eu sei que posso definir outra variável bool para controlar o loop, não atribuí um com os seguintes itens "
Certo, como existem
Perguntas e respostas semelhantes
with_lines
o ciclo no Ansible?e muito mais ...
P: " Preciso de um método para interromper o loop no Ansible, como
break
nafor
instrução em C++ ou Bash. "Isso não está disponível. Você não pode interromper o loop, só pode implementar para pular.
Isto é porque
Coisas que você deve saber sobre programação usando Ansible
O Zen do Ansible
P: " Também preciso economizar tempo para aumentar o desempenho deste manual, pois em algum momento esse corpo do loop pode ser uma matriz enorme e não precisamos verificar os itens a seguir quando alguma condição corresponder. "
Se você gosta ou precisa implementar tal comportamento, talvez seja necessário escrever algo sozinho. Veja no exemplo Você deve desenvolver um módulo? e Desenvolvimento de módulos .
Uma outra abordagem pode ser fazer algum pré-processamento na estrutura de dados,
os_vars
listar para ter depois disso apenaspara fornecer o loop. Então, nenhuma pausa ou construção seria necessária.
Leitura adicional
loop
quando a condicional fortrue
a primeira vez e os threads como Loop de uma tarefa até que ela seja bem-sucedida , Como encerrar dinamicamente um loop no Ansible , ...break_when
aoloop_control
"loop_control
until
"Com base nos comentários fornecidos e conforme entendi o caso de uso, uma possível abordagem de solução sem
BREAK
ou qualquerwhen:
construção .IF
THEN
ELSE
Um manual de exemplo mínimo
resultará em uma saída de
Baseado em