次のように、Chefクックブックにパラメーターを渡す方法を探しています。
$ vagrant up some_parameter
そしてsome_parameter
、シェフの料理本の1つで使用します。
次のように、Chefクックブックにパラメーターを渡す方法を探しています。
$ vagrant up some_parameter
そしてsome_parameter
、シェフの料理本の1つで使用します。
vagrant にパラメーターを渡すことはできません。唯一の方法は、環境変数を使用することです
MY_VAR='my value' vagrant up
そしてENV['MY_VAR']
レシピに使います。
コマンド ライン オプションを解析できる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
注:無効なオプションの検証エラーを回避するために、vagrant コマンドの前にカスタム オプションが指定されていることを確認してください。
ライブラリの詳細については、こちらをご覧ください。
構成フェーズに進む前に、ARGV から変数を読み取り、変数を削除することができます。ARGV を変更するのは面倒ですが、コマンド ライン オプションの他の方法が見つかりませんでした。
# 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
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