No nível de jogo, temos serial: 1
que nos permitir executar o jogo inteiro, um host de cada vez. Mas não encontrei uma maneira simples de fazer isso em uma única tarefa. Isso é especialmente relevante se a tarefa em questão não executar o bloqueio adequado (por qualquer motivo).
Uma resposta óbvia é colocar a tarefa em seu próprio jogo. Mas isso não ajuda nos papéis. (Ter que fazer serial: 1
a peça usando o papel não é realmente intuitivo.)
serial: 1
deixe-me colocá-lo em uma peça pelo menos. Mas eu só quero colocá-lo no subitem de uma peça (qual seja o nome correto disso. Pensei que fosse "tarefa", mas o comentário acima parece discordar).serial: 1
faz algo completamente diferente: é como executar o manual de instruções para cada host, aguardando a conclusão do manual completo antes de passar para o próximo host.forks=1
significa executar a primeira tarefa em uma peça em um host antes de executar a mesma tarefa no próximo host, portanto, a primeira tarefa será executada para cada host antes que a próxima tarefa seja tocada. Então você querforks=1
apenas uma peça; infelizmente isso não é possível no momento.Se você estiver executando em uma única máquina, surgirão problemas de bloqueios exclusivos para mais de um host. Portanto, você deve executar um por um para todos os hosts
--forks=1
. Por exemplo:ansible-playbook webserver.yml --forks=1
onde webserver.yml possui app01 e app02 dentro do seu[webserver]
fonte
Há uma solução alternativa para esse problema - é possível passar a lista de hosts (ou um grupo) para
with_items
e usá-ladelegate_to
com esta lista. Dessa forma, a tarefa será executada host por host.Por exemplo:
fonte
run_once: true
está lá, tente retirá-lo. Você não vai gostar do que acontece. (tantos repetidas corre AAAAHHHH)Pense o que você quer é
run_once: true
fonte
Para comandos que podem ser executados localmente, use um loop para iterar sobre todos os hosts na peça. Isso funciona apenas se o comando puder ser executado localmente. Você também pode executar um comando com o ssh nas máquinas remotas, uma a uma, dessa maneira, se as chaves estiverem configuradas, mas isso se torna difícil quando se trata de escalação.
POR EXEMPLO:
fonte
inventory_hostname
, caso contrário, o loop não faz sentido.