2016-07-18 114 views
5

devo più server nifi che mi piacerebbe essere in grado di pubblicare modelli per tramite l'interfaccia REST da uno scriptInvia un modello NIFI tramite REST?

Il "/ regolatore/templates" punto finale sembra essere il corretto endpoint REST per sostenere registrando un modello arbitrario alla mia installazione Nifi. enter image description here Il campo "snippetId" è ciò che mi è confusa, come determino "L'id del frammento di cui contenuto sarà composto il modello"? Qualcuno ha un esempio di come è possibile caricare un modello "test.xml" al mio server senza dover utilizzare l'interfaccia utente?

risposta

3

La documentazione fornita è un po 'confuso, e la soluzione ho lavorato è stato derivato dal api nifi distribuire lo script Groovy a https://github.com/aperepel/nifi-api-deploy

In definitiva, Inserisci direttamente un modello, è possibile utilizzare il seguente in Python richiede

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

Dove nomefile è il nome file del modello e url è il percorso dell'istanza nifi. Non l'ho capito in ricciolo direttamente ma questo dovrebbe sperare di ottenere gente con una domanda simile iniziata!

Modifica: Si noti inoltre che non è possibile caricare un modello con lo stesso nome di un modello esistente. Assicurati di eliminare il modello esistente prima di provare a ricaricare. Utilizzando la libreria Districare per analizzare il codice XML del modello, il seguente script funziona bene:

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

Questo endpoint resto è per nifi 0,6 .. come possiamo farlo in 1.0 ? –

1

La documentazione può essere fonte di confusione perché questo endpoint è sovraccarico e strumento di documentazione genera solo doc per uno di loro (vedi NIFI-1113). C'è un email thread che affronta l'importazione di un modello usando ricciolo, quindi tra la risposta di cui sopra e il thread di posta elettronica, si spera si può trovare l'approccio che funziona per voi.

1

Se si desidera pubblicare un modello per NiFi via cURL è possibile utilizzare il seguente comando:

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

Questo aggiungerà il modello per l'istanza NiFi con lo stesso nome che il modello è stato dato quando era generato.

E il -iv è facoltativo - E 'lì solo per scopi di debug.

+0

Questo endpoint resto è per nifi 0,6 .. come possiamo farlo in 1.0? –

2

L'API è mosso in 1.0 to:

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

esempio, utilizzando Python richieste libreria:

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