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"
我有多个 nifi 服务器,我希望能够通过脚本中的 REST 接口POST 模板
“/controller/templates”端点似乎是正确的 REST 端点,可以支持 POST将任意模板连接到我的 Nifi 安装。
提供的文档有些混乱,我制定的解决方案是从 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"