2015-10-11 3 views
2

Похожего на этот вопрос: Passing variable to a shell script provisioner in vagrantPass аргумент командной строки для бродяги оболочки сценария Provisioner

Я хочу передать переменные в Provisioner сценария оболочки, но я хочу, чтобы установить эти переменные в командной строке, когда я называю Provisioner. Это возможно?

+0

так что вы хотите сделать что-то вроде 'бродячей до arg1 arg2' и отправить arg1 и arg2 в Provisioner? –

+0

Да, это правильно. – mhkeller

ответ

3

Это то, что я хотел бы попробовать - я предполагаю, что есть возможности, как Vagrantfile является рубиновый скрипт, вы можете использовать большинство возможностей рубина

Будьте осторожны, хотя, как бродяга, возможно, потребуется проверить переменные, например, при выполнении vagrant up arg1 arg2, он ожидает, arg1 и arg2 быть имена машин, определенные в Vagrantfile и вызовет ошибку, поскольку он не может найти его

Таким образом, вы должны были бы передать эти переменные как

vagrant --arg1 --arg2 up 

чтобы прочитать их вы могли бы

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

v1 = ARGV[0] 
v2 = ARGV[1] 
array_arg = [v1, v2] 


Vagrant.configure("2") do |config| 

    blabla config 

    array_arg.each do |arg| 
    config.vm.provision "shell", run: "always" do |s| 
     s.inline = "echo $1" 
     s.args = arg 
    end 
    end 
end 

, например, исполнение даст

[email protected]:~/project$ vagrant --arg1 --arg2 up 
    . . . . . 
==> default: Running provisioner: shell... 
    default: Running: inline script 
==> default: stdin: is not a tty 
==> default: --arg1 
==> default: Running provisioner: shell... 
    default: Running: inline script 
==> default: stdin: is not a tty 
==> default: --arg2 
+0

Я бы назвал 'vagrant provision -arg1' таким, что он не запускает' vagrant up', а скорее «бродяжничество» (в случае, если машина работает, но нуждается в репродуцировании) –

+0

, если вы хотите иметь свой собственный переменную, которую вы должны иметь сразу после команды «vagrant», если вы поместите ее после команды бродяг, как команда обеспечения, бродяга будет ожидать ее параметра для своей собственной команды и будет требовать, чтобы произошла ошибка. Если вы выполняете 'vagrant -arg1 provision', в этом случае он все равно будет выполнять только условие –

Смежные вопросы