Ansible

ANSIBLE Voxaly

Gestion de configurations outils et produits VOXALY [1.6.2]

Contenu

Ce dépôt contient les différents playbooks et roles ansible utilisés pour configurer les vms applicatives et outils VOXALY. Ces playbooks sont utilisés pour mettre en place les différents outils et applications sur les 2 hébergeurs OVH (Public Cloud OpenStack) et DocaCloud (OpenStack DocaPoste).

Branching model

  • master: branche stable, contient la dernière version des configurations testées et fonctionnelles. Tout merge sur cette branche doit être fait via une pull request approuvée par le mainteneur principal du dépôt. Cette branche est déployée sur le serveur ansible de production.
  • develop: branche de développement stable, contient les dernières évolutions ou correctifs à apporter sur le code ansible. Seules les évolutions/correctifs fonctionnels doivent être mergés dans cette branche, via des pull requests. Cette branche est déployée sur le serveur ansible de recette.
  • feature/[ref_fiche_redmine]: branche de travail pour la fiche redmine de référence correspondante, pas forcément stable et/ou testée. Est mergée dans la branche principale de développement develop. Ces branches sont à déployer dans dossier dédié sur le serveur ansible de recette pour des tests.

Documentation

Une partie des roles contient sa propre documentation ainsi que des exemple de playbook voire d’inventaire, dans le sous dossier roles/<NOM_ROLE>/doc

Exemple pour le role visiovote: la doc principale du role est dans: roles/visiovote/doc/visiovote.rst. Voici ce qu’on peut retrouver dans un dossier de doc:

.
├── inventory_examples
│   ├── visiovote_all-in-one.ini
│   ├── visiovote-poc-splitted-front-domaine-overrided.ini
│   └── visiovote_splitted-middlewares.ini
├── playbook_examples
│   └── vmvisiovote.yml
└── visiovote.rst

Serveurs ansible

Déploiement du code ansible

OVH

Les playbooks, inventories, roles, credentials etc sont déployés dans le dossier /vagrant/ansible/.

DOCACLOUD

Les playbooks, inventories, roles, credentials etc sont déployés dans le dossier /ansible/.

Informations chiffrées utilisées par les différents playbooks

Le vault ansible/group_vars/vault.yml contient différents identifiants utilisés par les rôles syslog, backupsHost etc. Son déchiffrement est automatique lors des exécutions et ne nécessaite pas de fournir de mot de passe à l’exécution, le déchiffrement est automatisé via le référencement du fichier de passphrase dans la configuration ansible. locale ansible.cfg.

Dépendances et livrables utilisés par les playbooks

Les dépendances (drivers…), certificats, clés de chiffrement et livrables déployés par les playbooks sont stockés en local dans un répertoire /data/ :

/data/
├── ansible_backup
│   ├── ...
│   └── ansible.old.2021-08-25.tgz
├── certs
│   ├── visiovote.com
│   ├── votes.voxaly.com
│   └── voxintime.com
├── dump
│   ├── poc-saturne-new
│   ├── survox-johan-10
│   ├── vm-actionnariat
│   └── voxaly-test-ubuntu
├── gpg
│   ├── pass.txt
│   └── voxaly-pubkey.asc
├── jar
│   ├── commons-dbcp2-2.5.0.jar
│   ├── commons-dbcp2-2.8.0.jar
│   ├── postgresql-42.2.23.jar
│   └── postgresql-42.2.5.jar
├── rundeck_backup
│   ├── ...
│   └── 2021-08-22-Rundeck-all.yml
├── scripts
│   ├── scellements_4.8.zip
│   ├── scellements_4.9.1.zip
│   ├── scellements_4.9.2.zip
│   ├── scellements_4.9.zip
│   └── scellements_meae.zip
├── third_party
│   ├── elFinder-2.1.59.zip
│   └── elFinder-2.1.60.zip
├── voxaly_packages
│   ├── ...
│   └── libapache2-mod-proxy-uwsgi_2.4.46-1ubuntu1_amd64.deb
├── warArchive
├── warListeArchive
│   ├── 20190907_0000_RECETTE.csv
├── warpic
├── warvisiovote
│   ├── ...
│   └── visiovote-app-recette-4.2.0.war
└── warvoxcore
    ├── ...
    ├── vote-melino-web-client-15.7.2-prodovh-r65921.war
    └── vote-melino-web-client-17.4.2-prodovh-r7b026742701808592872754714bd28afe2451dec.war

Synchronisation du code ansible avec un serveur ansible

Prérequis: avoir mis à jour (via git push <REMOTE>) le repo bare:
/home/admin_voxaly/repos_git/Saturne-deploiement.git/

./synchro-from-git.sh recette
# OU
./synchro-from-git.sh prod

Exemple de début d’exécution:

$ ./synchro-from-git.sh recette

# Setup all vars needed
Do you want to set 'ansible_fs_path' to '/ansible' (N/y) ? (default value is '/vagrant/ansible') ?

