首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在'vagrant up‘上传递参数并将其放在Vagrantfile的作用域中?

如何在'vagrant up‘上传递参数并将其放在Vagrantfile的作用域中?
EN

Stack Overflow用户
提问于 2013-01-02 23:03:04
回答 4查看 42.2K关注 0票数 88

我正在寻找一种将参数传递给Chef cookbook的方法,比如:

代码语言:javascript
复制
$ vagrant up some_parameter

然后在厨师食谱中使用some_parameter

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-02 23:10:23

您不能向vagrant传递任何参数。唯一的方法是使用环境变量

代码语言:javascript
复制
MY_VAR='my value' vagrant up

并在食谱中使用ENV['MY_VAR']

票数 118
EN

Stack Overflow用户

发布于 2013-11-18 06:33:11

可以从ARGV读取变量,然后在进入配置阶段之前将它们从ARGV中删除。修改ARGV感觉很麻烦,但我找不到命令行选项的其他方法。

Vagrantfile

代码语言:javascript
复制
# 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

代码语言:javascript
复制
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
票数 24
EN

Stack Overflow用户

发布于 2019-03-03 04:41:40

@benjamin-gauthier的GetoptLong解决方案非常简洁,非常适合红宝石和流浪的范例。

然而,它需要额外的一行来修复对漂移参数的干净处理,比如vagrant destroy -f

代码语言:javascript
复制
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都被干净地处理了。

希望这能帮上忙

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14124234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档