1

我正在尝试为包创建一个自定义提供程序,但由于某些原因,我不断得到

错误:无法运行 Puppet 配置客户端:参数提供程序失败:/usr/local/src/ops/services/puppet/modules/test/manifests/init.pp:5 处的包提供程序“piprs”无效

我在客户端和服务器的 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中,有如下source属性

      pluginsource = puppet://puppet/plugins

我不确定它是什么。如果您需要更多详细信息,请发表评论。

4

1 回答 1

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。

于 2011-11-18T16:07:19.560 回答