我尝试使用Netflix Conductor中的Python客户端代码创建任务,但无论如何调用都会出错:
from conductor import conductor
import json
server_url = "http://localhost:8080/api"
task_def = '''[{
"name": "verify_if_idents_are_added",
"retryCount": 3,
"retryLogic": "FIXED",
"retryDelaySeconds": 10,
"timeoutSeconds": 300,
"timeoutPolicy": "TIME_OUT_WF",
"responseTimeoutSeconds": 180,
"ownerEmail": "a@a.com"
}]'''
metadataClient = conductor.MetadataClient(server_url)
metadataClient.registerTaskDef(task_def)ERROR: {"status":400,"message":"Validation failed, check below errors for detail.","retryable":false,"validationErrors":[{"path":"updateTaskDef.arg0.ownerEmail","message":"ownerEmail cannot be empty"}]}
...
HTTPError: 400 Client Error: Bad Request for url: http://localhost:8080/api/metadata/taskdefs另外:
task_def_json = json.loads(task_def)
metadataClient.registerTaskDef(task_def_json)获取:
ERROR: {"code":"INTERNAL_ERROR","message":"INTERNAL_ERROR - Cannot deserialize instance of `com.netflix.conductor.common.metadata.tasks.TaskDef` out of START_ARRAY token\n at [Source: (org.eclipse.jetty.server.HttpInputOverHTTP); line: 1, column: 1]","retryable":false,"instance":"d4f36b3da428"}
...
HTTPError: 500 Server Error: Internal Server Error for url: http://localhost:8080/api/metadata/taskdefs如何使用此Python模块创建任务?
发布于 2020-09-13 05:38:10
因为HTTP请求非常简单,所以我建议直接使用请求来发布,而不是使用可能没有人使用的过时的python客户端。这是一个DIY任务定义帖子:
import requests
req_header={'Content-Type': 'application/json', 'Accept': 'application/json'}
task_def_endpoint='http://localhost:8080/api/metadata/taskdefs'
task_def = '''[{"name": "verify_if_idents_are_added", "retryCount": 3, "retryLogic": "FIXED", "retryDelaySeconds": 10, "timeoutSeconds": 300, "timeoutPolicy": "TIME_OUT_WF", "responseTimeoutSeconds": 180, "ownerEmail": "a@a.com"}]'''
response= requests.post(task_def_endpoint, data=task_def, headers=req_header)
print(response.status_code)现在你可以跳过下面的额外信息,完成它,但如果你好奇,请继续阅读。
如果您对Netflix python客户端附带的conductor包发生了什么感到好奇,请查看https://github.com/Netflix/conductor/blob/master/client/python/conductor/conductor.py
您将看到MetadataClient的registerTaskDef()和updateTaskDef()实际上都在调用update或PUT端点,而不是create (POST端点)。假设您已经在conductor上定义了verify_if_idents_are_added ,例如via
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '[{"name": "verify_if_idents_are_added", "retryCount": 3, "retryLogic": "FIXED", "retryDelaySeconds": 10, "timeoutSeconds": 300, "timeoutPolicy": "TIME_OUT_WF", "responseTimeoutSeconds": 180, "ownerEmail": "a%40a.com"}]' 'http://localhost:8080/api/metadata/taskdefs'您将发现以下代码可以工作(请注意,任务不再位于列表元素中,因为这正是PUT端点所期望的):
task_def = '''{"name": "verify_if_idents_are_added", "retryCount": 3, "retryLogic": "FIXED", "retryDelaySeconds": 10, "timeoutSeconds": 300, "timeoutPolicy": "TIME_OUT_WF", "responseTimeoutSeconds": 180, "ownerEmail": "a@a.com"}'''
metadataClient.registerTaskDef(task_def)所以在我看来,这个客户端的registerTaskDef完全是蓝精灵的。你可以创建PR来修复它,或者只使用requests来做你需要的事情。
https://stackoverflow.com/questions/63738789
复制相似问题