Outils pour utilisateurs

Outils du site


fr:rapports:2023:05-14

2023/05/14 (atelier) : Ansible

Présences :

  • HgO
  • Célo

Météo

Moment informel durant lequel on exprime en peu de mots comment on se sent et si on a une attente forte pour la réunion. Ce n'est pas un moment de discussion mais d'expression individuelle et ce n'est pas obligatoire 🙂

Attente(s) forte(s)

Si l'une ou l'autre personne exprime une attente forte, merci de vous en occuper en priorité ou de la noter dans le hub ou dans un point approprié.

Fin: 18h max

Pre-commit

On a eu un petit soucis avec pre-commit.

En gros, à chaque fois qu'on va faire un git push, il va essayer de réparer les espaces et les retour à la ligne. Lorsqu'il a modifié des fichiers, il va attendre que l'utilisateur vérifie que tout est correct.

Il faut donc faire un git add des fichiers modifiés, puis git commit et enfin git push.

On peut tester tout ça en lançant pre-commit run --all-files.

On a aussi remarqué qu'il y avait un problème avec la dernière version de ansible-compat (4.0.0). On doit donc régler le problème en modifiant le fichier .pre-commit-config.yaml, où on rajoute dans les dépendances:

ansible-compat~=3.0

Le ~= signifie qu'on veut une version >= 3.0, mais aussi tout ce qui est en 3.* (donc 3.1 serait valide, mais pas 4.0). Voir aussi la doc https://peps.python.org/pep-0440/#compatible-release

On avait eu le même souci avec molecule qui utilise aussi ansible-compat, donc il faut faire un MR avec les deux modifs.

Anciens TODOs

  • Comprendre pourquoi git-secret n'aime pas Célo → ça fonctionne maintenant
  • Déclencher la migration de la db uniquement lorsque la version de Mobilizon a changé
  • Installer la dépendence postgresql pour l'extension postgis. Voir le rôle postgresdb pour les delegateto
  • Voir si avoir un lien symbolique serait pertinent
  • Tester le redémarrage de la VM

Review du playbook Mobilizon

Pour la migration de la db, Célo a créé un handler qui se déclenche au moment du téléchargement de l'archive. Il faut bien faire attention à l'ordre d'exécution des handlers : on veut faire la migration avant le restart, sinon il ne prendra pas en compte les changements dans la db.

L'ordre d'exécution est défini dans le fichier des handlers.

Note: Pour voir les modifications faites par le playbook molecule, on peut faire:

molecule converge -- --diff 

On dit à Ansilbe de redémarrer Mobilizon lorsque la tâche qui copie la config de Mobilizon a changé. Cela se fait au moyen d'un notify: restart mobilizon.

Pour l'installation des extensions PostgreSQL, il faudra voir comment cela se passe sur un cluster. En effet, on ne sait pas s'il faut installer l'extension sur chaque serveur ou pas.

Célo a aussi rajouté un lien symbolique sur /var/www/mobilizon-be/dist. Cela permet d'avoir une config systemd un peu plus propre, et on sait directement quelle est la dernière version installée.

Monitoring

Voir si on peut récupérer des metrics de Mobilizon (bonus)

A priori, Mobilizon ne fournit pas de metrics (on supprime le dossier et la config que Célo a tentée.)

Backups

C'est fait.

On peut tester un backup avec :

/opt/borgmatic/bin/borgmatic create
/opt/borgmatic/bin/borgmatic list
/opt/borgmatic/bin/borgmatic mount --repository ssh://bullseye-mobilizon-molecule/media/data/backups/bullseye-mobilizon-molecule --archive latest --mount-point /mnt/ --config /etc/borgmatic.d/mobilizon-mobilizon-be.yml

On doit spécifier la config borgmatic, sinon il râle car il y a plusieurs configs possibles (mobilizon, système, haproxy, etc.)

Le dump de la db se trouve dans /root/.borgmatic

Quand on a fini, on fait juste umount /mnt

Si on veut spécifier une archive en particulier, il faut faire /opt/borgmatic/bin/borgmatic list puis prendre la valeur dans la première colonne. Par ex : mobilizon-mobilizon-be_bullseye-mobilizon-molecule-2023-05-14T14:53:29

Il y a un timer qui tourne toutes les 3h pour faire un backup: systemctl status borgmatic.timer. On voit quand il a été exécuté, et quand il sera exécuté prochainement. On peut aussi le forcer en faisant: systemctl start borgmatic.

Attention: Il faut bien penser à faire un umount des backups, sinon Borg refusera d'effectuer de nouveau backups.

HAProxy

Configurer Caddy

Dans la config nginx de mobilizon.be, on remarque qu'on a besoin d'un web serveur pour les fichiers javascripts et css. HAProxy n'est pas capable de faire, car il ne fait que reverse proxy.

On va donc mettre un Caddy pour Mobilizon !

On traduit la config nginx de Mobilizon en langage Caddy :

snippet.txt
{{ ansible_managed | comment }}
 
