Projet

Général

Profil

Development #21756

Development #21725: Faciliter la personnalisation des variables de configurations

Playbook pour une installation dans un conteneur

Ajouté par Anonyme il y a environ 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
09 février 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Rajouter une option pour lancer le playbook install et config dans un container (et le créer)


Fichiers

Révisions associées

Révision 2d8b9147 (diff)
Ajouté par Christophe Siraut il y a plus de 5 ans

decouple getting sources from installation and allow remote execution (#21756)

Révision 2dc1b4ce (diff)
Ajouté par Christophe Siraut il y a plus de 5 ans

a playbook for setting up a container (#21756)

Révision 1aa37728 (diff)
Ajouté par Christophe Siraut il y a plus de 5 ans

decouple getting sources from installation and allow remote execution (#21756)

Révision f8edaafd (diff)
Ajouté par Christophe Siraut il y a plus de 5 ans

a playbook for setting up a container (#21756)

Historique

#1

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)

#2

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
#3

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
#4

Mis à jour par Christophe Siraut il y a environ 6 ans

corrigé une coquille.

#5

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

#6

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 ?

#7

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.

#8

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

#9

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

#10

Mis à jour par Christophe Siraut il y a environ 6 ans

  • Fichier 0001-install.yaml-allow-execution-on-any-host.patch supprimé
#11

Mis à jour par Christophe Siraut il y a environ 6 ans

  • Fichier 0002-copy-varibles-from-inventory-to-group_vars-for-provi.patch supprimé
#12

Mis à jour par Christophe Siraut il y a environ 6 ans

  • Fichier 0003-bootstrap.yaml-is-a-playbook-for-preparing-a-remote-.patch supprimé
#13

Mis à jour par Christophe Siraut il y a environ 6 ans

  • Fichier 0004-group_vars-use-user-publik-by-default-on-remote-host.patch supprimé
#14

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
#16

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 ?

#17

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.

#18

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

Il manque les inventaires 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.

#19

Mis à jour par Christophe Siraut il y a presque 6 ans

  • Tâche parente mis à #21725

Emmanuel Cazenave a écrit :

Il manque les inventaires 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 dans src_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

#20

Mis à jour par Christophe Siraut il y a plus de 5 ans

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)

#21

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à ?

#22

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.

#23

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.

Formats disponibles : Atom PDF