web-dev-qa-db-fra.com

Passage de variable à un fournisseur de script Shell dans vagrant

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.

24
user1391445

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

27
Johann

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
7
Ivan

Pour ajouter des arguments explicites, j'ai utilisé ceci avec succès:

config.vm.provision "Shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"
2
tareq

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

1
kenorb

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
1
kenorb

Dans les nouvelles versions, vous pouvez utiliser array:

config.vm.provision :Shell, :path => "bootstrap.sh", :args:["first", "second"]

0
Karmadon