# DEBUG
Value for cur_date is 2022-05-27
Value for ansible_env is recette
Value for git_env is develop
Value for ansible_fs_path is /vagrant/ansible
Value for ansible_git_path is /home/admin_voxaly/ansible-git_for-synchro
Value for ansible_bck_path is /data/ansible_backup
Value for ansible_bck_name is /data/ansible_backup/ansible.old.2022-05-27.tgz

Press <Enter> to pass to the next step

OVH : exemples d’exécutions de playbooks

Création d’hôtes Saturne

# legacy: voxcore 15.7.2, postgres 9.6, openjdk8, tomcat7, scellements 4.8 on Ubuntu 16.04
ansible-playbook vmsaturne.yml -i hosts/saturne/test-saturne-ubxx.ini -e prefixe=test-saturne-ubxx -e domaine=voxintime.com -e type_operation=saturne -e warname=vote-melino-web-client-15.7.2-prodovh-r65921.war  -e java_version=8 -e tomcat_version=7 -e tomcat_user=tomcat7 -e tomcat_group=tomcat7 -e postgresql_version=9.6 -e sealing_scripts_version=4.8

# A jour: voxcore 17.4.8, postgres 13, adoptopenjdk11, tomcat9, scellements 4.9.2 on Ubuntu 20.04
ansible-playbook vmsaturne.yml -i hosts/saturne/test-saturne-ubff.ini -e prefixe=test-saturne-ubff -e domaine=voxintime.com -e type_operation=saturne -e warname=vote-melino-web-client-17.4.2-prodovh-r7b026742701808592872754714bd28afe2451dec.war

# Si besoin de faire du débug sans toucher au fichier de conf officiel, ajouter en début de commande
ANSIBLE_CONFIG="/vagrant/ansible/ansible.FOR-DEBUG.cfg"
# ex:
ANSIBLE_CONFIG="/vagrant/ansible/ansible.FOR-DEBUG.cfg" ansible-playbook -i hosts/saturne/up.ini /vagrant/ansible/vmsaturne.yml -e prefixe=up -e warname=vote-melino-web-client-17.4.8-prodovh-r407ee62cb6f8eae9e80da180e41fd23350ce6548.war -e java_version=11 -e domaine=voxintime.com -e type_operation=saturne
# Pour ensuite relancer de manière à ce que Survox reprenne la suite
# relancer la commande ansible avec '--start-at-task "saturne : End"'
# et sans le ANSIBLE_CONFIG, ex:
ansible-playbook -i hosts/saturne/up.ini /vagrant/ansible/vmsaturne.yml -e prefixe=up -e warname=vote-melino-web-client-17.4.8-prodovh-r407ee62cb6f8eae9e80da180e41fd23350ce6548.war -e java_version=11 -e domaine=voxintime.com -e type_operation=saturne --start-at-task "saturne : End"

Restauration d’hôtes Saturne à partir des backups

# legacy: voxcore 15.7.2, postgres 9.6, openjdk8, tomcat7, scellements 4.8 on Ubuntu 16.04
ansible-playbook -i hosts/saturne/<host>.ini restoreSaturne.yml -e tomcat_service=tomcat7

# A jour: voxcore 17.4.2, postgres 13, adoptopenjdk11, tomcat9, scellements 4.9.2 on Ubuntu 20.04
ansible-playbook -i hosts/saturne/<host>.ini restoreSaturne.yml

Suppression d’hôtes Saturne

ansible-playbook -i hosts/saturne/test-saturne-ubff.ini delsaturne.yml -e prefixe=test-saturne-ubff

Si la VM est déjà supprimée dans OVH, il est possible de faire la suppression de la surveillance et de quelques autres fichiers en lancant:

ansible-playbook -i hosts/saturne/test-saturne-ubff.ini delsaturne-minimal.yml -e prefixe=test-saturne-ubff

Création d’hôte VisioVote

ansible-playbook -i hosts/visiovote-demo.ini vmvisiovote.yml -e warname=visiovote-app-demo-4.0.0.1.war

Déploiement de war (Saturne ou Visiovote)

# Saturne (legacy v15)
ansible-playbook deploiementwar.yml -i hosts/saturne/saturne-pocmch.ini -e warname=vote-melino-web-client-15.7.2-prodovh-r65921.war -e tomcat_version=7

# Saturne (v17+)
ansible-playbook deploiementwar.yml -i hosts/saturne/blancheneige1.ini -e warname=vote-melino-web-client-17.4.1-SNAPSHOT-prodovh-r693d11ee9c9bb3394bd28d535aeb57b35366d6e5.war

# Visiovote
ansible-playbook deploiementwar.yml -i hosts/saturne/visiovote-poc.ini -e warname=visiovote-app-recette-3.2.0.1.war -e war_folder=/data/warvisiovote

Intégration continue: création d’environnements CICD

⚠ Playbook à exécuter en tant qu’admin_voxaly.
⚠ Playbook compatible avec une version voxcore > ou = à 16.

L’installation consiste à déployer 3 conteneurs par environnement (tomcat, postgresql et pgadmin)

