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 には、次のソース属性があります。

      pluginsource = puppet://puppet/plugins

私はそれが何であるか分かりません。さらに詳細が必要な場合は、コメントを投稿してください。

4

1 に答える 1

2

まず最初に、コアに Python pip プロバイダーが既に存在することに気付きましたか?

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

それがあなたの望むものでないなら - 次に進みましょう...

手始めに、Puppet マスターなしでモジュールを試してみてください。とにかく、これは開発に適しています。Ruby がライブラリ パスを見つけられるようにする必要があります。

export RUBYLIB=<path_to_module>/lib

次に、小さなテストを .pp ファイルに書いてみます。

package { "mypackage": provider => "piprs" }

ローカルで実行します。

puppet apply mytest.pp

これにより、プロバイダーのコード バグとプラグインの同期の問題が除外されます。

コロンとコマンドの間にスペースがあることに気付きました - それはあなたの問題ではありませんか?

commands : pip => "/usr/local/bin/pip"

操り人形マスターなしでこれを機能させることができる場合、問題は同期に関連しています。

うまくいかないことがいくつかあります。ファイルがクライアントで正しく同期されていることを確認してください。

ls /var/lib/puppet/lib/puppet/provider/package

そこに piprs.rb ファイルが表示されるはずです。そうであれば、libdir が正しく設定されていることを確認する必要があるかもしれません:

puppet --configprint libdir

ほとんどの場合、これは /var/lib/puppet/lib を指すはずです。

于 2011-11-18T16:07:19.560 に答える