2017-04-26 7 views
0

私はApache Nifiを使用しています。私はNifi APIに基づいてそれを自動化するためにtoolを書いています。このツールはルビーの宝石ですので、私はNifi manifestの中の人形タイプ/プロバイダとして使いたいと思っています。傀儡プロバイダの連鎖

タイプ(のlib /人形/タイプ/ nifi_pg.rb)は次のようになります。

Puppet::Type.newtype(:nifi_pg) do 
    @doc = "Manage Nifi process groups" 

    ensurable 

    newparam(:name) do 

    isnamevar 

    desc "Process group Name" 

    validate do |value| 
    end 
    end 

    newparam(:id) do 
    desc "Process group ID" 

    validate do |value| 
    end 
    end 
end 

プロバイダ(のlib /人形/プロバイダ/ nifi_pg/ruby​​.rb)次のようになります。

require 'nifi_sdk_ruby' 

Puppet::Type.type(:nifi_pg).provide(:ruby) do 

    def create 
     nifi_client = Nifi.new() 
     nifi_client.set_debug(true) 
     nifi_client.create_process_group(:name => resource[:name]) 
    end 

    def destroy 
     nifi_client = Nifi.new() 
     nifi_client.set_debug(true) 
     nifi_client.delete_process_group(resource[:id]) 
    end 

    def exists? 
     false 
    end 
end 

それを使用することは簡単です:

nifi_pg {"test": 
    ensure => present 
} 

問題は、たとえば、この新しいプロセスグループにテンプレートをアップロードするために、作成したリソース(新しいプロセスグループIDのような)に関するいくつかの情報が必要です。パペットのリソースは何も返しません。

回避策はありますか?

私は答えがないと思います。

このexplanationは完全に説明しています。

+0

ファクトと関数がコンパイル時に実行され、この問題を解決するにはどちらかまたは両方が必要なので、これは不可能です。しかし、この理論的なテンプレートの質問を、リソースとテンプレートの外観について編集できますか?その場合の回避策があるかもしれません。 –

+0

あるいは、これはノード上で実行する必要があるものですか?そうでなければ、そこにも道があります。 –

答えて

0

これを達成するためのより簡単な方法がありますが、Puppetではexec arbitrary commandsを使用できます。これをcurlと組み合わせてNiFi REST APIにヒットし、必要なプロセスグループIDを取得できます。 PG IDをRuby変数に抽出し、次のコマンドで参照するだけです。

+0

これは彼が求めていることではありません。彼はあなたの提案では不可能な1つのカタログアプリケーションでそれをやりたがっています。 –

+0

'curl'スクリプトはRubyコードから参照される["外部事実 "](https://docs.puppet.com/facter/2.1/custom_facts.html#external-facts)として定義できますか? – Andy

+0

いいえ、適用前にカタログのコンパイル中に解決されるためです。 –