2016-07-18 15 views
5

Mam wielu serwerów nifi że chciałbym być w stanie opublikować szablony za pośrednictwem interfejsu REST ze skryptuOpublikuj szablon NIFI poprzez REST?

„/ kontroler/Szablony” punkt końcowy wydaje się być właściwa końcowych REST wspierać księgowania dowolny szablon do mojej instalacji Nifi. enter image description here Pole "snippetId" mnie wprawia w zakłopotanie, jak określić "Identyfikator fragmentu, którego treść będzie zawierała szablon"? Czy ktoś ma przykład, jak mogę przesłać szablon "test.xml" na mój serwer bez konieczności używania interfejsu?

Odpowiedz

3

Dostarczona dokumentacja jest nieco mylące, a roztwór wypracowałem pochodzi od api nifi wdrożyć groovy skrypt na https://github.com/aperepel/nifi-api-deploy

Ostatecznie, aby umieścić szablon bezpośrednio, można użyć następujących w Pythonie żąda

requests.post("%s/nifi-api/controller/templates"%(url,), files={"template":open(filename, 'rb')}) 

Gdzie nazwa_pliku jest nazwą pliku szablonu, a adres url jest ścieżką do instancji nifi. Nie wymyśliłem tego bezpośrednio, ale powinno to sprawić, że ludzie zaczną podobne pytanie!

Edytuj: Pamiętaj, że nie możesz też przesłać szablonu o tej samej nazwie co istniejący szablon. Pamiętaj o usunięciu istniejącego szablonu przed próbą ponownego przesłania. Korzystanie z Rozplątać biblioteki do analizowania XML szablonu następujący skrypt działa dobrze:

import untangle, sys, requests 

def deploy_template(filename, url): 
    p = untangle.parse(filename) 
    new_template_name=p.template.name.cdata 
    r=requests.get("%s/nifi-api/controller/templates"%(url,), headers={"Accept":"application/json"}) 

    for each in r.json()["templates"]: 
     if each["name"]==new_template_name: 
      requests.delete(each["uri"]) 
    requests.post("%s/nifi-api/controller/templates"%(url,), files={"template":open(filename, 'rb')}) 

if __name__=="__main__": 
    deploy_template(sys.argv[1], sys.argv[2]) 
+0

Ten punkt końcowy reszta jest dla nifi 0,6 .. w jaki sposób możemy to zrobić na 1,0 ? –

1

Dokumentacja może być mylące, ponieważ końcowy jest przeciążony, a narzędzie dokumentacji tylko generuje doc dla jednego z nich (patrz NIFI-1113). Istnieje email thread, który zajmuje się importowaniem szablonu za pomocą curl, więc pomiędzy powyższą odpowiedzią a wątkiem wiadomości e-mail, miejmy nadzieję, że znajdziesz podejście, które działa dla ciebie.

1

Jeśli chcesz opublikować szablon NiFi przez cURL można użyć następującego polecenia:

curl -iv -F [email protected]_nifi_template.xml -X POST http://nifi-host:nifi-port/nifi-api/controller/templates 

Spowoduje to dodanie szablonu do instancji NiFi o tej samej nazwie, że szablon nadano kiedy to było wygenerowany.

Opcja -iv jest opcjonalna - służy tylko do debugowania.

+0

Ten końcowy punkt końcowy jest dla nifi 0.6 .. jak możemy to zrobić w wersji 1.0? –

2

API został przeniesiony w 1,0:

POST /process-groups/{id}/templates/upload

przykład za pomocą Pythona wnioski Biblioteka:

res = requests.post("{hostname}/nifi-api/process-groups/{destination_process_group}/templates/upload".format(**args), 
    files={"template": open(file_path, 'rb')}) 
Powiązane problemy