2017-04-26 107 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

不,因为在应用之前在目录编译期间解决了这些问题。 –