【发布时间】:2015-01-31 23:14:21
【问题描述】:
我正在尝试使用单个 Vagrantfile 来定义具有不同 Chef 角色的 2 个 VM,并且我想在两个 vm 之间共享某些 Chef 配置,但分别指定运行列表、环境和属性。有没有办法在不复制常用设置的情况下做到这一点?
例如,如果我做了类似的事情:
# Development system
config.vm.define "dev", primary: true do |dev|
dev.vm.hostname = "server1"
dev.vm.provider "virtualbox" do |v|
v.name = "server1"
end
dev.vm.provision "chef_client" do |chef|
chef.run_list = [ "role[dev-system]" ]
chef.environment = "development"
chef.json = {
"key" => "value1"
}
end
end
# Production system
config.vm.define "pro", primary: true do |pro|
pro.vm.hostname = "server2"
pro.vm.provider "virtualbox" do |v|
v.name = "server2"
end
pro.vm.provision "chef_client" do |chef|
chef.run_list = [ "role[pro-system]" ]
chef.environment = "production"
chef.json = {
"key" => "value2"
}
end
end
config.vm.provision "chef_client" do |chef|
chef.chef_server_url = "https://example.com/organizations/tsrd"
chef.validation_key_path = "~/my-validator.pem"
chef.validation_client_name = "my-validator"
chef.delete_node = true
chef.delete_client = true
# ... PLUS OTHER COMMON CONFIGURATIONS...
end
它会为每个 vm 应用单独的 chef 部分以及共享部分,还是只用最后一个部分覆盖第一个部分?如果没有,有没有更简单的方法来做到这一点?也许是在每个 vm 定义块中调用的包装函数?
【问题讨论】:
标签: vagrant chef-infra