Je voudrais exécuter un script bash sur la machine hôte lorsque vagrant approvisionne le serveur.
Quelle serait la meilleure méthode pour y parvenir?
Au moins deux plugins qui devraient aider:
Si vous ne vous souciez pas que le script est exécuté sur (presque) tous vagrant
Commandes, vous pouvez également simplement utiliser Shell (ou utiliser la magie ruby) dans Vagrantfile:
system('./myscript.sh')
Vagrant.configure('2') do |config|
# ...
end
Kernel
module, documenté ici . leKernel
le module est inclus dans leObject
classe, donc ses méthodes sont disponibles dans tous les domaines.Solution simple (et complète)
(Je dis complète car la réponse acceptée ne vérifie pas si l'utilisateur utilise vagabond. Le script est donc exécuté sur chaque commande, ce qui n'est pas ce que souhaite le PO.)
Il existe cependant une solution simple à cela.
ARGV[0]
est le premier argument de la commande entrée et peut êtreup
,down
,status
, etc. Il suffit de vérifier la valeur deARGV[0]
dans votre Vagrantfile.Quelque chose comme ça va faire:
la source
Placez ceci près du sommet de votre Vagrantfile:
Ensuite, invoquez simplement dans votre Vagrantfile comme ceci:
config.vm.provision "list-files", type: "local_shell", command: "ls"
Et via la ligne de commande comme ceci:
vagrant provision --provision-with list-files
C’est un peu un bidouillage, ça ressemble à un plug-in, mais ce n’est vraiment pas le cas
vagrant plugin list
). Je ne recommande pas de le faire de cette façon, sauf que cela présente l'avantage de ne pas avoir besoin d'installer un plugin. Votre Vagrantfile fonctionnera donc sur tout ordinateur prenant en charge la dernière version de la configuration (version 2 à la date d'écriture). Bien que cela semble prometteur, il y a aussi tout le problème multi-plateforme de la commande que vous émettez. Vous devrez prendre en considération si vous voulez que votre Vagrantfile soit portable, mais cela devrait vous aider à démarrer.la source
En ligne avec ce que @tmatilai a dit à propos de l'utilisation
Je l’ai trouvé très utile pour des commandes ponctuelles telles que l’installation de commandes vagrant ou un approvisionneur qui pourrait ne pas être installé sur le système. J'évite juste de le refaire chaque fois que j'invoque le
vagrant
commandes en ajoutant un sed pour commenter automatiquement laVagrantfile
.Par exemple:
Et j'en fais la première ligne de mon fichier Vagrant. De cette façon, il installera d’abord le plugin vagant-fabric, fabric et jinja (essaiera d’abord sans
sudo
pourvirtualenvs
et avecsudo
si cela échoue) et alors la ligne se commente.la source
if [[ $(vagrant plugin list | grep -c vagrant-host-shell) == "0" ]] then vagrant plugin install vagrant-host-shell fi
vagrant status
avantvagrant up
...Sur la base de la réponse de @ tmatilai mais mise à jour pour 2019, les déclencheurs de vagabonds ont été fusionnés dans Vagrant. Donc, vous pouvez maintenant faire quelque chose comme ceci:
Ce bloc va à l'intérieur de
config.vm.define
. Documentation complémentaire: https://www.vagrantup.com/docs/triggers/la source