2013-03-17 8 views
20

Sto utilizzando un semplice script di shell per eseguire il provisioning del software per un'impostazione errata come visto here.Passare la variabile a un provisioner di script della shell in vagabondo

Ma non è possibile trovare un modo per prendere gli argomenti della riga di comando passati in vagabondo e inviarli a uno script di shell esterno. Google rivela che questo è stato aggiunto come funzionalità, ma non riesco a trovare alcuna documentazione che lo copra o esempi là fuori.

risposta

24

Sei corretto. Il modo per passare argomenti è con il parametro :args.

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'first arg' second" 

Nota che le singole virgolette intorno first arg sono necessari solo se si desidera includere spazi come parte dell'argomento passato. Cioè, il codice è equivalente ad digitando nel terminale:

$ bootstrap.sh 'first arg' second 

Qualora all'interno dello script $ 1 si riferisce alla stringa "primo arg" e $ 2 si riferisce alla stringa "secondo".

La documentazione v2 su questo possono essere trovati qui: http://docs.vagrantup.com/v2/provisioning/shell.html

+0

non credo che questo funziona quando il arg è una variabile nel tuo file vagabondo. Ad esempio: - args: "# {MY_VARIABLE}" e nel tuo script .sh: - echo $ 1 – Justin

+0

C'è un modo per passare argomenti come 'vagrant provision --arg1 --arg2'? E poi accedere a quelli nel nostro script di provisioning. Sono quasi sicuro al 99% che la risposta sia no ma non riesco ancora a trattenermi dal chiedere. –

6

infatti, non funziona con le variabili! la correttezza snytax è:

var1= "192.168.50.4" 
var2 = "my_server" 
config.vm.provision :shell, :path => 'setup.sh', :args => [var1, var2] 

e poi, nel setup.sh shell:

echo "### $1 - $2" 

> ### 192.168.50.4 - my_server 
1

Rispondendo alla mia domanda sulla base di alcune informazioni che ho trovato in una vecchia versione del docs page:

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'abc'" 

- @ user1391445

1

Ecco modo alternativo di passare le variabili dall'ambiente: utilizzo

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 

Esempio:

TRACE=1 VERBOSE=1 vagrant up 
0

Per aggiungere argomenti espliciti, ho usato questo successo:

config.vm.provision "shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg" 
Problemi correlati