Post 通过 REST 的 NIFI 模板?

Post a NIFI template via REST?

我有多个 nifi 服务器,我希望能够通过脚本中的 REST 接口POST 模板

“/controller/templates”端点似乎是正确的 REST 端点,可以支持 POST将任意模板连接到我的 Nifi 安装。 "snippetId" 字段让我很困惑,我如何确定 "The id of the snippet whose contents will comprise the template"?有没有人有一个例子,说明我如何在不使用 UI 的情况下将模板 "test.xml" 上传到我的服务器?

提供的文档有些混乱,我制定的解决方案是从 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 实例的路径。我还没有直接在 curl 中弄清楚,但这应该能让有类似问题的人开始!

编辑: 请注意,您也不能上传与现有模板同名的模板。在尝试重新上传之前,请确保删除现有模板。使用untangle库解析模板的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])

文档可能会令人困惑,因为该端点过载并且文档工具仅为其中之一生成文档(请参阅 NIFI-1113). There is an email thread 解决使用 curl 导入模板的问题,因此在上述答案和电子邮件线程,希望您能找到适合您的方法。

如果您想通过 cURL POST NiFi 模板,您可以使用以下命令:

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

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

并且 -iv 是可选的 - 它只是用于调试目的。

API 已在 1.0 中移动到:

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

示例,使用 Python 的请求库:

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

我在 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(比模板流部署好很多)

您可以使用 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"