Depois de jogar com vários métodos diferentes de fazer isso, um script wrapper foi minha solução final.
O script é chamado em vez de puppet agent
sempre que ocorre uma execução.
- Define uma variável
FACTER_
env queinit.pp
procura. Seinit.pp
não encontrar a variável,fail()
s com uma mensagem de erro. - O script primeiro executa
puppet agent --noop --onetime --no-daemonize --verbose --color=false | grep -q ' (noop)$'
(é um pouco mais inteligente do que isso, pois também verifica apuppet agent
run para códigos de erro. Também não é possível usar--detailed-exitcodes
devido a bug 6322 . - Se o acima corresponder ao
(noop)$
, ele remove o servidor do balanceador de carga e executa o fantoche novamente sem o--noop
e com--detailed-exitcodes
. - Se a execução sair com
0
ou2
, o script executará algumas verificações adicionais para garantir que todos os serviços estejam sendo executados corretamente e, em seguida, retornará a caixa ao balanceador de carga.