un client grand compte • ElasticSearch, LogStash, Oracle, WebLogic, Apache, RabbitMQ, Kafka… • 2 environnements de production : 6 serveurs et 24 serveurs • Au total : 10 environnements, ~ 100 serveurs
demande • Pas d’accès à Internet • Sécurité réseau variable selon les zones (et les serveurs…) • Machines partagées avec d’autres projets • MeP tous les 2 à 3 mois • Délai de recette ~1 mois
du KSH (30 000+ lignes)... • … Qui lit des fichiers XML décrivant les machines et les environnements… • … Qui déploie via SSH les packages de properties... • … Avec un peu de Python aussi (pour WebLogic) • … Pour notre application, mais aussi 6 autres, soit ~ 1200 serveurs !
Puppet, Chef, ... • Adaptabilité aux contraintes infra (OS, firewall, …) • Consultation de la valorisation des variables pour un env. facile Inconvénients : • Packaging applicatif long • Livrables lourds • 1 correction d’une valeur de variable = 1 nouvelle release • Très complexe à comprendre et maintenir • 0 support...
plus légers • Modification d’une valeur d’une variable sans devoir refaire une release • Outil plus facile à comprendre et à utiliser • Support communautaire
Erreur #1 ! • Bascule beaucoup plus longue que prévu • Pas de mise en production pendant la migration (6 mois) • Nombreuses indisponibilités des environnements • Difficultés pour voir l’avancement et ne rien oublier Idées pour faire mieux : • S’efforcer de faire cohabiter l’ancien et le nouveau système • Migrer par petits morceaux bien maîtrisés, jusqu’à la production • Rejouer, rejouer, rejouer
réseau, les 2 OS, les 4 versions d’OS, et le café” → Erreur #2 ! • Rôles et modules “couteau suisse” avec trop de cas • Playbooks complexes Idées pour faire mieux : • Harmoniser au maximum les stratégies de déploiement • Privilégier les rôles / modules / playbooks simples exécutés au besoin • Gérer les cas 1 par 1 jusqu’à la production et complexifier petit à petit ensuite
l’application, gérées par des filtres Maven Après : toutes les variables dans Ansible • Logique de priorité des variables “inversée” entre Maven et Ansible • Beaucoup d’erreurs de refactoring et de recopie Idées pour faire mieux : • Utiliser un outil de comparaison sur les fichiers après remplacement des variables pour contrôler qu’ils sont identiques, sur tous les environnements
mon playbook sans impact” → Bonne idée #1 ! • Garde une procédure de déploiement simple et identique d’une version à l’ autre, qu’elle soit majeure ou mineure Idée pour faire encore mieux : • Rendre les scripts de démarrage des produits (services, etc.) idempotents aussi pour limiter les tests dans les playbooks
un playbook qui ne modifie rien… → c’est trop long ! Idées pour faire mieux • Optimiser les connexions SSH • Optimiser les transferts réseau • Compromis entre vitesse de déploiement et idempotence • Détecter l’inutilité au plus tôt sans prendre de risques au rejeu
A condition de savoir faire du Python et d’en avoir le besoin • Évite les redondances dans les playbooks • Permet de mutualiser du code • Est lisible • Plus puissant que les modules Core seuls Idées pour faire encore mieux • Éviter de multiplier les paramètres en entrée pour qu’ils restent simples à documenter et à utiliser • De la doc, de la doc, et encore de la doc !