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
这可能只是一个基本问题,但我找不到解决方案。我设置了一个环境,我想使用 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