Estou tentando usar e entender como funciona a palavra-chave acelerador.
Abaixo está como estou usando (test-playbook.yaml).
---
- name: Test throttle
hosts: all
tasks:
# list of pre tasks
- name: Execute sequentially
throttle: 1
block:
- include_tasks: task-1.yaml
- include_tasks: task-2.yaml
# a task using some module
# a task using some module
# list of post tasks
Executadoansible-playbook --inventory some-inventory --limit host1:host2:host3
Estou esperando que em task (Execute sequencialmente) , todos os hosts especificados em --limit serão executados sequencialmente, ou seja, host1 concluirá todas as tarefas no bloco, depois host2 seguido por host3
Mas eles são executados em paralelo (comportamento padrão do Ansible).
Alguém pode ajudar a entender o comportamento do acelerador ? Perdi alguma configuração?
forks/serial
têm valores padrão.
E como posso conseguir um comportamento sequencial.
O comportamento padrão do ansible-playbook é a estratégia linear :
O acelerador serve ao propósito de " limitar o número de trabalhadores para uma tarefa específica... Use o acelerador para restringir tarefas que podem consumir muita CPU ou interagir com uma API de limitação de taxa ".
Por exemplo, por padrão, execute a tarefa em paralelo (limitado por serial até os forks ) hosts
Você pode ver que todos os hosts executaram a tarefa em paralelo
Se você limitar a execução por acelerador
Você pode ver que a execução da tarefa foi serializada
Certifique-se de que a hora foi sincronizada antes de começar a experimentar.
P: " Usando include_tasks não estou obtendo o mesmo comportamento. Todas as tarefas incluídas estão sendo executadas em paralelo. "
R: Não consigo reproduzir seu problema. Dados os arquivos
a tarefa
dá
Você pode ver que a execução das tarefas incluídas foi serializada. Isso funciona como esperado porque a palavra-chave acelerador é permitida no bloco . A aplicação dessa palavra-chave a um bloco é a mesma que a aplicação dessa palavra-chave a todas as tarefas do bloco.