Wiki [Tuto/HowTo] Automatiser simplement les mises à jours de configurations sur cluster via script bash

0
15
nov.
2018

Sommaire

Testé sur : ubuntu 16.04

Introduction

Nous allons voir ici comment automatiser simplement la mise à jours de configurations depuis un stockage distant (webdav, sshfs, etc). Pour ce job, nous allons utiliser un script bash dédié.

Ce dernier vous permet de ranger vos fichiers de configurations sur votre cloud (montage distant) puis de les ré-injecter via une tâche planifiée (cron).

Le script est capable d'auto-éditer les fichiers de configuration (une fois enregistrés localement) afin d'indiquer l'hostname de la machine ainsi que l'adresse IP sur laquelle il faut écouter.

Pour ce faire, dans un fichier de conf lorsque vous devez indiquer l'hostname de la machine, indiquez 66642myHostname42666 et 66642bind_IP42666 lorsqu'il faut préciser sur quelle adresse IP écouter. Les valeurs de remplacement (l'hostname et l'ip) doivent bien entendu être indiquées dans la commande de lancement du script. Si non ce dernier les remplacera par une valeur par défaut.

Par sécurité, je vous conseil vivement de ne donner accès aux fichiers de conf sur votre stockage distant uniquement en lecture seule.

Adresse du script : https://gitlab.com/voxdemonix/cluster/blob/master/auto-update/updateConf.bash

Sur votre cloud, vous devez avoir une arborescence du type

  • /identifiant/nom_service/vos_fichiers_dossiers

Par exemple :

/ServerOne/apache2/site-enabled/vhost-www.helloworld.com.conf
/ClusterCloud/apache2/site-enabled/vhost-cloud.linuxfr.org.conf

Ce qui donnera comme montage côté client :

/media/mycloud/ServerOne/apache2/site-enabled/vhost-www.helloworld.com.conf
/media/mycloud/ClusterCloud/apache2/site-enabled/vhost-cloud.linuxfr.org.conf

Types de messages :

Le script vous renvoie les types de messages suivant :

  • [FATAL_ERROR] ⇒ erreur ayant provoqué l'arrêt du script
  • [fake-enabled] ⇒ mode fake activé, les messages vous rapportent de fausses actions (debuging).

Configurations qui peuvent être injectées.

Note : pour rappel, le script active automatiquement les “nouvelles” configurations.

Apache2

  • /etc/apache2/site-available/

HaProxy

  • /etc/haproxy/

Network-Manager

  • /etc/hosts

Apache2

Paramètres

-u mon_user --> User local pour le montage [OBLIGATOIRE]

  • Si vous ne définissez pas cette variable, le script utilisera $USER (si vous lancez avec sudo depuis l'utilisateur courant, se sera votre utilisateur, si vous lancez depuis root ou cron en root, se sera donc root). Pour webdav/davfs, l'utilisateur que vous définissez doit être celui qui dispose des informations nécessaire dans /home/$USER/.davfs2/secrets afin d'effectuer le montage sans demande de mot de passe. Si vous passez par SSHFS, c'est l'utilisateur qui a exporté sa clé sur le serveur.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42

-p /media/votre_path --> Path du point de montage [OBLIGATOIRE]

  • Si vous ne définissez pas cette variable ou indiquez un dossier inéxistant, le script se coupera automatiquement.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42

-i mon_cluster --> Identify [OBLIGATOIRE]

  • Défini le dossier principale dans votre point de montage. Dans l'exemple cela signifie que si vous effectuez le montage le dossier attendu sera “/media/votre_path/mon_cluster”

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42

-s apache2 --> Service [OBLIGATOIRE]

  • Défini le sous-dossier dans votre point de montage. Dans l'exemple cela signifie que si vous effectuez le montage le dossier attendu sera “/media/votre_path/mon_cluster/apache2”

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42

-h myMachine.com --> Hostname de la machine

  • Par défault (si non défini par l'user), utilise la commande “hostname” pour récupérer la valeur dans /etc/hostname. Une fois les fichiers de configurations téléchargés localement, ils seront automatiquement édité afin de remplacer 66642myHostname42666 par le nom de domaine que vous avez défini.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42

-b 10.8.42.42 --> Adresse d'écoute (bind)

  • Par défaut 0.0.0.0 (si non défini par l'user). Une fois les fichiers de configurations téléchargés localement, ils seront automatiquement édité afin de remplacer 66642bind_IP42666 par l'ip que vous avez défini.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42

-r true|false --> Purge

  • Si vous activez la purge ( -r true ), les vhosts non présent sur votre cloud seront désactivé puis supprimé.
  • Si la purge est désactivé (par défaut, pas besoin de l'indiquer dans la commande), les vhosts non présent sur le cloud seront quand même ré-activé.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42 -r true

-f true|false—> Fake/Simulate

  • Si vous activez fake ( -f true ), le script simulera sans rien téléchargé ni inscrire ni remplacer. Le point de montage sera monté, les services seront arrêté et redémarré comme en situation réelle. Utile pour tester le bon fonctionnement des points de montage et le redémarrage des services.
  • Si vous n'activez pas fake (par défaut, pas besoin de le mentionner), le script fonctionnera normalement.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42 -f true

-d true|false --> Down

  • Si vous activez down ( -d true ), le service dont la mise à jours de la configuration à échouée pour une raison X ou Y sera coupé.
  • Si vous n'activez pas down (par défaut, pas besoin de le mentionner), le service sera relancé même si la mise à jours de la configuration a échouée.

Exemple :

updateConf.bash -u mon_user -p /media/votre_path -i mon_cluster  -s apache2 -h myMachine.com -b 10.8.42.42 -d true

-a true|false --> Mise à jours automatique du script

  • Par défaut inactivé (false) ; Si vous lancez le script avec l'option -a true, ce dernier va télécharger la dernière version sur gitlab qui va venir remplacer le script en cours de fonctionnement. Par défaut la valeur est vide et n'a pas besoin d'être mentionné sauf pour la passer à true. Si le script est lancé avec cette option, il ne fera que sa propre mise à jours, pas celle des fichiers de configuration.

Exemple :

updateConf.bash -a true

Exemples de commandes.

Avec purge

updateConf.bash -u local_user -p /media/my_cloud -i ServerOne -s apache2 -h ClusterNode1 -r true

Sans purge

updateConf.bash -u local_user -p /media/my_cloud -i ServerOne -s apache2 -h ClusterNode1

Avec purge et down du service en cas d'échec de la mise à jours

Note : Dans cet exemple si le script détecte au moins une erreur, stop ou ne redémarre pas le service. Si tout ce passe bien, le dossier est purgé avant d'injecter les nouveaux fichiers. Pour utiliser cette commande via cron, il est recommandé de la lancer à intervalle régulière. (le script ne se relancera pas seul pour vérifier que le réseau est de nouveau accessible ;) )

updateConf.bash -u local_user -p /media/my_cloud -i ServerOne -s apache2 -h ClusterNode1 -r true -d true

Exemple de cron.

@reboot         ( sleep 75 ; updateConf.bash -u local_user -p /media/my_cloud -i ServerOne -s apache2 -h ClusterNode1 -r true )

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.