Tu montes ton dossier host /var/lib/z2m-test dans le container en tant que /var/lib/gladysassistant
Puis tu dis à Gladys de fonctionner avec /var/lib/gladysassistant, ce qu’il fait quand il crée les fichiers de configuration Mosquito et Z2M. C’est d’ailleurs pour cela que tu retrouves bien les fichiers de configuration dans /var/lib/z2m-test dans ton host.
Lorsque Gladys crée les autres containers (Mosquito et Z2M), il utilise la variable SQLITE_FILE_PATH pour monter les volumes. Donc le /var/lib/gladysassistant de ton host… C’est là où ça ne va pas. Je ne sais pas comment détecter que /var/lib/gladysassistant est en fait un montage de /var/lib/z2m-test.
Je te propose d’essayer avec ce fichier docker-compose :
Les fichiers de configuration doivent être écrits par Gladys sur ton host quelque part. J’ai décidé d’utiliser SQLITE_FILE_PATH comme le dossier où écrire ces fichiers. Mais sans penser au cas où tu montes ce dossier depuis un autre path sur ton host.
Mais peut-être qu’il faudrait utiliser une autre variable pour cela ? Genre HOST_PATH_Z2M_FILES ?
Je ne suis pas d’accord, toutes les images que j’ai utilisé jusqu’à maintenant te permette d’utiliser un chemin de persistance différent de chemin officiel.
Le réel problème qu’on a ici c’est de devoir spécifier plusieurs chemin si on utilise un chemin alternatif.
A-t-on vraiment besoin de spécifier un chemin pour la base données, ne peut on pas tout simplement mettre tous les fichiers au sein du conteneur dans un même dossier, ici surement /var/lib/gladysassistant donc fixer la valeur du SQLITE_FILE_PATH (et donc de le supprimer de la config et ensuite simplement demander à l’utilisateur de remplir la valeur PERSISTANCE_FOLDER (par exemple) qui ferait un mapping entre le dossier du conteneur et l’hote ?
La on est dans un cas ou si on veut tester plusieurs images de gladys on doit modifier tous les chemins de la config, le SQLITE_FILE_PATH puis le dossier dans le conteneur et le dossier de mapping sur l’hôte.
Effectivement tout fonctionne bien maintenant, c’est vrai que comme mon message l’indique d’au dessus on soit obligé de changer trois valeurs pour faire ça, mais tous les problèmes sont résolus.
Les deux types d’appareils aquara que j’ai fonctionnent bien, le chemin des fichiers est bien modifié comme il faut et la remontée des infos se fait bien sur le dashboard, bravo pour le taff à tout ceux qui ont bossé sur cette intégration.
Relis moi, j’ai pas dit que techniquement c’était pas possible. J’ai juste dit qu’on ne peut pas exploser toutes les instances de gladys en production. Car faire ce changement ça pète tout.
Exact cas particulier, pas en production. La commande de @cicoub13 marche parfaitement car tous les paths correspondent.
Pourquoi ne pas simplement faire comme l’exposition des ports avec Docker ?
Par exemple, par défaut une application se lance sur le port 3456, mais tu veux exposer le port 80 publiquement, alors tu utilises l’option -p 80:3456.
Pour moi il faut faire pareil dans Gladys : tout est stocké dans le conteneur par défaut dans /var/lib/gladysassistant et la modification du chemin passe par la modification du chemin du conteneur : -v /data/exemple/Gladys:/var/lib/gladysassistant.
@cicoub13 Je viens de tester rapidement sans allez vraiment au bout un petit bout de js avec la lib qu’on utilise.
var Docker = require('dockerode');
var docker = new Docker({socketPath: '/var/run/docker.sock'});
// ICI on peut remplacer gladys par os.hostname
var container = docker.getContainer('gladys');
container.inspect(function (err, data) {
var string = JSON.stringify(data);
var objectValue = JSON.parse(string);
console.log(objectValue['HostConfig']['Binds']);
});
Pas mal. J’aime bien l’idée. Mais comment je récupère le bon ? Vu qu’on peut monter n’importe quel dossier du host et n’importe quel dossier dans docker (avec SQLITE_FILE_PATH).
Et même monter plusieurs dossiers.
J’ai envie de dire le sql c’est la db peut importe.
Gladys dans tout les cas ( pour la partie mqtt et zigbee ) doit écrire sa conf dans /var/lib/gladysassystant , là on est dans le conteneur.
En récupérant le bind côté host on peut s’en servir pour créer les autres conteneurs et gérer la persistance.
Mon précédant post n’est pas le bon exemple car je bind le même path. Mais par exemple si je prends le cas de @Albenss
@VonOx ça me semble bien cette solution Effectivement, ça éviterait de forcer l’utilisateur à mettre ces données dans /var/lib/gladysassistant sur l’host si il n’a pas ce dossier de dispo.
Seule remarque, côté JS il faudra faire tourner la regex avec le basePath et pas /var/lib/gladysassistant, et on sera bon!
A part ça, je suis bon pour merger la PR zigbee2mqtt, j’ai vu ta vidéo @cicoub13 et ça dépote! C’est vraiment du beau boulot rien à redire Congrats à tous ceux qui ont travaillé sur cette PR c’est génial !
En interne ça doit toujours être /var/lib/gladysassistant. ( standard à définir )
Cette variable ( SQLITE_FILE_PATH ) doit être par défaut dans l’image avec ce path.
Là on doit gérer cette variable ( utilisée que pour la db ) et le bind de persistance
Pour la création des conteneurs de service c’est seulement le bind host qui compte , peut importe où est la DB dans le conteneur.
Y’a 2 sujets:
Comment gérer les “datas” gladys dans l’image => /var/lib/gladysassistant en standard
Comment créer des conteneurs de service qui utilise le même bind host path que gladys => la fonction que je propose ( /???/??? bindé sur /var/lib/gladysassistant )