puppet 无法从安装的模块 apache 中找到 class

puppet cannot find class from installed module 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 中的配置程序如下所示:

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

environment.conf 不正确,因为你在本地安装了模块,它们将在你的 VM 的 /vagrant 目录下共享,所以你应该引用它。 (当您在 puppet provisioner 块中指定 puppet.modules 路径时,它们会在您的 /etc/puppet 目录中共享)

但是我的建议是添加一个简单的 shell 配置器,它将为您安装模块(并管理 sudo 部分)- 在您的 vagrantfile 中(在 puppet 配置器之前)

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