7

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.

別の方法で可能ですか?

4

3 に答える 3

0

すでにこれが機能している可能性がありますが、そうでない場合は、これを確認してください。

それは私の問題を部分的に解決しました。多分それはあなたを助けるでしょう。

于 2014-09-15T13:43:33.563 に答える
0

内側のブロックが外側のブロックを「オーバーライド」すると思います。ただし、 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
于 2015-09-28T20:57:06.023 に答える