通过REST发布NIFI模板?

时间:2016-07-18 21:57:00

标签: apache-nifi

我有多个nifi服务器,我希望能够通过脚本从REST界面发布模板

“/ controller / templates”端点似乎是正确的REST端点,支持将任意模板POST到我的Nifi安装中。 enter image description here “snippetId”字段让我很困惑,如何确定“内容将包含模板的片段的ID”?有没有人有一个例子,说明如何在不使用UI的情况下将模板“test.xml”上传到我的服务器?

6 个答案:

答案 0 :(得分:4)

提供的文档有些令人困惑,我制定的解决方案源于https://github.com/aperepel/nifi-api-deploy

的nifi api deploy groovy脚本。

最终,要直接POST模板,您可以在Python请求中使用以下内容

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

其中filename是模板的文件名,url是nifi实例的路径。我还没有直接把它弄清楚,但这应该会让人们开始提出类似的问题!

编辑: 请注意,您也无法上传与现有模板同名的模板。在尝试重新上传之前,请务必删除现有模板。使用解开库来解析模板的XML,以下脚本可以正常工作:

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])

答案 1 :(得分:4)

API已在1.0中移动到:

Public class AccountState { public double upperlimit {get;set} public double lowerlimit {get;set} } public class BronzeState : AccountState { private static BronzeState bronzeState; private BronzeState(){} public GetInstance() { if (bronzeState != null) return bronzeState; else { bronzeState = new BronzeState(); return bronzeState; } } } //Same goes for GoldState, SilverState, PlatinumState

示例,使用Python的请求库:


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

答案 2 :(得分:2)

如果您想通过cURL将模板发布到NiFi,可以使用以下命令:

curl -iv -F template=@my_nifi_template.xml -X POST  http://nifi-host:nifi-port/nifi-api/controller/templates

这会将模板添加到NiFi实例,其名称与生成模板时的模板名称相同。

-iv是可选的 - 它仅用于调试目的。

答案 3 :(得分:1)

文档可能会造成混淆,因为该端点过载,文档工具只为其中一个生成doc(请参阅NIFI-1113)。有一个email thread使用curl解决了模板的导入,所以在上面的答案和电子邮件主题之间,希望你能找到适合你的方法。

答案 4 :(得分:1)

我已经在NiPyApi中实现了一个完整的Python客户端
模板的关键功能是:

 [
    "list_all_templates", "get_template_by_name", "deploy_template",
    "upload_template", "create_pg_snippet", "create_template",
    "delete_template", "export_template", 'get_template'
]

该客户端当前支持NiFi-1.1.2-1.7.1和NiFi-Registry(这比流部署模板要好得多)

答案 5 :(得分:0)

您可以使用Nifi Api上传模板,请按照以下两个步骤操作:

1。从Nifi Api获取令牌:

token=$(curl -k -X POST --negotiate -u : https://nifi_hostname:port/nifi-api/access/kerberos)

2。使用令牌上传模板文件:

curl -k -F template=@template_file.xml -X POST https://nifi_hostname:port/nifi-api/process-groups/Process_group_id/templates/upload -H "Authorization: Bearer $token"