J'utilise un simple script Shell pour approvisionner le logiciel en configuration vagabonde, comme vu ici .
Mais ne peut pas trouver un moyen de prendre les arguments de ligne de commande passés à vagrant et de les envoyer à un script Shell externe. Google révèle que cela a été ajouté en tant que fonctionnalité, mais je ne trouve aucune documentation ou exemples sur le sujet.
Vous avez raison. La manière de passer des arguments est d'utiliser le paramètre :args
.
config.vm.provision :Shell, :path => "bootstrap.sh", :args => "'first arg' second"
Notez que les guillemets simples autour de first arg
ne sont nécessaires que si vous souhaitez inclure des espaces dans l'argument passé. C'est-à-dire que le code ci-dessus équivaut à taper ce qui suit dans le terminal:
$ bootstrap.sh 'first arg' second
Où dans le script, $ 1 se réfère à la chaîne "first arg" et $ 2 à la chaîne "second".
La documentation v2 sur ce sujet peut être trouvée ici: http://docs.vagrantup.com/v2/provisioning/Shell.html
En effet, cela ne fonctionne pas avec les variables! La bonne statistique est:
var1= "192.168.50.4"
var2 = "my_server"
config.vm.provision :Shell, :path => 'setup.sh', :args => [var1, var2]
et ensuite, dans le setup.sh du shell:
echo "### $1 - $2"
> ### 192.168.50.4 - my_server
Pour ajouter des arguments explicites, j'ai utilisé ceci avec succès:
config.vm.provision "Shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"
Répondant à ma propre question sur la base d’informations trouvées dans une ancienne version de la page docs :
config.vm.provision :Shell, :path => "bootstrap.sh", :args => "'abc'"
- @ user1391445
Voici une autre manière de passer les variables de l'environnement:
config.vm.provision "Shell" do |s|
s.binary = true # Replace Windows line endings with Unix line endings.
s.inline = %Q(/usr/bin/env \
TRACE=#{ENV['TRACE']} \
VERBOSE=#{ENV['VERBOSE']} \
FORCE=#{ENV['FORCE']} \
bash my_script.sh)
end
Exemple d'utilisation:
TRACE=1 VERBOSE=1 vagrant up
Dans les nouvelles versions, vous pouvez utiliser array:
config.vm.provision :Shell, :path => "bootstrap.sh", :args:["first", "second"]