木偶 4.0 流浪者模块丢失

puppet 4.0 vagrant modules missing

我正在尝试在 vagrant 中使用 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

更新了答案,现在已经提供了 Vagrantfile

puppet 4 中的位置已更改,directory environments 现在默认使用。

那么您使用 puppet provisioner 的方式是正确的。但是,vagrant 会根据你的 Vagrantfile 将它需要的所有目录上传到 guest 到: /tmp/vagrant-puppet/environments/production

当 Vagrant 调用 puppet apply 时,它将在以下位置寻找它需要的模块: /tmp/vagrant-puppet/environments/production/模块

并且您的主机上不存在该模块目录。

您可以将 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

当您进行 vagrant up 时,此内容会上传到以下主机:

/tmp/vagrant-puppet

已根据您的 Vagrantfile 进行测试和确认。

正如 Jaxim 提到的,这是因为默认目录位置在较新版本的 Puppet 中发生了变化。

如果你对使用 Puppet 自动安装模块感兴趣,我推荐 R10K vagrant 插件,你可以指定模块的版本并使更新它们更容易,并允许你下载不在 forge 上的模块,例如 git 回购。

https://github.com/jantman/vagrant-r10k

有点晚了,但我正在从 Chef 切换到 Puppet(公司政策,不要问!:))并且 运行 进入完全相同的情况并且来自 Chef 背景我拒绝"pollute" 我的项目文件夹有很多 Puppet 特定的东西。在我看来,我应该只需要 Vag运行tfile,没有别的。

我也收到了 "Could not find declared class java at /tmp/vagrant-puppet/environments/production" 错误消息。因此,经过一番折腾后,我发现在 puppet.options 中您可以提供在命令行调用 puppet apply 时通常会提供的任何参数。

因此,如果有任何帮助,请尝试修改 Vag运行t 文件中的 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 文件夹中的所有内容都可用,而是认为模块已经安装在它自己的文件夹位置。