Bonjour,
Le contexte : j’utilise de plus en plus docker (en dehors de Jeedom) et je voulais un moyen simple de savoir si une image plus récente était disponible mais sans rentrer dans quelque chose d’automatique. Je préfère être informé et faire la manipulation par moi même quand je le souhaite. C’est plus sécurisant (un backup avant par exemple), ça évite d’oublier comment ça marche et c’est plus amusant !
J’ai trouvé une image docker qui permet assez rapidement de sortir ce que l’on veut et qui est interrogeable via une API : WUD [ What’s up docker?)
On peut surement faire la même chose avec watchtower mais bref j’ai utilisé WUD histoire d’avoir l’info dans Jeedom, évidemment ![]()
Je ne détaille pas trop et notamment la partie concernant docker puisque je présume que si vous avez du docker vous savez un peu manipuler dessus.
Vous devriez en avoir grosso-modo pour 20 minutes
Au moment d’installer WUD sur votre docker il faudra définir un login/password. Le mot de passe est à indiquer sous la forme d’un hachage MD5 mais il est à transformer (étape 2)
Lorsque WUD est démarré il sera accessible sur le port 3000 : http://ip_docker:3000
Les grandes étapes :
- Générer le mot de passe depuis une machine linux :
openssl passwd -apr1 - Transformer la chaine obtenue en ajoutant le signe $ devant chaque $
Exemple :$gthe$5hQa devient donc $$gthe$$5hQa - Créer votre docker, par exemple depuis une stack Portainer en remplaçant
VOTRE_LOGIN_A_CHANGERpar le login que vous voulez etVOTRE_MOT_DE_PASSE_A_CHANGERpar le mot de passe issue de l’étape précédente
Voici le fichier docker_compose :
services:
whatsupdocker:
image: getwud/wud
container_name: wud
environment:
- WUD_WATCHER_LOCAL_CRON=0 6 * * *
- WUD_AUTH_BASIC_MY_USER=VOTRE_LOGIN_A_CHANGER
- WUD_AUTH_BASIC_MY_HASH=VOTRE_MOT_DE_PASSE_A_CHANGER
ports:
- 3000:3000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Celui-ci fera une vérification à 6h tous les jours
4. Créer un équipement virtuel dans Jeedom avec une commande information / autre que l’on appelera par exemple « updateAvailable »
5. Créer un scénario qui s’éxécute par exemple à 7h tous les jours et avec un bloc code (cliquer sur « Résumé » un peu plus bas pour l’afficher) puis modifier :
5.a $url par l’adresse de votre WUD
5.b $login par ce que vous avez choisi pour VOTRE_LOGIN_A_CHANGER
5.c $password par ce que vous avez choisi pour VOTRE_MOT_DE_PASSE_A_CHANGER
5.d $separateur par le séparateur qui viendra séparer les noms des images dans la commande virtuelle
5.e $commande par le nom complet de la commande virtuelle crée au point 4
Résumé
# Interrogation WUD (What's up Docker?) pour mise à jour d'une commande virtuelle si une nouvelle image docker est disponible
$url = "http://10.0.1.150:3000/api/containers";
$login = 'admin';
$password = 'Bison334';
$separateur = ',';
$commande = '#[Organisation][WUD docker updateAvailable][updateAvailable]#';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$content = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$updateAvailable = '';
if ($httpcode == 200) {
$scenario->setLog('$content : '.$content);
$array = json_decode($content);
if ($array === null) {
echo "Error de décodage JSON";
} else {
foreach ($array as $arr) {
if ($arr->updateAvailable == 1) {
$scenario->setLog($arr->name);
$scenario->setLog($arr->updateAvailable);
$updateAvailable .= $arr->name . $separateur;
}
}
}
} else {
$scenario->setLog('Erreur durant la connexion à WUD : '.$httpcode);
}
if ($updateAvailable != '') {
$updateAvailable = rtrim($updateAvailable,$separateur);
cmd::byString($commande)->event($updateAvailable);
}
- Exploiter la commande virtuelle updateAvailable comme vous voulez pour avertir qu’il y a une nouvelle image de disponible (un scénario qui se lance sur changement de la commande par exemple)
Compléments :
L’adresse de l’outil : WUD
J’ai indiqué en préambule que mon but était uniquement d’être prévenu mais il est tout à fait possible de lancer des mises à jour automatiquement, sur l’ensemble ou juste les images de son choix. Il y a aussi des triggers pour déclencher des alertes mais j’ai trouvé plus simple de passer par l’API pour avoir l’info dans Jeedom
