2016-11-22 127 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 

我在这里错过了什么?

编辑:
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

在Vagrantfile您的机器上设置的 “localhost” 的主机名? – k0chan

+0

你的'environment.conf'中的'modulepath'有哪些值? –

+0

@ k0chan不是它没有设置,但添加'config.vm.hostname =“localhost”'给出了相同的结果 – user3528269

回答

3

environment.conf是不正确的,因为你的/vagrant目录下安装在本地,他们会在你的虚拟机共享的模块,因此,你应该改为引用此。 (当你在你的木偶配置块中指示puppet.modules路径时,它们在你的/etc/puppet目录中共享)

但是我建议添加一个简单的shell配置器,它将为你安装模块(并管理sudo部分) - 在你vagrantfile(前木偶供应方)

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

在你script.sh

#!/bin/bash 

puppet module install puppetlabs-apache --version 1.10.0 

这将安装在/ etc/puppetlabs模块......这样你就可以在引用此您environment.conf

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

啊,谢谢你。不知道它在vm中搜索模块..但是有道理..你的解决方案很接近,它不在vm中的'/ etc/puppetlabs/code/environments/test/modules'下,而是在'/ etc/puppetlabs /代码/环境/生产/ modules'。 – user3528269