如何通过对“无业游民了”参数,有它在Vagrantfile的范围是什么?(How to pass p

2019-07-17 18:16发布

我正在寻找一种方式来传递参数给厨师的菜谱,如:

$ vagrant up some_parameter

然后使用some_parameter里面的厨师食谱之一。

Answer 1:

你不能传递任何参数,无业游民。 唯一的方法是使用环境变量

MY_VAR='my value' vagrant up

并使用ENV['MY_VAR']在配方。



Answer 2:

您还可以包括GetoptLong Ruby库,让您解析命令行选项。

Vagrantfile

require 'getoptlong'

opts = GetoptLong.new(
  [ '--custom-option', GetoptLong::OPTIONAL_ARGUMENT ]
)

customParameter=''

opts.each do |opt, arg|
  case opt
    when '--custom-option'
      customParameter=arg
  end
end

Vagrant.configure("2") do |config|
             ...
    config.vm.provision :shell do |s|
        s.args = "#{customParameter}"
    end
end

然后,你可以运行:

$ vagrant --custom-option=option up
$ vagrant --custom-option=option provision

注:确保自定义选项流浪命令之前指定避免了无效的选项验证错误。

有关库的详细信息在这里 。



Answer 3:

它可以读取ARGV变量,然后在继续配置阶段之前从中删除。 感觉恶心修改ARGV,但我无法找到的命令行选项任何其他方式。

Vagrantfile

# Parse options
options = {}
options[:port_guest] = ARGV[1] || 8080
options[:port_host] = ARGV[2] || 8080
options[:port_guest] = Integer(options[:port_guest])
options[:port_host] = Integer(options[:port_host])

ARGV.delete_at(1)
ARGV.delete_at(1)

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # Create a forwarded port mapping for web server
  config.vm.network :forwarded_port, guest: options[:port_guest], host: options[:port_host]

  # Run shell provisioner
  config.vm.provision :shell, :path => "provision.sh", :args => "-g" + options[:port_guest].to_s + " -h" + options[:port_host].to_s

 

provision.sh

port_guest=8080
port_host=8080

while getopts ":g:h:" opt; do
    case "$opt" in
        g)
            port_guest="$OPTARG" ;;
        h)
            port_host="$OPTARG" ;;
    esac
done


Answer 4:

@本杰明 - 戈捷的GetoptLong解决方案是很整洁,与红宝石和流浪汉模式以及结合使用。

但是,由于它,需要一个额外的行来解决清洁处理的无业游民参数,如vagrant destroy -f

require 'getoptlong'

opts = GetoptLong.new(
  [ '--custom-option', GetoptLong::OPTIONAL_ARGUMENT ]
)

customParameter=''

opts.ordering=(GetoptLong::REQUIRE_ORDER)   ### this line.

opts.each do |opt, arg|
  case opt
    when '--custom-option'
      customParameter=arg
  end
end

这允许这个代码块时定制选项的处理暂停。 所以现在, vagrant --custom-option up --provisionvagrant destroy -f被处理干净。

希望这可以帮助,



文章来源: How to pass parameter on 'vagrant up' and have it in the scope of Vagrantfile?