我正在尝试为包创建一个自定义提供程序,但由于某些原因,我一直在
错误:无法运行Puppet配置客户端:参数提供程序 失败:无效的包提供商'piprs'在 /usr/local/src/ops/services/puppet/modules/test/manifests/init.pp:5
我在客户端和服务器的puppet.conf中添加了pluginsync = true。我在module / test / lib / puppet / provider / package / piprs.rb中创建了以下rb文件。我基本上是在尝试为包资源类型
创建自定义提供程序#require 'puppet/provider/package'
Puppet::Type.type(:package).provide(:piprs,
:parent => ::Puppet::Provider::Package) do
commands : pip => "/usr/local/bin/pip"
desc "Python packages via `pip`."
def create
pip "freeze"
end
def destroy
end
def exists?
end
end
在puppet.conf中,有以下源属性
pluginsource = puppet://puppet/plugins
我不确定它是什么。如果您需要更多详细信息,请发表评论。
答案 0 :(得分:2)
首先要做的事情 - 您是否意识到核心中已存在Python pip提供程序?
https://github.com/puppetlabs/puppet/blob/master/lib/puppet/provider/package/pip.rb
如果那不是您想要的 - 那么让我们继续......
对于初学者 - 尝试没有Puppet master的模块 - 无论如何这对于开发来说会更好。您需要确保Ruby可以找到库路径:
export RUBYLIB=<path_to_module>/lib
然后,尝试在.pp文件中编写一个小测试:
package { "mypackage": provider => "piprs" }
并在本地运行:
puppet apply mytest.pp
这将排除提供商中的代码错误与插件同步问题。
我注意到冒号和命令之间有一个空格 - 这不是你的问题吗?
commands : pip => "/usr/local/bin/pip"
如果您可以在没有puppetmaster的情况下工作,那么您的问题与同步有关。
有几件事可能出错 - 确保文件在客户端上正确同步:
ls /var/lib/puppet/lib/puppet/provider/package
你应该在那里看到piprs.rb文件。如果是,您可能需要确保正确设置了libdir:
puppet --configprint libdir
在大多数情况下,这应该指向/ var / lib / puppet / lib。