我有多个nifi服务器,我希望能够通过脚本从REST界面发布模板
“/ controller / templates”端点似乎是正确的REST端点,支持将任意模板POST到我的Nifi安装中。 “snippetId”字段让我很困惑,如何确定“内容将包含模板的片段的ID”?有没有人有一个例子,说明如何在不使用UI的情况下将模板“test.xml”上传到我的服务器?
答案 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"