Visualiser une révision

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

voxdemonix : révision n°2 (15 novembre 2018 13:00:41)

Introduction
===========

 Nous allons ici comment automatiser simplement la mise à jours de configuration depuis un stockage distant ([webdav](https://fr.wikipedia.org/wiki/Secure_shell_file_system), [sshfs](https://fr.wikipedia.org/wiki/Secure_shell_file_system), etc). Pour se faire, nous allons utiliser un script dédié.

Ce dernier vous permet de ranger vos fichiers de configuration sur votre cloud (montage distant) puis de les ré-injecter via une [tâche planifiée](https://doc.ubuntu-fr.org/cron) ([cron](https://fr.wikipedia.org/wiki/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ée dans la commande de lancement du script. Si non ce dernier les remplacera par une valeur vide. Si vous passez par [SSHFS](https://fr.wikipedia.org/wiki/Secure_shell_file_system), c'est l'utilisateur qui a exporté sa clé sur le serveur.

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](https://fr.wikipedia.org/wiki/Secure_shell_file_system)/davfs, l'utilisateur que vous définissez doit être celui qui dispose des informations nécéssaire dans _/home/$USER/.davfs2/secrets_ afin d'effectuer le montage sans demande de mot de passe.

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 machin

- Par défault (si non défini par l'user), utilise la commande “[hostname](https://fr.wikipedia.org/wiki/Nom_de_domaine)” 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](https://fr.wikipedia.org/wiki/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

- 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 )
```