Nous utilisons rcm pour déployer la configuration dans n'importe quel dossier

Bonjour encore. Semaine (cet article est resté très longtemps dans l'arriéré) Il y a quelque temps, j'ai expliqué comment utiliser rcm pour la gestion de configuration normale. Nous avons un module marionnette dans notre entreprise qui distribue les paramètres personnels de l'utilisateur à tous les hôtes auxquels il a accès. En conséquence, je veux ce qui suit:


  • J'ai mes propres paramètres pour tout ce que j'utilise (vim, zsh, git, etc.)
  • Mettez-les à jour lors de leur mise à jour dans le référentiel dotfiles
  • Tout cela - sans gestes inutiles

Les outils


Tout ce dont j'ai besoin est déjà utilisé par moi, à savoir:


  • rcm
  • git
  • goudron

Le format utilisé pour déployer des fichiers sur des hôtes


Il n'y a rien de délicat ici: nous déployons des tarballs en déballant leur contenu sur les hôtes. Seuls les fichiers et répertoires d'une liste spécifique sont gérés, broyant complètement chaque couronne à chaque déploiement. Par conséquent, si l'archive tar a changé, tout dans la liste $HOME est effacé. Sinon, le contenu de $ HOME reste inchangé. Un script distinct est chargé de (re) compresser le dossier avec les fichiers source des fichiers personnels; cela semble assez banal:


 #!/bin/bash -e # Repack each personal directory into a tarball, use gtar on mac/*BSD and tar on linux TAR=$(command -v gtar tar | head -1) cd "$(dirname "$0")" for file in *; do if [ -d "${file}" ]; then printf '\033[0;32mArchiving of \033[1;33m%s\033[0m\n' "$file" # to avoid differences in an archive because of different mtime # hard coded 2003-01-01 CET XZ_OPT=-e9 $TAR --mtime="@1041375600" -cJf "${file}.tar.xz" "${file}" fi done 

Comment créer un nouveau tarball de commit ball


Déployer des fichiers dot pas dans $ HOME


Comme j'ai déjà un outil avec lequel je déploie des configurations sur différents hôtes, je vais évidemment l'utiliser. Il vous suffit de réparer quelque chose et de faire rcm copier les fichiers là où je dois. Cependant, rcm définit toujours les fichiers de points dans $ HOME, il n'y a aucun argument de ligne de commande pour changer ce comportement.


Après quelques expériences et sélection de la source, j'ai réalisé que vous pouvez directement changer $ HOME, puis le comportement des utilitaires de toutes les commandes rcm changera comme suit: chacun des utilitaires lsrc, mkrc, rcdn, rsup lira ${HOME}/.rcrc et utilisera ${HOME}/.dotfiles par défaut. En conséquence, il suffit de créer le même ${HOME}/.rcrc avec tous les paramètres nécessaires.


Le moyen le plus simple est de faire un "vide" du dossier de départ et de le remplir à partir de zéro à chaque validation. Un exemple de son apparence peut être vu dans le référentiel . Ce dossier est ignoré sur tous les hôtes sans la balise personnelle ; en conséquence, il n'interférera pas avec la configuration principale. Un seul fichier .rcrc contient tous les paramètres de la logique de copie des fichiers, je ne ferai que quelques remarques:


  • Sans $SYMLINK_DIRS rcup fonctionne désespérément longtemps, créant une liste complète des fichiers à copier. Avec cette option, avec $COPY_ALWAYS utilitaire copie simplement le dossier entier en tant que cp -r sans problème inutile
  • Évidemment, beaucoup n'est pas nécessaire sur les serveurs distants, tout cela est répertorié dans $EXCLUDES (à l'exception des plugins vim, ils doivent être supprimés dans le crochet car $SYMLINK_DIRS )
  • Étant donné que ${HOME}/.dotfiles cesse de fonctionner pour des raisons évidentes, vous devez également remplacer $DOTFILES_DIRS

C’est tout. Vous pouvez maintenant copier le dossier tag personnel n'importe où, remplacer ${HOME} pendant un certain temps et exécuter rcup


 WORK_DIR="${HOME}/.dotfiles/tag-personal" _OLD_HOME=$HOME HOME="${HOME}/some/long/custom/path" cp -r "${WORK_DIR}" "${HOME}" rcup -v HOME=$_OLD_HOME 

Ouah! Mais je veux autre chose ...


Nous automatisons le "déploiement" des configs sur $ HOME personnalisé


Faire ce "quelque chose" est facile, git à ce stade vous aidera avec ses crochets. Il existe un fichier exécutable .git/hooks/post-commit contenu suivant:


 #!/bin/sh set -e WORK_DIR="tag-personal" HOME="${HOME}/some/long/custom/path/final_directory/USERNAME" # Some unnecessary and very heavy plugins EXCLUDED_VIM_PLUGINS='YouCompleteMe vimtex' rm -rf "${HOME}" cp -r "${WORK_DIR}" "${HOME}" rcdn -v rcup -v for plugin in ${EXCLUDED_VIM_PLUGINS}; do rm -rf "${HOME}/.vim/plugged/${plugin}" done # cleanup for .git dirs, compiled py and pictures find "${HOME}" \( \ \( -type d -iname '.git' \) -o \ \( -type f \ \( -iname '*.pyc' -o -iname '*.gif' -o -iname '*.png' \) \ \) \ \) -exec rm -rf {} + # final repack for files "${HOME}/../repack.sh" 

Maintenant, après chaque validation dans le référentiel avec des fichiers dot, ce script sera lancé.


Tout, après cela, il reste à faire un commit + push vers le référentiel avec des données personnelles et attendre que la magie de l'automatisation mette mes configs vers des hôtes actifs.


Pourquoi compliquer des choses comme ça?


Le fait est que même si la société ne disposait d'aucun outil pour déployer une configuration personnelle sur les hôtes, un tel kit n'était pas nécessaire. Mais dès que l'occasion se présente, l'appétit croît instantanément. Certains de mes collègues étaient satisfaits d'avoir apporté trois fichiers aux hôtes, par exemple .vimrc .bashrc .gitconfig . Cependant, pendant longtemps, j'avais affûté, corrigé et poli avec amour un ensemble complet d'outils divers. Seul le ~/.vim après l'installation de tous les plugins pèse 427 Mo (oui, 218 d'entre eux sont YCM, et je ne le fais pas glisser vers les serveurs, et après le nettoyage et l'emballage, il perd du poids jusqu'à 3 Mo).


Probablement, quelqu'un pensera que c'est en quelque sorte trop et aurait pu être fait avec les mains. Peut-être que tout le monde ne sera pas d'accord avec cela.


J'espère que quelqu'un d'autre a un besoin presque physique de se sentir à l'aise sur les postes de travail, presque à la maison, et que les outils le lui permettent. Utilisez votre santé et que l'automatisation soit avec nous!

Source: https://habr.com/ru/post/fr435706/


All Articles