it-swarm.com.ru

Передача переменной поставщику сценариев Shell в vagrant

Я использую простой сценарий Shell для предоставления программного обеспечения для установки бродяги, как видно здесь .

Но не могу найти способ взять аргументы командной строки, переданные vagrant, и отправить их во внешний сценарий Shell. Google показывает, что это было добавлено как функция, но я не могу найти никакой документации или примеров там.

24
user1391445

Ты прав. Способ передачи аргументов - с помощью параметра :args.

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

Обратите внимание, что одинарные кавычки вокруг first arg нужны только в том случае, если вы хотите включить пробелы в передаваемый аргумент. То есть приведенный выше код эквивалентен вводу следующего в терминале:

$ bootstrap.sh 'first arg' second

Где внутри скрипта $ 1 относится к строке «first arg», а $ 2 относится к строке «second».

Документы v2 по этому вопросу можно найти здесь: http://docs.vagrantup.com/v2/provisioning/Shell.html

27
Johann

Действительно, он не работает с переменными! Правильный snytax:

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

а затем в настройках Shell.sh:

echo "### $1 - $2"

> ### 192.168.50.4 - my_server
7
Ivan

Для добавления явных аргументов я успешно использовал это:

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

Отвечая на мой собственный вопрос, основанный на некоторой информации, которую я нашел в старой версии страницы docs :

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

- @ user1391445

1
kenorb

Вот альтернативный способ передачи переменных из окружения:

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

Пример использования:

TRACE=1 VERBOSE=1 vagrant up
1
kenorb

В новых версиях вы можете использовать массив:

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

0
Karmadon