Les urls d’accès sont de la forme:

  • https://voxcore399.recette-bo.voxaly.com
  • https://voxcore399.recette-bo.voxaly.com/pgadmin

Les fichiers inventaires des 3 environnements de CICD

  • hosts/cicd/cicd-client.ini
  • hosts/cicd/cicd-produit.ini
  • hosts/cicd/cicd-recette-bo.ini

L’option init_bdd= true ou false permet de réinitialiser ou non le conteneur postgresl

ansible-playbook -i hosts/cicd/cicd-recette-bo.ini -e env_suffix=399 -e war_path=/data/warpic/vote-melino-web-client-17.4-FPE2022-7.1-Minju-5.0-SNAPSHOT-recette-rfcf4fc35dc6d1c116707c407a684e0f46ed3bd5e.war -e domain=.recette-bo.voxaly.com -e init_bdd=true cicd_create_env.yml
ansible-playbook -i hosts/cicd/cicd-recette-bo.ini -e env_suffix=399 -e war_path=/data/warpic/vote-melino-web-client-17.4-FPE2022-7.1-Minju-5.0-SNAPSHOT-recette-rfcf4fc35dc6d1c116707c407a684e0f46ed3bd5e.war -e domain=.recette-bo.voxaly.com -e init_bdd=false cicd_create_env.yml

Intégration continue: suppression d’environnements CICD

⚠ Playbook à exécuter en tant qu’admin_voxaly.

ansible-playbook -i hosts/cicd/cicd-recette-bo.ini -e env_suffix=399 cicd_delete_env.yml

Création de l’hôte de stockage des backups

ansible-playbook -i hosts/voxaly-backups.ini backupsHost.yml

Création de l’hôte de stockage des logs

ansible-playbook -i hosts/syslog.ini vmsyslog.yml

Création de dump PostgreSQL (Saturne ou Visiovote)

ansible-playbook generedump.yml -i hosts/visiovote-demo.ini

Récupération de logs, dumps ou archives (Saturne ou Visiovote)

# Visiovote (same for saturne v17+)
ansible-playbook recupdernierdump.yml -i hosts/visiovote-recette.ini
ansible-playbook recupLogs.yml -i hosts/visiovote-recette.ini
ansible-playbook archivage.yml -i hosts/visiovote-recette.ini

# Saturne v15 (legacy)
ansible-playbook recupdernierdump.yml -i hosts/saturne/recette-blancheneigesaturne3.ini
ansible-playbook recupLogs.yml -i hosts/saturne/recette-blancheneigesaturne3.ini -e tomcat_version=7
ansible-playbook archivage.yml -i hosts/saturne/recette-blancheneigesaturne3.ini -e tomcat_version=7

DOCACLOUD : exemples d’exécutions de playbooks

⚠ Tous les playbooks sont à exécuter avec l’option docacloud=true pour la mise en place des règles firewall spécifiques à DocaCloud.

Création du serveur ansible

# Configuration de la machine ansible
ansible-playbook -i hosts/adm-dcloud/adm-dcloud-ansible-recette.ini vmansible.yml -e docacloud=true

Création du bastion SSH

# Configuration du bastion, lancer le playbook permet de synchroniser les utilisateurs
ansible-playbook -i hosts/adm-dcloud/adm-dcloud-bastion-recette.ini vmbastion.yml -e docacloud=true

Création des reverse proxies

# Configuration du reverse proxy pour les vms de recette applicative
ansible-playbook -i hosts/adm-dcloud/adm-dcloud-reverse-proxy-recette.ini vmreverseproxy.yml -e docacloud=true -e domaine=recette-voxaly.com

# Configuration du reverse proxy pour les applicatifs d’administration
ansible-playbook -i hosts/adm-dcloud/adm-dcloud-reverse-proxy-tools-recette.ini vmreverseproxy.yml -e docacloud=true -e domaine=recette-voxaly.com

Création du proxy http Squid

# Configuration du proxy http
ansible-playbook -i hosts/adm-dcloud/adm-dcloud-proxy-recette.ini vmproxy.yml -e docacloud=true

Création de machines de recette Voxcore

# A jour: voxcore 17.4.8, postgres 13, adoptopenjdk11, tomcat9, scellements 4.9.2 on Ubuntu 20.04
ansible-playbook vmsaturne.yml -i hosts/vm-dcloud/vm-dcloud-09.ini -e prefixe=vm-dcloud-09 -e domaine=recette-voxaly.com -e type_operation=saturne -e warname=vote-melino-web-client-17.4.8-prodovh-r407ee62cb6f8eae9e80da180e41fd23350ce6548.war -e docacloud=true

Déploiement de war

ansible-playbook deploiementwar.yml -i hosts/vm-dcloud/vm-dcloud-01.ini -e warname=vote-melino-web-client-17.4-FPE2022-5.0-MEFR-3.0-SNAPSHOT-prodovh-r76295470082825171fd68f1aa7847d0a29663e2a.war -e tomcat_version