11
Puppet 2.7.19
Vagrant version 1.0.6
VM OS Ubuntu 12.04

vagrantからpuppetモジュールパスを設定しようとしています。これは非常に単純なはずです。

私のVagrantファイルには次のものがあります。

Vagrant::Config.run do |config|
  config.vm.provision :puppet, :module_path => "my_modules"
  config.vm.provision :puppet, :options => ["--modulepath", "my_modules"]
end

modulepathの値を変更しても、効果がないようです(後vagrant reload

これがからのスニペットですvagrant up

[default] -- v-root: /vagrant
[default] -- manifests: /tmp/vagrant-puppet/manifests
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0

/tmp/vagrant-puppet/modules-0?に注意してください これは何ですか?

次に、vagrantの内側から:

vagrant@precise64:~$ puppet apply --configprint modulepath
/home/vagrant/.puppet/modules:/usr/share/puppet/modules

だから私がするとき:puppet module install puppetlabs/mysql

このエラーが発生します:

Preparing to install into /home/vagrant/.puppet/modules ...
Error: Could not install module 'puppetlabs-mysql' (latest)
  Directory /home/vagrant/.puppet/modules does not exist

だから私はしなければならない:

vagrant@precise64:~/.puppet$ mkdir /home/vagrant/.puppet/modules
vagrant@precise64:~/.puppet$ puppet module install puppetlabs/mysql
Preparing to install into /home/vagrant/.puppet/modules ...
Downloading from http://forge.puppetlabs.com ...
Installing -- do not interrupt ...
/home/vagrant/.puppet/modules
└─┬ puppetlabs-mysql (v0.6.1)
  └── puppetlabs-stdlib (v3.2.0)

そして、vagrantがモジュールを見ることができる場所にモジュールを移動する必要があります...

mv /home/vagrant/.puppet/modules/mysql /tmp/vagrant-puppet/modules-0

これはバグか、本当に何かが足りないようです。かなり基本的なようですので、他の人がこれをどのように解決したかを聞きたいです。

ありがとう!

4

3 に答える 3

12

module_pathを効果的に2回指定しています。

Vagrant::Config.run do |config|
  config.vm.provision :puppet, :module_path => "my_modules"
  config.vm.provision :puppet, :options => ["--modulepath", "my_modules"]
end

どちらがもう一方をオーバーライドするかはわかりませんが、モジュールパスを両方の方法で指定するべきではありません。

:options最初の行のように、配列ではなくmodule_pathに対するvagrantのサポートを使用する方が良いと思います。私は次のスタイルがさらに好きです:

Vagrant::Config.run do |config|
  ...
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = "manifests"
    puppet.module_path = ["modules-contrib","modules-custom"]
    puppet.manifest_file  = "site.pp"
  end # puppet
end # config

あなたはについて尋ねまし/tmp/vagrant-puppet/modules-0た。これは、modulepath配列の最初の項目です。ここで、0は配列インデックスです。つまり、上記の例では、vagrantプロジェクトのディレクトリmodules-contribとディレクトリがそれぞれとにマウントされます。modules-custom/tmp/vagrant-puppet/modules-0/tmp/vagrant-puppet/modules-1

Vagrantボックス内にPuppetモジュールをインストールしないでください。代わりに、ホスト環境のvagrantプロジェクトのmodulesディレクトリにインストールしてください。

それらを1つずつインストールするのではなく、librarian puppet(gem install librarian-puppet)を使用しPuppetfileて、必要なすべてのサードパーティモジュールを一覧表示し、librarian-puppetにそれらを別のモジュールディレクトリに配置するように指示するvagrantプロジェクトに配置することをお勧めします。カスタムパペットモジュールに使用するもの。私はmodules-contribサードパーティのモジュール用のディレクトリを使用し、自分のディレクトリをに入れていmodules-customます。

モジュールを配置する場所を図書館員に伝えます。

librarian-puppet config --local path modules-contrib

Puppetfileのレイアウトについては、https://github.com/rodjek/librarian-puppetを参照してください。非常にシンプルで、puppet-forgeとgitのソースを好きなように組み合わせることができます。

modules-contribフォルダーをファイルに追加し.gitignore(gitを使用していると仮定)、ファイルのバージョン管理に依存する必要がありPuppetfileます。

于 2013-06-04T15:08:57.653 に答える
6

Vagrant Documentationから読むと:

Vagrant Puppetプロビジョナーを使用すると、モジュールのローカルフォルダーをVMにマウントでき、Puppetがそれらを自動的に認識するように構成されます。

ローカルフォルダとは、ホストマシン上のフォルダを指します。

その後:

モジュールパスは、Vagrantfileを含むフォルダーを基準にして展開されます。

VagrantFileを含むフォルダーは、ホストマシン上にあります。

そのため、ホストマシン上のフォルダーへのパスを設定するオプションを使用して、VM上のフォルダーへのパスを制御しようとしています。

モジュールはVMではなくホストマシンに配置する必要があります。次に例を示します。

ホストマシン

〜/ Dev /mybox/->「mybox」VagrantVMのベースパス

〜/ Dev / mybox/VagrantFile->「mybox」を制御するVagrantファイル

〜/ Dev / mybox / puppet/modules->「mybox」で使用されるパペットモジュールへのパス

〜/ Dev / mybox / puppet / modules/apache->「mybox」に適用されるapacheモジュールのパス

VagrantFile:

  # Enable puppet provisioning
  config.vm.provision :puppet do |puppet|
     puppet.module_path = "puppet/modules"
     puppet.manifests_path = "puppet"
     puppet.manifest_file  = "mybox.pp"
  end

仮想マシン

myboxを起動すると:

[default] Mounting shared folders...
[default] -- v-root: /vagrant
[default] -- manifests: /tmp/vagrant-puppet/manifests
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0

それから

vagrant@mybox:~$ cd /tmp/vagrant-puppet/modules-0
vagrant@mybox:/tmp/vagrant-puppet/modules-0$ ls
apache

ご覧のとおり、ホストマシンの〜/ Dev / mybox / puppet / modules / apacheディレクトリは、VagrantVMの/tmp / vagrant-puppet/modules-0にマウントされています。

お役に立てれば。

于 2013-05-03T01:41:20.703 に答える
0

だから、あなたが私のようで、この質問と答えをじっと見つめていて、あなたの場合は何が違うのか疑問に思っているなら、これが私が見逃しているものです:

プロビジョニングに関するvagrantドキュメントから、このスニペットを取得しました。

config.vm.provision :puppet do |puppet|
  puppet.manifests_path = "my_manifests"
  puppet.manifest_file = "default.pp"
end

モジュールをゲストに認識させようとしているときに、私はこの行をピックアップしました(おそらくここから):

config.vm.provision :puppet, :module_path => "my_modules"

ルビーやvagrantをよく知らないので、最初のスニペットのすぐ下に配置しました。それはうまくいきませんでした。

ただし、機能するのは次のとおりです。

config.vm.provision :puppet do |puppet|
  puppet.manifests_path = "my_manifests"
  puppet.manifest_file  = "default.pp"
  puppet.module_path = "my_modules"
end

単純な解決策を見つけるのが最も難しい場合があります。

[編集]

また、ゲストVMで「puppetapply --configprint modulepath」コマンドを実行しても、Vagrantによって呼び出されたときにpuppetが使用するモジュールパスが表示されないことを理解するのに役立ちます。

于 2013-05-30T13:08:43.547 に答える