我正在尝试在流浪汉中使用木偶模块。 我的盒子正在运行puppet 4.0
我正在使用以下方式安装模块:
if [ ! -d /etc/puppet/modules/ ]; then
puppet module install puppetlabs-java
fi
site.pp
中的我有:
class { 'java':
distribution => 'jdk',
}
我一直收到关于could not find declared class java
的错误
为什么木偶不能找到我的模块?
/etc/puppet/modules/
是默认路径吗?
流浪文件
Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-7.2"
config.vm.provider "virtualbox" do |vb|
vb.gui = true
vb.memory = "8192"
end
config.vm.provision :shell, :path => "upgrade_puppet.sh"
config.vm.provision :shell, :path => "puppet_modules.sh"
config.vm.provision :puppet do |puppet|
puppet.options = '--verbose --debug'
puppet.environment_path = "puppet/environments"
puppet.environment = "production"
end
end
答案 0 :(得分:3)
现在已经提供了Vagrantfile的更新答案
木偶4中的位置已更改,默认情况下directory environments正在使用中。
所以你如何使用木偶供应商是正确的。但是,vagrant会根据您的Vagrantfile将所需的所有目录上传到guest虚拟机: 的/ tmp /流浪木偶/环境/生产
当Vagrant调用puppet时,它将寻找它所需的模块: 的/ tmp /流浪木偶/环境/生产/模块
并且您的主机上不存在该模块目录。
您可以将if块更改为:
if [ ! -d /vagrant/puppet/environments/production/modules ]; then
puppet module install puppetlabs-java --modulepath /vagrant/puppet/environments/production/modules
fi
/ vagrant在主机和来宾之间共享。这将在下面的主机上安装java模块及其依赖项:
puppet
|
+--environments
+
-- production
|
+ -- manifests
| +
| -- site.pp
|
+ -- modules
+
-- java
+
-- stdlib
当您完成流浪时,此内容将上传到主机:
/tmp/vagrant-puppet
根据您的Vagrantfile进行测试和确认。
答案 1 :(得分:0)
正如Jaxim所提到的那样,因为默认目录位置在较新版本的Puppet中已经改变。
如果您对使用Puppet自动安装模块感兴趣,我推荐使用R10K vagrant插件,您可以指定模块的版本并使更新更容易,并允许您下载不在伪造,比如git repos。
答案 2 :(得分:0)
有点晚了,但我正在从Chef转到Puppet(公司政策,不要问!:))并遇到完全相同的情况并且来自Chef背景我拒绝“污染”我的项目文件夹有这么多Puppet特定的东西。在我看来,我只需要Vagrantfile而不需要其他内容。
我也得到了“无法在/ tmp / vagrant-puppet / environments / production中找到声明的类java”错误消息。所以,经过多次搞乱后,我发现在puppet.options
中你可以提供在命令行调用puppet apply
时通常会提供的任何参数。
因此,如果有任何帮助尝试修改Vagrantfile中的puppet.options,如下所示:
config.vm.provision :puppet do |puppet|
puppet.options = '--verbose --modulepath=/etc/puppetlabs/code/environments/production/modules'
puppet.environment_path = "puppet/environments"
puppet.environment = "production"
end
这将有助于Puppet找到自己的鼻子而不是认为/ tmp文件夹中的所有内容都可用,但模块已经安装在自己的文件夹位置。