2016-11-22 10 views
1

これはたぶん基本的な質問ですが、私は解決策を見つけることができません。私はpuppetlabsによって与えられたapacheモジュールを使いたい環境を設定しました。
私の人形のバージョンは、私のディレクトリの3.7.2
ツリーです:人形はインストールされたモジュールからクラスを見つけることができませんapache

. 
├── environments 
│   └── test 
│    ├── environment.conf 
│    ├── manifests 
│    │   └── site.pp 
│    └── modules 
│     ├── apache 
│     │   └── manifests 
│     │    ├── init.pp 
│     │    └── vhost_basic.pp 
│     └── update 
│      └── manifests 
│       └── init.pp 
└── Vagrantfile 

Vagrantfile内部の私のプロビジョニングは、次のようになります。

config.vm.provision :puppet do |puppet| 
    puppet.environment_path = "environments" 
    puppet.environment = "test" 
    puppet.options = ['--verbose'] 
end 

私site.pp:

Exec { path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ] } 
include update 

node 'localhost' { 
    class { 'apache': }    # use apache module 
    apache::vhost { 'example.com': # define vhost resource 
    port => '80', 
    docroot => '/var/www/html' 
    } 
} 

apaches内(ディレクトリ)init.pp私はinclude apacheしか持っていません。そして、私はpuppet module install puppetlabs-apache経由でApacheモジュールをインストールしました。また、home/user/.puppet/modulesにも格納されています。私はまた、sudoを介してモジュールをインストールしました。私はvagrant provisionを実行したときしかし、それは私に言う:

==> default: Running provisioner: puppet... 
==> default: Running Puppet with environment test... 
==> default: Error: Evaluation Error: Error while evaluating a Resource Statement, Could not find declared class apache at /tmp/vagrant-puppet/environments/test/manifests/site.pp:16:3 on node localhost 

は、私がここで何をしないのですか?

EDIT:
puppet config print |grep pathの結果は次のとおりです。

path = none 
environmentpath = 
basemodulepath = /home/user/.puppet/modules:/usr/share/puppet/modules 
modulepath = /home/user/.puppet/modules:/usr/share/puppet/modules 
factpath = /home/user/.puppet/var/lib/facter:/home/user/.puppet/var/facts 
+0

あなたのマシンは "localhost"でホスト名を設定していますか? – k0chan

+0

あなたの 'environment.conf'には' modulepath'の値はありますか? –

+0

@ k0chanそれは設定されていませんでしたが、 'config.vm.hostname =" localhost "を追加すると同じ結果が得られます – user3528269

答えて

3

あなたenvironment.confは、あなたがローカルにモジュールをインストールしてあなたの代わりにこれを参照する必要がありますので、彼らは/vagrantディレクトリの下に、あなたのVM内で共有され、正しくありません。 (あなたは人形のプロビジョニングブロックにpuppet.modulesパスを示しているとき、彼らはあなたの/etc/puppetディレクトリに共有されている)

しかし、私が提案する何のためにモジュールをインストールする単純なシェルプロビジョニングを追加(とsudoの部分を管理)することです - あなたがこの中に参照できるように、vagrantfileであなたのscript.sh

#!/bin/bash 

puppet module install puppetlabs-apache --version 1.10.0 

で(人形のプロビジョニング前)

config.vm.provision :shell, path: "/path/to/script.sh" 

これは...の/ etc/puppetlabsにモジュールをインストールしますあなたの

modulepath = /etc/puppetlabs/code/environments/production/modules:$basemodulepath 
+1

ああ、ありがとう。あなたの解決策は近いものでしたが、VM内の '/ etc/puppetlabs/code/environments/test/modules'ではなく'/etc/puppetlabs/code/environments/production/modules'にあります。 – user3528269

関連する問題