2017-04-26 118 views
0

我使用的是Apache Nifi,我正在編寫一個tool以基於Nifi API自動化。這個工具是一個紅寶石寶石,所以我想用它作爲我的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 
} 

問題是我需要關於創建資源的一些信息(如新進程組標識)來使用它,例如,將模板上傳到此新進程組。木偶資源不會返回任何東西。

任何想法解決?我想答案不是。

這個explanation完美地解釋它。

+0

關閉我的頭頂,這是不可能的,因爲事實和函數在編譯時執行,並且您需要一個或兩個來解決此問題。但是,您是否可以編輯此理論模板的問題,以瞭解資源和模板的外觀?這種情況可能有解決方法。 –

+0

或者,這是否需要在節點上執行?如果不是的話,那裏也有前進的道路。 –

回答

0

可能有更簡單的方法來完成此操作,但Puppet允許您登錄到exec arbitrary commands,您可以將其與curl組合起來,以打NiFi REST API並檢索任何必需的進程組ID。將PG ID提取到一個Ruby變量,並在下一個命令中簡單地引用它。

+0

這不是他所問的。他希望在一個目錄應用程序中執行此操作,這對於您的建議是不可能的。 –

+0

可以將'curl'腳本定義爲從Ruby代碼引用的[「external fact」](https://docs.puppet.com/facter/2.1/custom_facts.html#external-facts)嗎? – Andy

+0

不,因爲在應用之前在目錄編譯期間解決了這些問題。 –