2011-11-17 84 views
1

我试图创建包的自定义提供商,但由于某种原因,我不断获取木偶不承认我的模块

错误:无法运行木偶配置客户端:失败参数提供 :无效的包装供应商“ piprs'在 /usr/local/src/ops/services/puppet/modules/test/manifests/init.pp:5

我在客户端和服务器在puppet.conf添加pluginsync =真。我在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 

我不知道它是什么。如果您需要更多详情,请发表评论。

回答

2

首先要做的第一件事 - 你是否意识到核心中已经有一个Python pip提供者?

https://github.com/puppetlabs/puppet/blob/master/lib/puppet/provider/package/pip.rb

如果这不是你想要的 - 然后让我们讨论...

对于初学者 - 试试你的模块没有一个木偶大师 - 这将是更好的发展呢。你需要确保红宝石可以找到库路径:

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中/傀儡/在大多数情况下的lib。

+0

谢谢..我会测试它并更新你..但它非常具有描述性。我希望它能帮助我解决问题!而且我意识到已经有一个流行提供者,我试图写一个新的,但要学习 –