木偶 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 回购。
有点晚了,但我正在从 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 文件夹中的所有内容都可用,而是认为模块已经安装在它自己的文件夹位置。
我正在尝试在 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 回购。
有点晚了,但我正在从 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 文件夹中的所有内容都可用,而是认为模块已经安装在它自己的文件夹位置。