【问题标题】:Post a NIFI template via REST?通过 REST 发布 NIFI 模板?
【发布时间】:2016-07-18 21:56:59
【问题描述】:

我有多个 nifi 服务器,我希望能够通过脚本通过 REST 接口将模板发布到

“/controller/templates”端点似乎是支持将任意模板发布到我的 Nifi 安装的正确 REST 端点。 “sn-pId”字段让我感到困惑,我如何确定“其内容将包含模板的 sn-p 的 id”?有没有人可以举例说明如何在不使用 UI 的情况下将模板“test.xml”上传到我的服务器?

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    提供的文档有些混乱,我制定的解决方案源自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 0.6.. 我们如何在 1.0 上做到这一点?
    【解决方案2】:

    API 已在 1.0 中移至:

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

    示例,使用 Python 的 requests 库:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 这个休息端点适用于 nifi 0.6.. 我们如何在 1.0 上做到这一点?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-23
            • 2016-09-06
            • 2016-11-29
            • 1970-01-01
            • 2018-07-31
            • 2018-09-13
            • 1970-01-01
            • 2016-09-18
            相关资源
            最近更新 更多