在puppet中向自定义提供程序添加参数

时间:2014-05-06 14:28:30

标签: puppet

我已经在我的模块中分配了一个现有的包提供程序(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",
}

为了让它有效,我还有什么特别的事吗?

2 个答案:

答案 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中指定的此参数的值...