Development #21756
Development #21725: Faciliter la personnalisation des variables de configurations
Playbook pour une installation dans un conteneur
0%
Description
Rajouter une option pour lancer le playbook install et config dans un container (et le créer)
Fichiers
Révisions associées
a playbook for setting up a container (#21756)
decouple getting sources from installation and allow remote execution (#21756)
a playbook for setting up a container (#21756)
Historique
Mis à jour par Christophe Siraut il y a environ 6 ans
Je m'occupe de proposer une doc sur l'utilisation de publik-devinst sur nspawn cette semaine.
Il y a une petite difficulté avec le téléchargement des dépots git qui requiert la clé ssh du développeur qu'on a pas envie de copier dans le conteneur. Je proposerais de garder les dépots (et les branches locales) sur la machine hôte, et de les "binder" dans le conteneur. (man systemd-nspawn /--bind)
Mis à jour par Christophe Siraut il y a environ 6 ans
- Statut changé de Nouveau à En cours
Poussé un paquet "dspawn" dans nos dépôts jessie, à partir de ce que j'utilise en prod et en local pour gérer nos conteneurs. Je dois encore faire la doc pour l'utiliser avec publik-devinst. En gros ça fait debootstrap là où systemd-nspawn est content, et ça règle un tas de petits ajustements.
Description: systemd-nspawn container manager an alternative to machinectl aimed at debootstrap compatible distributions, with many features: authorizes ssh keys in container, caches deboostrap models for fast container creations, various network configurations, uses apt-cacher-ng if available, and more.
$ dspawn --help usage: dspawn [-h] [-r {stable,jessie,stretch,buster}] [-a x.x.y.z] [-m {zone,bridge,private}] [-c MACADDRESS] {create,config,list,list-images,start,stop,show,shell,remove,login,enable,disable,kill,reboot} [name [name ...]] manage nspawn containers with debootstrap and caching positional arguments: {create,config,list,list-images,start,stop,show,shell,remove,login,enable,disable,kill,reboot} which task shall we perform? name container name(s) optional arguments: -h, --help show this help message and exit -r {stable,jessie,stretch,buster}, --release {stable,jessie,stretch,buster} which release model shall we use; default: stable -a x.x.y.z, --address x.x.y.z static ip address -m {zone,bridge,private}, --mode {zone,bridge,private} configure nspawn network; default: containers in a common zone -c MACADDRESS, --macaddress MACADDRESS specify container mac address
Mis à jour par Christophe Siraut il y a environ 6 ans
Paquet dspawn dispo dans les dépots jessie/stretch; il me reste à faire des tests et une doc pour l'utiliser avec publik-devinst; semaine prochaine.
De façon plus immédiate et sans dspawn:
ssh debootstrap jessie /var/lib/machines/publik.test http://deb.debian.org/debian/ machinectl start publik.test ssh root@publik.test apt-get install ansible; ansible-playbook -i inventory.yml -K -e user=$(whoami) install.yml
Mis à jour par Christophe Siraut il y a environ 6 ans
- Fichier 0001-install.yaml-allow-execution-on-any-host.patch ajouté
- Fichier 0002-copy-varibles-from-inventory-to-group_vars-for-provi.patch ajouté
- Fichier 0003-bootstrap.yaml-is-a-playbook-for-preparing-a-remote-.patch ajouté
- Fichier 0004-group_vars-use-user-publik-by-default-on-remote-host.patch ajouté
- Patch proposed changé de Non à Oui
Une série de patch pour permettre d'exécuter p-devinst sur une machine distante, par exemple un conteneur:
dspawn -c devinstfoo ansible-playbook -i root@devinstfoo, bootstrap.yaml ansible-playbook -i root@devinstfoo, install.yml
(c'est encore en chantier, je vous préviens quand c'est fonctionnel et validé)
Mis à jour par Emmanuel Cazenave il y a environ 6 ans
Par curiosité, quel est ton cas d'usage ?
Faire du dev sur publik dans un container sur ta machine ?
Mis à jour par Christophe Siraut il y a environ 6 ans
Faire du dev sur publik dans un container sur ta machine ?
Oui c'est l'idée première, qui ne fonctionne pas en l'état parce que les
dépots git devraient être partagés depuis la machine hôte. L'autre idée
lointaine est de construire des images à distribuer.
Mis à jour par Emmanuel Cazenave il y a environ 6 ans
Tu veux que les dépôts git soient sur ta machine hôte et tout le reste dans le container c'est ça ?
Le partage répertoire semble possible : https://github.com/systemd/systemd/issues/899
Mis à jour par Christophe Siraut il y a environ 6 ans
Le partage répertoire semble possible : https://github.com/systemd/systemd/issues/899
oui c'est ce qu'on fait sur les saas aussi: les hyperviseurs montent
les partages ceph, ensuite ils fournissent des 'bind' aux conteneurs
(via le flag -b/--bind de dspawn).
Mis à jour par Christophe Siraut il y a environ 6 ans
- Fichier
0001-install.yaml-allow-execution-on-any-host.patchsupprimé
Mis à jour par Christophe Siraut il y a environ 6 ans
- Fichier
0002-copy-varibles-from-inventory-to-group_vars-for-provi.patchsupprimé
Mis à jour par Christophe Siraut il y a environ 6 ans
- Fichier
0003-bootstrap.yaml-is-a-playbook-for-preparing-a-remote-.patchsupprimé
Mis à jour par Christophe Siraut il y a environ 6 ans
- Fichier
0004-group_vars-use-user-publik-by-default-on-remote-host.patchsupprimé
Mis à jour par Christophe Siraut il y a environ 6 ans
Voici une série de patch pour permettre d'utiliser devinst sur une machine distante, je veux bien une relecture.
Voici ma procédure actuelle, je la rajouterai dans le wiki.
sudo dspawn -p -a 10.0.0.100 -b ~/src create dev.publik ansible-playbook -i root@dev.publik, -e git_ssh=true bootstrap.yaml ansible-playbook -i dev.publik, install.yml eotasks pki.push-local-publik dev.publik ansible-playbook -i dev.publik, deploy-tenants.yml echo "10.0.0.100 dev-hobo.local.publik agent-combo.local.publik user-combo.local.publik demarches-wcs.local.publik connexion-authentic.local.publik" | sudo tee -a /etc/hosts x-www-browser dev.publik
Mis à jour par Christophe Siraut il y a environ 6 ans
- Fichier 0001-misc-allow-execution-on-any-host.patch 0001-misc-allow-execution-on-any-host.patch ajouté
- Fichier 0002-copy-varibles-from-inventory-to-group_vars-for-provi.patch 0002-copy-varibles-from-inventory-to-group_vars-for-provi.patch ajouté
- Fichier 0003-bootstrap.yaml-is-a-playbook-for-preparing-a-remote-.patch 0003-bootstrap.yaml-is-a-playbook-for-preparing-a-remote-.patch ajouté
- Fichier 0004-deploy-tenants-place-tmp-in-src-folder-to-enable-cop.patch 0004-deploy-tenants-place-tmp-in-src-folder-to-enable-cop.patch ajouté
- Fichier 0005-bootstrap-clone-repositories-locally-when-git_ssh-is.patch 0005-bootstrap-clone-repositories-locally-when-git_ssh-is.patch ajouté
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
Est-ce que tu aurais poussé une branche wip, que je puisse tout voir d'un coup ?
Mis à jour par Christophe Siraut il y a presque 6 ans
Est-ce que tu aurais poussé une branche wip, que je puisse tout voir d'un coup ?
je viens de pousser la branche containers, contient également le patch pour #23086.
Mis à jour par Emmanuel Cazenave il y a presque 6 ans
Il manque les inventaires root@dev.publik et dev.publik pour que je puisse vraiment essayer.
bootstrap.yml refait des choses que fait déjà install.yml (installation de python, git , postgres, cloner les sources),
est-ce qu'il serait pas plus simple de mettre dans bootstrap.yml juste ce qu'il faut pour créer un container qui soit en état d'exécuter
install.yml et deploy-tenant.yml (éventuellement depuis le container plutôt que depuis l’hôte si c'est plus simple) ?
Juste une ideé, mais comme ça ou autrement, il faut qu'on trouve une solution pour avoir moins d'entrelacement entre bootstrap et install, ils se marchent un peu sur les pieds là.
Déplacer l'essentiel des variables de l'inventaire à group_vars/all ça me plait, j'avais essayé là #21725 sans succès, il faudrait le faire à part dans #21725 plutôt que noyé dans nos histoires de containers.
J'ai pas compris les bidouilles avec tmp_dir
que tu fais passer dans src_dir
.
On pourrait se faire un petit sprint sur tout ça, ce serait sympa.
Mis à jour par Christophe Siraut il y a presque 6 ans
- Tâche parente mis à #21725
Emmanuel Cazenave a écrit :
Il manque les inventaires root@dev.publik et dev.publik pour que je puisse vraiment essayer.
Ces noms d'hôtes ne sont pas définis dans un inventaire, note la virgule ',' dans les commandes de: https://dev.entrouvert.org/issues/21756#note-14
bootstrap.yml refait des choses que fait déjà install.yml (installation de python, git , postgres, cloner les sources),
est-ce qu'il serait pas plus simple de mettre dans bootstrap.yml juste ce qu'il faut pour créer un container qui soit en état d'exécuter
install.yml et deploy-tenant.yml (éventuellement depuis le container plutôt que depuis l’hôte si c'est plus simple) ?
Je d'accord de ne pas dupliquer ces opérations, mais je ne vois pas où tu installe postgresql, git et python. Pour le clonage je pense que mon souci était que certaines opérations sont à réaliser sur la machine hôte et d'autres dans le conteneur. Du coup je vais probablement sortir quelques opérations de install.yml.
Juste une ideé, mais comme ça ou autrement, il faut qu'on trouve une solution pour avoir moins d'entrelacement entre bootstrap et install, ils se marchent un peu sur les pieds là.
yep, je regarde ça
Déplacer l'essentiel des variables de l'inventaire à group_vars/all ça me plait, j'avais essayé là #21725 sans succès, il faudrait le faire à part dans #21725 plutôt que noyé dans nos histoires de containers.
ajouté le patch dans ce ticket.
J'ai pas compris les bidouilles avec
tmp_dir
que tu fais passer danssrc_dir
.
c'est du hack pas assez documenté: le module ansible copy change de comportement selon qu'on est dans un mode local ou remote;
lors d'une utilisation de devinst sur conteneur, on est content de garder les dépôts des sources en local, et de les monter dans le conteneur,
du coup pour que la compilation (locale) de wcs_skeleton_filename soit copiéé (via le module ansible copy) dans le conteneur, je place ce dossier dans le dossier monté des 2 cotés (src_dir):
tmp_dir: "{{src_dir}}/tmp"
On pourrait se faire un petit sprint sur tout ça, ce serait sympa.
ouaip
Mis à jour par Christophe Siraut il y a plus de 5 ans
- Fichier 0003-a-playbook-for-setting-up-a-container-21756.patch 0003-a-playbook-for-setting-up-a-container-21756.patch ajouté
- Fichier 0002-decouple-getting-sources-from-installation-and-allow.patch 0002-decouple-getting-sources-from-installation-and-allow.patch ajouté
- Statut changé de En cours à Solution proposée
Les 2 patches attachés permettent comme discuté quand on s'était vu:
- de séparer les opérations locales de collecte des sources de l'installation proprement dite
- de réaliser ces opérations sur des machines différentes:
- télécharger les sources en local (afin de bénéficier de la configuration SSH)
- construire un conteneur et y exécuter l’installation des composants
Depuis la branche #containers les commandes suivantes réalisent l'installation complète:
ansible-playbook -i inventory.yml -e target=dev.publik container.yml ansible-playbook -i inventory.yml -e target=dev.publik install.yml ansible-playbook -i inventory.yml -e target=dev.publik deploy-tenants.yml
(des parties pourraient probablement être réorganisées entre playbook et roles; j'ai tenté de faire un minimum de changements dans un premier temps)
Mis à jour par Anonyme il y a plus de 5 ans
Christophe Siraut a écrit :
Les 2 patches attachés permettent comme discuté quand on s'était vu:
Trop cool, j'aimerais bien tester : donc je dois prendre les patchs ici https://dev.entrouvert.org/issues/21756#note-15 et remplacer 0002 et 0003 par ceux là ?
Mis à jour par Christophe Siraut il y a plus de 5 ans
comme je disais, juste depuis la branche #containers exécuter les 3 commandes ci-dessus.
Mis à jour par Christophe Siraut il y a plus de 5 ans
- Statut changé de Solution proposée à Rejeté
Après réflexion je me dis que j'ai pris le problème à l'envers : plutôt que complexifier devinst avec de l'exécution à distance il suffit d'appeler devinst depuis un conteneur, hop problème résolu.
decouple getting sources from installation and allow remote execution (#21756)