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.ppprocura. Seinit.ppnã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 agentrun para códigos de erro. Também não é possível usar--detailed-exitcodesdevido a bug 6322 . - Se o acima corresponder ao
(noop)$, ele remove o servidor do balanceador de carga e executa o fantoche novamente sem o--noope com--detailed-exitcodes. - Se a execução sair com
0ou2, 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.