Aller au contenu principal

Utilisation des triggers Vagrant

· 6 minutes de lecture
Stéphane ROBERT
Consultant DevOps

Vous le savez Vagrant est l'un des outils que je préfère. Il offre un moyen simple et efficace de créer, configurer et gérer des machines virtuelles pour le développement et les tests. Cependant, même avec la simplicité de Vagrant, il existe souvent des tâches répétitives et des processus qui peuvent être automatisés pour gagner du temps et garantir la cohérence.

C'est là que les "triggers" (déclencheurs) dans Vagrant entrent en jeu. Ces fonctionnalités avancées permettent d'automatiser des actions spécifiques avant ou après certaines étapes du cycle de vie d'une machine virtuelle, offrant ainsi un contrôle accru sur la gestion de vos environnements de développement.

Qu'est-ce qu'un Trigger dans Vagrant ?

Les triggers Vagrant déclenchent des actions prédéfinies à des moments précis du cycle de vie de la machine virtuelle. Concrètement, ils vous permettent de définir des étapes automatisées qui se produisent avant ou après des événements spécifiques, comme le démarrage de la machine virtuelle, son provisionnement, son arrêt ou sa suppression. Ces événements sont up, provision, halt, reload, destroy, suspend, resume et all pour tous.

Les Types de Triggers

Les triggers se déclinent en deux types principaux : les triggers :before (avant) et :after (après) les événements de la machine virtuelle. Comprendre ces deux types est essentiel pour une utilisation efficace des triggers :

Triggers :before

Les triggers :before sont déclenchés avant qu'un événement spécifique ne se produise. Ils vous permettent d'effectuer des actions préliminaires ou de personnaliser l'environnement avant que la machine virtuelle n'atteigne une étape clé de son cycle de vie. Par exemple, vous pourriez utiliser un trigger :before :provision pour préparer l'environnement en installant des dépendances logicielles avant le provisionnement.

Triggers :after

Les triggers :after, quant à eux, sont déclenchés après qu'un événement a été exécuté avec succès. Cela vous donne l'opportunité d'automatiser des actions postérieures à l'événement. Par exemple, vous pourriez utiliser un trigger :after :up pour lancer automatiquement des tests une fois que la machine virtuelle est démarrée avec succès.

Syntaxe des triggers vagrant

Pour définir des triggers pour l'ensemble des machines virtuelles, on peut utiliser l'un de ces syntaxes:

# un seul
config.trigger.after :up do |trigger|
...
end

# un tableau
config.trigger.before [:up, :destroy, :halt, :package] do |trigger|
...
end

# ou une liste
config.trigger.before :up, :destroy, :halt, :package do |trigger|
...
end

Pour définir un trigger pour un VM spécifque, on utilise cette syntaxe :

config.vm.define "ubuntu" do |ubuntu|
  ubuntu.vm.box = "generic/ubuntu2204"
  ubuntu.trigger.before :up do |trigger|
    triger.info "Testdes triggers"
  end
end

Dans les actions possibles des triggers, on trouve :

  • info : affichage d'un message d'info.
  • une action parmi up, provision, halt, reload,destroy, suspend, resume
  • on_error : Définit comment le déclencheur doit se comporter s'il rencontre une erreur. Par défaut, ce sera le cas :halt, mais vous pouvez le configurer pour ignorer les échecs et continuer avec :continue.
  • only_on : Limite le déclencheur à des VM précises. Les valeurs peuvent être une chaîne ou une expression régulière qui correspond au nom d'une VM.
  • run_remote : Une collection de paramètres pour exécuter un script en ligne ou à distance sur l'invité. Ces paramètres correspondent au fournisseur de shell
  • run : Une collection de paramètres pour exécuter un script en ligne ou à distance sur l'hôte.
  • warn : Un message d'avertissement qui sera imprimé au début d'un déclencheur.

Utilisation Pratique des Triggers

Maintenant que nous comprenons ce que sont les triggers et leurs avantages, explorons des exemples concrets de leur utilisation dans le contexte de Vagrant

1. Automatisation du Provisionnement

L'une des utilisations les plus courantes des triggers est l'automatisation du provisionnement des machines virtuelles. Vous pouvez utiliser un trigger :before :provision pour déclencher des actions spécifiques avant que la machine virtuelle ne soit provisionnée. Par exemple, vous pourriez :

  • Mettre à jour le système d'exploitation de la machine virtuelle.
  • Installer des paquets et des dépendances logicielles nécessaires.
  • Configurer des paramètres système spécifiques à votre application.

Cela garantit que votre environnement de développement est prêt à l'emploi dès le démarrage de la machine virtuelle.

Par contre, il est vrai que cette tâche habituellement, je la réalise avec un provisionner ansible. Mais les triggers apportent plus de souplesse, car il ne se limite pas à l'action de provisionnement.

2. Tests Automatisés Après le Démarrage

Un autre cas d'utilisation puissant consiste à automatiser des tests après le démarrage de la machine virtuelle. En utilisant un trigger :after :up, vous pouvez automatiser l'exécution de suites de tests pour vérifier que votre application fonctionne correctement dans l'environnement de développement fraîchement créé. Cela améliore la qualité de votre code en détectant rapidement les problèmes potentiels.

3. Configuration Dynamique des Réseaux

Les triggers peuvent également être utilisés pour configurer dynamiquement les réseaux de vos machines virtuelles. Par exemple, en utilisant un trigger :before :up, vous pouvez définir des règles de port forwarding pour rediriger le trafic réseau vers des ports spécifiques de la machine virtuelle. Cela peut être utile pour exposer des services ou des applications locales à partir de votre machine virtuelle.

4. Actions Post-Provisionnement

Après le provisionnement de la machine virtuelle, vous pouvez automatiser des actions spécifiques à l'aide d'un trigger :after :provision. Par exemple, vous pourriez déclencher l'installation et la configuration automatiques d'un serveur web, d'une base de données ou d'autres services requis pour votre projet.

Cas concrets

Par exemple imaginons que nous voulions redémarrer le service avec le redémarrage du service NTP après l'action resume :

config.trigger.after :resume do |trigger|
  trigger.info = "Restart NTP"
  trigger.run_remote = {inline: "bash -c 'systemctl start ntp'"}
end

On peut aussi imaginer rebooter une machine après son provisionnement :

config.trigger.after [:provision] do |t|
  t.name = "Reboot after provisioning"
  t.run = { :inline => "vagrant reload" }
end

On pourrait imaginer faire un backup d'une BDD avant l'action destroy.

Conclusion

En conclusion, vous aurez compris que les triggers Vagrant sont des outils puissants qui permettent d'automatiser efficacement diverses tâches lors de la création, de la gestion et de la configuration de machines virtuelles. Que vous travailliez sur un projet de développement, de test ou de déploiement, l'utilisation de triggers peut considérablement simplifier et accélérer vos workflows.

Grâce à la flexibilité offerte par les triggers et les actions personnalisables, vous pouvez configurer vos environnements de développement de manière cohérente. Que ce soit pour l'installation de logiciels, la configuration de services, la gestion de fichiers ou d'autres tâches, les possibilités d'automatisation sont infinies.