http://{{ mobilizon_domain }} {
    encode gzip zstd
 
    request_body {
        max_size 16MB
    }
 
    @staticfiles {
        path /js/*
        path /css/*
    }
    handle @staticfiles {
        root * /var/www/{{ mobilizon_owner }}/dist/priv/static
        header Cache-Control "public, max-age=31536000, immutable"
        header -ETag
        file_server
    }
 
    @mediafiles {
        path /media/*
        path /proxy/*
    }
    handle @mediafiles {
        header Cache-Control "public, max-age=31536000, immutable"
        header -ETag
        reverse_proxy localhost:4000
    }
 
    handle_errors {
        @5xx expression `{err.status_code} >= 500 && {err.status_code} < 600`
	    handle @5xx {
            root * /var/www/{{ mobilizon_owner }}/dist/priv/errors
            rewrite * /error.html
            file_server
        }
    }
    reverse_proxy localhost:4000 {
{% if mobilizon_trusted_proxies | length > 0 %}
        trusted_proxies {{ mobilizon_trusted_proxies | join(' ') }}
{% endif %}
    }
 
    log {
        output file "{{ caddy_log_dir }}/{{ mobilizon_owner }}.log"
    }
}

Ca ne marche pas en l'état, mais on va tester avec HAProxy.

Configurer HAProxy pour pouvoir tester en local

Le problème c'est que HAProxy écoute sur le port 80, mais Caddy aussi !

On est dans le premier cas où on a besoin de Caddy et d'HAProxy 🙀

On va donc d'abord créer une machine virtuelle dans le cluster Patata pour pouvoir faire nos tests.

Création d'une VM

On a créé la VM mobilizon.patata.louise.neutri.net en suivant : https://wiki.neutrinet.be/fr/infra/notes_sur_infra_de_neutrinet

On a rajouté la machine dans l'IPAM de Neutrinet: https://wiki.neutrinet.be/fr/infra/network/ipam#neutrinet_patata

Et on la rajoute dans le DNS Resolver du Pfsense.

On doit aussi rajouter la VM dans l'inventaire d'Ansible. Dans inventories/production.ini. On la rajoute 2x, une fois dans le groupe patata et une fois dans le groupe mobilizon.

Ensuite, on exécute le playbook commun pour provisionner la machine avec les utilisateurs et clés SSH:

ansible-playbook playbooks/apps/debian_commun.yml -l mobilizon.patata.louise.neutri.net -u root -k  

Le playbook échoue au moment de la suppression du mot de passe pour root, ce qui est normal. On relance le playbook une deuxième fois sans la partie pour root:

ansible-playbook playbooks/apps/debian_commun.yml -l mobilizon.patata.louise.neutri.net

On copie les variables du rôles depuis defaults/main.yml vers inventories/group_vars/mobilizon/vars.yml. Dans ce fichier, on va juste changer les variables qui utilisent des secrets.

On crée un vault avec les différents secrets (mot de passe et secrets pour Mobilizon):

ansible-vault create inventories/group_vars/mobilizon/vault.yml

On rajoute les trusted proxies pour Mobilizon, c'est-à-dire les adresses IP des haproxy.

Puis on essaie de lancer le playbook mobilizon :

ansible-playbook playbooks/apps/mobilizon.yml --check --diff -l mobilizon

Comme on a une erreur avec l'installation des dépendance sur postgresql, on va utiliser ce petit bout de code pour voir si la variable postgresqlpatroniprimary_host prend une valeur. On la place juste avant la tâche “Ajout des extensions nécessaires à postgresql”.

- debug:
    var: postgresql_patroni_primary_host

C'était ok pour Ajout des extensions mais pas pour “Installation de la dépendance postgresql pour postgis” qui était plus haut dans le rôle.

En fait, c'est parce qu'à ce moment, la variable n'est définie que dans le rôle postgres_db, donc on doit d'abord l'importer avant de pouvoir exécuter la tâche Installation de la dépendance postgresql pour postgis.

On a ensuite une erreur parce que mobilizon n'arrive pas à se connecter à la BDD. Pourtant, elle a été crée. En fait, c'est parce que dans la config, Célo a bêtement mis localhost.

  hostname: "localhost",

Il faut mettre:

  hostname: "{{ postgresql_host }}",

On coupe le service Mobilizon, car la migration de la DB ne s'est pas faite, et du coup il ne parvient à s'y connecter. À voir pour plus tard…

TODO:

  • Supprimer la VM et la recréer, pour voir si tous les handlers (notamment la migration de la DB) se déclenchent correctement
  • Installer le paquet postgresql-13-postgis sur tous les serveurs du cluster (variable postgresql_patroni_hosts + boucle), car delegated_to ne peut recevoir qu'un seul
  • Pour le moment, on a postgresql-13-postgis et la version majeure de PostgreSQL est hardcodée, il faudrait définir une variable pour ça, ou réutiliser la variable postgresql_major_version
  • Configurer le HAProxy de Neutrinet

Gopass

  • Explication du password manager
  • Installation et configuration
  • Explication du concept de « password store »
  • Comment récupérer un mot de passe
  • Comment rajouter un nouveau mot de passe
  • Comment modifier un mot de passe
  • Comment supprimer un mot de passe
  • Ajouter et supprimer des personnes

Préparation de la migration de Mobilizon

Pour la prochaine fois !

Prochaine réunion

Prochain atelier Ansible: 18/05

Lieu : Chez Célo (Crainhem)

Météo de fin

Moment informel durant lequel on exprime en peu de mots comment, à titre personnel, la réunion a été vécue que ce soit positif ou négatif. Si une ou plusieurs tension est née durant la réunion, il est peut-être nécessaire d'envisager l'une ou l'autre réunion pour y remédier.

fr/rapports/2023/05-14.txt · Dernière modification : 2023/11/06 14:58 de hgo