Vagrant puppet无法从已安装的模块apache中找到类

Vagrant puppet无法从已安装的模块apache中找到类,vagrant,puppet,Vagrant,Puppet,这可能只是一个基本问题,但我找不到解决办法。我设置了一个环境,希望在其中使用puppetlabs提供的apache模块。 我的木偶版本是3.7.2 我的目录树: . ├── environments │   └── test │   ├── environment.conf │   ├── manifests │   │   └── site.pp │   └── modules │   ├── apache │   │   └──

这可能只是一个基本问题,但我找不到解决办法。我设置了一个环境,希望在其中使用puppetlabs提供的apache模块。
我的木偶版本是3.7.2
我的目录树:

.
├── environments
│   └── test
│       ├── environment.conf
│       ├── manifests
│       │   └── site.pp
│       └── modules
│           ├── apache
│           │   └── manifests
│           │       ├── init.pp
│           │       └── vhost_basic.pp
│           └── update
│               └── manifests
│                   └── init.pp
└── Vagrantfile
Vagrantfile中的provisioner如下所示:

config.vm.provision :puppet do |puppet|  
  puppet.environment_path = "environments"  
  puppet.environment = "test"  
  puppet.options = ['--verbose']
end
my 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中,我只有
包含apache
。我通过
puppetmoduleinstallpuppetlabsapache
安装了apache模块。它还存储在
home/user/.puppet/modules
中。我还通过sudo安装了该模块(因为我在某个地方读到它起到了作用)。但当我运行《流浪者条款》时,它告诉我:

 ==> 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

您的
environment.conf
不正确,因为您在本地安装了模块,这些模块将在您的VM中
/vagrant
目录下共享,因此您应该参考此文件。(当您在puppet provisioner块中指示
puppet.modules
路径时,它们在
/etc/puppet
目录中共享)

然而,我建议添加一个简单的shell provisioner,它将为您安装模块(并管理sudo部分)——在您的vagrantfile中(在puppet provisioner之前)

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

您的
environment.conf
不正确,因为您在本地安装了模块,这些模块将在您的VM中
/vagrant
目录下共享,因此您应该参考此文件。(当您在puppet provisioner块中指示
puppet.modules
路径时,它们在
/etc/puppet
目录中共享)

然而,我建议添加一个简单的shell provisioner,它将为您安装模块(并管理sudo部分)——在您的vagrantfile中(在puppet provisioner之前)

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

在Vagrantfile中,您的计算机已将主机名设置为“localhost”?您在
环境.conf
中的
modulepath
有哪个值?@k0chan不是未设置,而是添加了
config.vm.hostname=“localhost”
给出了相同的结果result@FrédéricHenri my
environment.conf
如下所示:
modulepath=./modules:$basemodulepath:/etc/puppet/modules
,还有模块apache。如果我删除此文件,则会得到相同的结果。在Vagrantfile中,您的计算机已将主机名设置为“localhost”?您在
环境.conf
中的
modulepath
的值是多少?@k0chan不是没有设置,而是添加了
config.vm.hostname=“localhost”
给出了相同的结果result@FrédéricHenri my
environment.conf
如下所示:
modulepath=./modules:$basemodulepath:/etc/puppet/modules
,还有模块apache。如果我删除这个文件,它会有相同的结果。啊,谢谢你。不知道它在vm内搜索模块。。但是有道理。。您的解决方案很接近,它不在虚拟机内部的
/etc/puppetlabs/code/environments/test/modules
下,而是在
/etc/puppetlabs/code/environments/production/modules
下。谢谢。不知道它在vm内搜索模块。。但是有道理。。您的解决方案很接近,它不在虚拟机内部的
/etc/puppetlabs/code/environments/test/modules
下,而是在
/etc/puppetlabs/code/environments/production/modules
下。