Não é possível fornecer uma resposta exata à sua pergunta por razões óbvias, mas deixe-me pelo menos apontar alguns bits, alguns deles serão facilmente compreensíveis do ponto de vista de um programador:
-
Mantenha dados e lógica separados.
ansiblefornece os meios para tornar isso uma tarefa fácil, mas você precisa criar suas funções de maneira funcional, ou seja, tornar suas funções configuráveis por meio de dados. -
Escreva seus papéis para que eles façam uma coisa só, mas façam bem. Isso melhora a reutilização de suas funções e facilita a manutenção no futuro.
-
Ao definir os dados que guiarão o comportamento de suas funções, não crie estruturas de dados complicadas.
ansibletem muitos iteradores que você pode usar e até fornece a capacidade de escrever os seus, mas se você precisar de algo mais complicado quewith_subelements, é hora de repensar suas estruturas de dados. -
Use tags. Você pode definir ações usando uma combinação de grupos e tags.
-
Use
registers para capturar o resultado de suas ações e usá-las em ações subsequentes para controlar o fluxo usando as instruçõeswhen. Não complique as condições, no entanto. -
set_factseassertpodem ajudar a coletar dados sobre o status do sistema de destino. -
Idempotência. Mantenha suas ações idempotentes para que você elimine a necessidade de construir muita lógica em suas ações. Pense em termos de staus de destino (estado desejado) e não em termos de linguagem procedural.