2013-03-19 7 views
11
Puppet 2.7.19 
Vagrant version 1.0.6 
VM OS Ubuntu 12.04 

私は迷子から人形モジュールのパスを設定しようとしています。それはとてもシンプルでなければならないようだ。私が持っている私のベイグラントファイルで迷彩人形モジュールパス

:ここ

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

私は(vagrant reload後)は効果がないように見えるのModulePathの値を変更

vagrant up

からsnippletです
[default] -- v-root: /vagrant 
[default] -- manifests: /tmp/vagrant-puppet/manifests 
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0 

/tmp/vagrant-puppet/modules-0に注目してください。これは何についてですか?放浪の内側から次に

[email protected]:~$ 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 

だから、私が持っている:

[email protected]:~/.puppet$ mkdir /home/vagrant/.puppet/modules 
[email protected]:~/.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) 

そして、私はhav多分これはバグですか、私は本当に何かが欠けていますように浮浪者がそれらを見ることができる場所にモジュールを移動する電子...

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

は思えます。私は他の人がこれをどのように解決したのか聞いてみたいと思います。

ありがとうございます!

+0

Vagrantは、モジュールがVirtualBoxの共有フォルダを介してVMにリンクされ、モジュールがホスト上に存在するようにする必要があると想定しています。 VM内に格納されているモジュールにVagrantプロビジョナを使用すると、Vagrantプロビジョナーが構築されているものが悪用される可能性があります。 – cmur2

+0

VagrantはVM上の共有フォルダ内のmodulesディレクトリをリンクします。 '/ tmp/vagrant-puppet/modules-0'のように見えますが、私は迷彩で人形の' modulepath'を設定して一致させようとしています。 –

+0

あなたの人形モジュールがあるホスト上の場所を設定したいですか? – cmur2

答えて

12

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::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について尋ねました。これはモジュールパス配列の最初の項目です。0は配列インデックスです。上記の例では、私の迷惑メールプロジェクトのmodules-contribmodules-customのディレクトリはそれぞれ/tmp/vagrant-puppet/modules-0/tmp/vagrant-puppet/modules-1にマウントされています。

迷路ボックス内に人形モジュールを設置しないでください。代わりに、ホスト環境の迷惑メールプロジェクトのmodulesディレクトリにインストールしてください。

ライブラリアンの人形(gem install librarian-puppet)を使用して、あなたが望むサードパーティのモジュールをすべて一覧表示している迷惑メールプロジェクトにPuppetfileを入れ、それらを配置するよう教えてくださいカスタムの人形モジュールに使用するものとは別のmodulesディレクトリにあります。私は第三者のモジュールのためにmodules-contribディレクトリを使用し、自分自身をmodules-customに入れます。

はどこにそのモジュールを置くために司書を教える:

librarian-puppet config --local path modules-contrib 

はPuppetfileのレイアウトのためのhttps://github.com/rodjek/librarian-puppetを参照してください。これはかなりシンプルで、あなたが好きなように人形鍛造とgitソースを混在させることができます。

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

+0

詳細な回答ありがとうございます。私がそれを試してみる機会を得て、これが私のために働くと、私はあなたの答えを受け入れます。 –

+0

それで、あなたはそれを試してみましたか?私の答えが良ければ、それを合格とマークしてください。 – mc0e

6

それはVagrant Documentationから読み取ったよう:

The Vagrant Puppet provisioner allows you to mount a local folder of modules onto the VM, and will configure Puppet to be aware of them, automatically.

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

そして:

The module path is expanded relative to the folder containing the Vagrantfile.

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

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

モジュールをVMではなくホストマシンに配置する必要があります。"mybox" の>ベースパスベイグラントVM

〜は/ dev/mybox/VagrantFile - - >ベイグラントファイル制御

ホストマシン

〜は/ dev/mybox /:ここでは例です"mybox"

〜は/ dev/mybox /人形/モジュール - > "mybox" で使用される人形モジュールへのパス

〜は/ dev/mybox /人形/モジュール/ apacheの - > 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 

VIRTUAL MACHINE

私はmyboxを開始します。■することができますように

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

その後、

[email protected]:~$ cd /tmp/vagrant-puppet/modules-0 
[email protected]:/tmp/vagrant-puppet/modules-0$ ls 
apache 

ホストマシンの〜/ Dev/mybox/puppet/modules/apacheディレクトリが、Vagrant VMの/ tmp/vagrant-puppet/modules-0にマウントされていました。

これが役に立ちます。私が持っていたのプロビジョニングに放浪のドキュメントから

:あなたが私に似ていると、この質問と回答を見つめ、あなたのケースで異なっていたかと思ってきた場合

0

ので、ここで私が行方不明になっているものですこのスニペットを拾っ:

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

ゲストで認識されるモジュールを取得しようとしたとき、私は(おそらくhereから)この行をピックアップ:

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

ルビーや迷路をよく知らないので、私はそれを何らかの形で追加すると仮定して、最初のスニペットの直下に置きます。それはうまくいかなかった。作業を何

は、しかし、これは次のようになります。

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

時には簡単な解決策を見つけるのが一番です。

[EDIT]

また、実行中のVMはあなたにそれがベイグラントによって呼び出されます際に人形が使用するのModulePathは表示されませんゲスト上でコマンド「人形は--configprintのModulePathを適用する」ということを理解するのに役立ちます。あなたが効果的に二回module_pathを指定している

関連する問題