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
_______________________________________________
Liste de diffusion du French Sysadmin Group
https://www.frsag.org/