De nos jours, si on a la volonté d'avoir une approche DevOps, on doit pouvoir utiliser un repo Git et une pipeline de CI/CD pour centraliser la configuration dans Git, et lancer les playbooks avec un environnement reproductible via des "runners".
pour ma part je fais cela avec Ansible sur du Gitlab avec un script qui définit deux choses:
1. si un nouveau nœud est ajouté dans l'inventaire/fichier hosts
new_servers=`git diff --cached --diff-filter=M $CI_MERGE_REQUEST_DIFF_BASE_SHA -- hosts | \ grep -vE '^+++|^+$' | grep '^+' | sed 's/^+//' | grep -vE '^[[:space:]]*($|#|[)' | \ grep -v ansible_docker_extra_args | grep -v = | awk '{print $1}' | sort -uV` || true
2. si un rôle en particulier est modifié
roles=`git diff --cached --raw --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA | xargs dirname | sed -r 's@^([^/]+).*@\1@' | sort -uV | sed '/^./d'`
dans le premier cas je lance l'install et la config des rôles sysprep + monitoring + sshguard. dans le second cas je lance uniquement le rôle en question pour tous les serveurs.
ce n'est pas tout à fait standard (et je vous en voudrai pas trop si vous trouvez que c'est crado), car mes rôles se trouvent simplement à la racine du repository.
je suis curieux de savoir comment vous faites votre CI/CD avec une architecture de répertoire standard. d'ailleurs je devrais sans doute ouvrir un thread séparé à cet effet.
-elge