我已经在我的模块中分配了一个现有的包提供程序(appdmg.rb)。我只是想要一个额外的参数“path”作为自定义安装目标路径。我在修改后的模块中使用了@resource [:path],并将它放在/ lib子目录中。重新启动puppet master之后,它会被正确识别并同步到代理 - 我在代理上的/ var / lib / puppet /中检查了它的可用性,但在测试运行期间出现参数错误:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter path at /etc/puppet/modules/xcode/manifests/init.pp:6 on node lon02-mac-09.local
清单代码是:
package {
"xcode-${version}" :
provider => 'appdmg2',
source => "/storage/xcode-${version}.dmg",
path => "/Applications/Xcode${version}.app",
}
为了让它有效,我还有什么特别的事吗?
答案 0 :(得分:3)
它并不那么简单。 provider
用作type
的后端。要让Puppet对package
类型使用其他参数,您必须将其添加到相应的类型代码中,例如upstream code中的source
参数。
将其修补后,@resource[:path]
确实应该在提供程序实例中工作。
当然,这样的添加不适合模块,所以你在技术上需要实际添加你自己的新类型(遗憾的是,还没有子类型)。
值得检查的是install_options或许可以使用现有的提供商解决您的问题。
答案 1 :(得分:1)
我能够添加一个新参数:
Puppet::Type.type(:package).newparam(:path) do
desc "Specify alternative package-path"
end
以上代码段位于modules/YOURMODULE/lib/puppet/provider/package/YOURPROVIDER.rb
- 位于同一文件中,实际的提供程序实现本身位于该文件中。
不幸的是,我仍然无法弄清楚,如何从我的新包提供程序中实际访问Puppet-manifest中指定的此参数的值...