vagrant - 如何在 Vagrant 中为多机环境指定配置器默认值?

标签 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/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.

可以通过另一种方法吗?

最佳答案

您的问题是范围之一。变量 chefconfig.vm.provision 中具有块作用域做块。

一旦此块退出,您的更改就会消失。您应该遵循 multi-machine 中的示例vagrant 网站上的文档。
config.vm.provision "shell", inline: "echo Hello"

Vagrant.configure("2") do |config|
  config.vm.box = "andyshinn/ubuntu-precise64"


  config.vm.provision "chef_client", chef_server_url: "https://api.opscode.com/organizations/myorg"
  config.vm.provision "chef_client", validation_key_path:  "~/.chef/myorg-validator.pem                
  config.vm.provision "chef_client", delete_node: true
  config.vm.provision "chef_client", delete_client: true
  config.vm.provision "chef_client", validation_client_name: "myorg-validator"


  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

应该做的伎俩

关于vagrant - 如何在 Vagrant 中为多机环境指定配置器默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569223/

相关文章:

vagrant - 关闭不再配置的vagrant box

symfony - 绕过 HSTS 错误给出 'file not found'

Vagrant 中的语法错误

sed 在 vagrant 提供中出错,但在手动执行中正常

docker - 无法访问 vagrant 机器上的 vagrant 文件夹(旧文件句柄)

linux - 使用 Vagrant 和 Chef (Solo) 搭建 NGINX/Linux 开发环境

ruby-on-rails - 注销后使用 Vagrant 的 Persistent Rails Webrick 服务器

vagrant - 如何添加另一个虚拟主机?

在静音/安静模式下 Vagrant

ssh - Vagrant 文件。设置 ssh 代理的区域设置