如何在多机环境的Vagrant中指定provisioner默认值?
我想知道,在使用Vagrant创建多机环境时,是否有一种方法可以指定供应器的默认值 我试着做如下的事情:如何在多机环境的Vagrant中指定provisioner默认值?,vagrant,vagrantfile,Vagrant,Vagrantfile,我想知道,在使用Vagrant创建多机环境时,是否有一种方法可以指定供应器的默认值 我试着做如下的事情: Vagrant.configure("2") do |config| config.vm.box = "andyshinn/ubuntu-precise64" config.vm.provision :chef_client do |chef| chef.chef_server_url = "https://api.opscode.com/organizations/myo
Vagrant.configure("2") do |config|
config.vm.box = "andyshinn/ubuntu-precise64"
config.vm.provision :chef_client do |chef|
chef.chef_server_url = "https://api.opscode.com/organizations/myorg"
chef.validation_key_path = "~/.chef/myorg-validator.pem"
chef.delete_node = true
chef.delete_client = true
chef.validation_client_name = "myorg-validator"
end
config.vm.define :app do |app|
app.vm.network "private_network", ip: "172.16.64.61"
app.vm.host_name = "vagrant-app-#{ENV['USER']}"
app.vm.provision :chef_client do |chef|
chef.add_recipe "myrecipe1"
chef.add_recipe "myrecipe2"
chef.add_recipe "sudo"
end
end
config.vm.define :web do |web|
web.vm.network "private_network", ip: "172.16.64.62"
web.vm.host_name = "vagrant-web-#{ENV['USER']}"
web.vm.provision :chef_client do |chef|
chef.add_recipe "myrecipe3"
chef.add_recipe "myrecipe4"
chef.add_recipe "sudo"
end
end
end
但每个VM块似乎都没有拾取任何主配置块设置。我得到这个错误:
There are errors in the configuration of this machine. Please fix
the following errors and try again:
chef client provisioner:
* Chef server URL must be populated.
* Validation key path must be valid path to your chef server validation key.
可能通过其他方法吗?您的问题是范围问题。变量
chef
在config.vm.provision
do块中具有块作用域
一旦此块退出,您的更改就会消失。您应该遵循vagrant站点上的多机
文档中的示例
config.vm.provision“shell”,内联:“echo Hello”
应该这样做也许你已经有了这个功能,但如果没有,请检查以下内容:
module Vagrant
module Config
module V2
class Root
def provision(extra_recipes)
config.vm.provision :chef_client do |chef|
chef.chef_server_url = "https://api.opscode.com/organizations/myorg"
chef.validation_key_path = "~/.chef/myorg-validator.pem"
chef.delete_node = true
chef.delete_client = true
chef.validation_client_name = "myorg-validator"
extra_recipes.each { |recipe| chef.add_recipe(recipe) }
end
end
end
end
end
end
Vagrant.configure("2") do |config|
config.vm.box = "andyshinn/ubuntu-precise64"
config.vm.define :app do |app|
app.vm.network "private_network", ip: "172.16.64.61"
app.vm.host_name = "vagrant-app-#{ENV['USER']}"
app.provision("myrecipe1", "myrecipe2", "sudo")
end
config.vm.define :web do |web|
web.vm.network "private_network", ip: "172.16.64.62"
web.vm.host_name = "vagrant-web-#{ENV['USER']}"
app.provision("myrecipe3", "myrecipe4", "sudo")
end
end
我认为
.Vagrantfile
通常描述一个独立的框。当您谈到一个多机
环境时,它似乎是可疑的,因为答案是多个.Vagrantfile
s。你认为你可能想做一些流浪汉真的不想做的事吗?我知道你是从哪里来的。但是我认为多机设置是为可扩展多个节点的应用程序设计的。为了适当地扩展,应用程序被模块化为在不同节点上运行的不同组件。因此,为了在本地模拟该环境并保持开发和生产对等,我希望以相同的方式运行它。流浪汉在这方面做得很好,而且确实有效。当你不得不为每个盒子重复相同的配置时,它会变得非常不整洁(潮湿?),这实际上是谷歌的失败。我不知道他们添加了multi-machine-config.Lemme来看看这个,我想你的配置有一些问题。谢谢你的建议!我会在下个星期尝试这个,如果它有效的话,我会接受。我最终尝试了这个,但它不起作用。每台计算机都会阻止无法找到所需参数(如Chef服务器URL和验证密钥)的错误。它似乎没有继承这一点。最好指出配置中的部分。我最终明白了你的意思,自定义方法确实有助于更接近这一点。不是最优雅的。但它起作用了。是的,不太好,但起作用了。我尝试了这个复杂的案例,有很多不同的配置,但有不同的文件:-盒子里的Vagrant文件-home dir中的Vagrant文件-自定义的Vagrant文件,我想在一个地方有厨师相关的东西(URL、键等)。我设法在VAGRANT_HOME/VAGRANT文件中包含实例变量,并且能够在自定义VAGRANT文件中引用它们
module Vagrant
module Config
module V2
class Root
def provision(extra_recipes)
config.vm.provision :chef_client do |chef|
chef.chef_server_url = "https://api.opscode.com/organizations/myorg"
chef.validation_key_path = "~/.chef/myorg-validator.pem"
chef.delete_node = true
chef.delete_client = true
chef.validation_client_name = "myorg-validator"
extra_recipes.each { |recipe| chef.add_recipe(recipe) }
end
end
end
end
end
end
Vagrant.configure("2") do |config|
config.vm.box = "andyshinn/ubuntu-precise64"
config.vm.define :app do |app|
app.vm.network "private_network", ip: "172.16.64.61"
app.vm.host_name = "vagrant-app-#{ENV['USER']}"
app.provision("myrecipe1", "myrecipe2", "sudo")
end
config.vm.define :web do |web|
web.vm.network "private_network", ip: "172.16.64.62"
web.vm.host_name = "vagrant-web-#{ENV['USER']}"
app.provision("myrecipe3", "myrecipe4", "sudo")
end
end