Przekazywanie zmiennej do skryptu powłoki provisioner w vagrant

Używam prostego skryptu powłoki, aby zapewnić oprogramowanie do konfiguracji vagranta, jak widać tutaj .

Ale nie mogę znaleźć sposobu na pobranie argumentów linii poleceń przekazanych vagrantowi i wysłanie ich do zewnętrznego skryptu powłoki. Google ujawnia, że zostało to dodane jako funkcja, ale nie mogę znaleźć żadnej dokumentacji dotyczącej tego lub przykładów.

Author: kenorb, 2013-03-17

6 answers

Masz rację. Sposób przekazywania argumentów jest za pomocą parametru :args.

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

Zauważ, że pojedyncze cudzysłowy wokół first arg są potrzebne tylko wtedy, gdy chcesz dołączyć spacje jako część przekazywanego argumentu. Oznacza to, że powyższy kod jest równoznaczny z wpisaniem w terminalu:

$ bootstrap.sh 'first arg' second

Gdzie w skrypcie $1 odnosi się do łańcucha "first arg", a $2 do łańcucha "second".

Dokumenty v2 na ten temat można znaleźć tutaj: http://docs.vagrantup.com/v2/provisioning/shell.html

 24
Author: Johann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-24 20:15:58

Rzeczywiście, to nie działa ze zmiennymi! Prawidłowy snytax to:

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

I wtedy, w skorupie setup.sh:

echo "### $1 - $2"

> ### 192.168.50.4 - my_server
 6
Author: Ivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-08 20:00:10

Do dodawania jawnych argumentów użyłem tego z powodzeniem:

config.vm.provision "shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"
 2
Author: tareq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 10:23:38

ODPOWIEDŹ na własne pytanie na podstawie informacji, które znalazłem w starej wersji strony docs :

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

-- @ user1391445

 1
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 00:47:29

Oto alternatywny sposób przekazywania zmiennych ze środowiska:

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

Przykładowe użycie:

TRACE=1 VERBOSE=1 vagrant up
 1
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 00:50:57

W nowych wersjach można użyć tablicy:

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

 0
Author: Karmadon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-11 09:26:22