2017-04-26 5 views
0

나는 을 기반으로 자동화하기 위해 Apache Nifi을 쓰고 있는데, 나는 tool이라고 쓰고있다. 이 도구는 루비 보석이므로 내 Nifi manifest 안에 꼭두각시 유형/공급자로 사용하고 싶습니다.인형 연결 고리를 연결

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)는 다음과 같습니다 :

유형 (lib 디렉토리/인형/형/nifi_pg.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

좀 더 쉬운 방법이 있지만 꼭두각시는 exec arbitrary commands이고, curl과 결합하여 NiFi REST API을 치고 필요한 모든 프로세스 그룹 ID를 검색 할 수 있습니다. PG ID를 Ruby 변수에 추출하고 다음 명령에서 참조하십시오.

+0

이것은 그가 요구하는 것이 아닙니다. 그는 하나의 카탈로그 응용 프로그램에서이 작업을 수행하려고합니다. 이는 사용자의 제안으로는 불가능합니다. –

+0

'curl' 스크립트는 Ruby 코드에서 참조되는 [ "외부 사실"] (https://docs.puppet.com/facter/2.1/custom_facts.html#external-facts)로 정의 할 수 있습니까? – Andy

+0

아니요, 적용되기 전에 카탈로그 편집 중에 해결되기 때문입니다. –