我正在寻找一种方法将参数传递给Chef cookbook,如:
$ vagrant up some_parameter
Run Code Online (Sandbox Code Playgroud)
然后some_parameter在其中一个Chef cookbook中使用.
任何人都可以指导我如何在VagrantFile中包含变量?我试图从外部文件将配置注入Vagrantfile,这样我就可以将配置分发给我的同事而无需直接在Vagrantfile上硬编码配置.
我曾经想过,因为它是基于Ruby的我可以只包含一个Ruby文件,但是我得到一个错误消息:unintialized constant MyVars
我的VagrantFile简化了
# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'vagrant.rb'
include MyVars
Vagrant.configure("2") do |config|
# Web
config.vm.define :joe do |joe|
joe.vm.box = "precise64_4.2.12"
joe.vm.hostname = WEBVMNAME
joe.vm.network :private_network, ip: "192.168.140.141"
# Port Forwarding
joe.vm.network :forwarded_port, guest: 22, host: 2201
joe.vm.network :forwarded_port, guest: 80, host: 8080
# Bootstrap Bash Script
joe.vm.provision :shell, :path => "bootstrap.sh"
end
end
Run Code Online (Sandbox Code Playgroud)
而vagrant.rb包含
module MyVars
WEBVMNAME = "rex"
end
Run Code Online (Sandbox Code Playgroud)
请注意我也是Ruby的新手,所以我不确定它是否只是我错误的语法?
编辑:我正在使用的更新代码
我使用的是简单的shell脚本,以提供软件作为游民设置为可见这里.
但是无法找到一种方法来将传入的命令行参数传递给vagrant并将它们发送到外部shell脚本.谷歌透露这是作为一个功能添加,但我找不到任何涵盖它的文档或示例.
我正在运行Vagrant 1.8.5,它使用这样的格式在配置时支持Vagrantfile中的环境变量
config.vm.provision:shell,path:"bootstrap.sh",env:{"MYSQL_DB_USERNAME"=>"django","MYSQL_DB_PASSWORD"=>"supersecretpasswordwasreplaced"}
但是,我希望这些环境变量在up没有配置时,或者当我通过SSH连接到服务器来完成工作时也可用.我能找到的显而易见的方法是
config.ssh.forward_env以便它们可供配置器和SSH使用.有没有更好的办法?