拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Argo Workflows Java SDK 详解:WorkflowTemplateCreateRequest 模型与 WorkflowTemplate 创建全流程

云原生容器编排工作流自动化任务调度后端【免费下载链接】argo-workflowsWorkflow Engine for Kubernetes项目地址https://gitcode.com/gh_mirrors/ar/argo-workflows点击查看免费下载导读IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest是 Argo Workflows 官方 Java SDKio.argoproj.workflow.models包中承载「创建工作流模板WorkflowTemplate」请求体的核心模型也是 gRPC/REST 服务WorkflowTemplateService#CreateWorkflowTemplate的入参类型。本文以该模型为主线结合 Java SDK 生成的 API 文档、.proto服务定义、服务端实现与 CLI 命令源码讲清请求体的三个字段如何编排、在服务端经过哪些校验与落库步骤并给出可直接运行的 Java 调用示例与等价 REST/CLI 用法帮助读者在 Kubernetes 上通过 Argo Workflows 编程式创建可复用的工作流模板。一、模型概览一个请求体的三个字段WorkflowTemplateCreateRequest在 Java SDK 中的定位非常清晰它是创建 WorkflowTemplate 时客户端向 Argo Server 提交的完整请求封装。根据 sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest.md该模型仅包含三个可选[optional]属性字段名Java 类型说明是否必填createOptionsCreateOptions创建操作的 Kubernetes 级选项如 dryRun、fieldManager、fieldValidationoptionalnamespaceString目标命名空间WorkflowTemplate 将被创建到该命名空间下optionaltemplateIoArgoprojWorkflowV1alpha1WorkflowTemplate实际的工作流模板定义本体含 metadata 与 specoptional三个字段虽然都在文档中标注为[optional]但「可选」仅表示序列化层面的允许性从服务端行为看template是创建动作的核心载荷缺失会直接报错namespace决定资源归属createOptions则用于透传 Kubernetes 原生创建语义。1. template创建动作的真正核心template字段的类型是IoArgoprojWorkflowV1alpha1WorkflowTemplate其定义见 sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplate.md遵循 Kubernetes 对象三要素属性类型说明apiVersionString资源的版本化 schema如argoproj.io/v1alpha1kindStringREST 资源类型固定为WorkflowTemplatemetadataio.kubernetes.client.openapi.models.V1ObjectMeta对象元数据名称、标签、注解等specIoArgoprojWorkflowV1alpha1WorkflowSpec工作流规范与 Workflow 的 spec 结构一致templates、entrypoint、volumes 等spec与普通 Workflow 的 spec 复用同一类型这意味着 WorkflowTemplate 可以承载 DAG、Steps、Script、Container、Resource 等全部模板类型并通过workflowTemplateRef被 Workflow 引用复用。2. namespace资源归属命名空间namespace指定模板创建的目标命名空间。当客户端未显式填写时例如 CLI 从 kubeconfig 上下文推断服务端会按上下文命名空间处理Java 客户端调用时必须显式传入因为 REST 路径/api/v1/workflow-templates/{namespace}本身就把 namespace 作为路径参数。3. createOptionsKubernetes 原生创建选项createOptions对应 Kubernetes 的metav1.CreateOptions在 Java SDK 中映射为 CreateOptions包含三个可选字段字段类型语义dryRunListString试运行不实际持久化合法值为All处理所有阶段但不落库fieldManagerString声明式Server-Side Apply场景下的字段管理器名称fieldValidationString服务端字段校验策略如Strict/Warn/Ignore需要注意在 workflow_template_server.go 的CreateWorkflowTemplate实现中服务端最终调用 Kubernetes 客户端创建时固定使用v1.CreateOptions{}空选项因此createOptions中的 dryRun 等字段在当前版本的服务端实现中并未被透传到 Kubernetes 创建调用Java 侧序列化该字段主要用于 API 兼容与未来透传。二、请求模型的服务端定义proto 视角Java SDK 的模型并非手工编写而是由 gRPC 服务定义自动生成。在 pkg/apiclient/workflowtemplate/workflow-template.proto 中请求消息定义如下message WorkflowTemplateCreateRequest { string namespace 1; github.com.argoproj.argo_workflows.v4.pkg.apis.workflow.v1alpha1.WorkflowTemplate template 2; k8s.io.apimachinery.pkg.apis.meta.v1.CreateOptions createOptions 3; }对应地服务WorkflowTemplateService暴露了CreateWorkflowTemplateRPC并通过 HTTP 注解将 gRPC 映射为 RESTrpc CreateWorkflowTemplate(WorkflowTemplateCreateRequest) returns (github.com.argoproj.argo_workflows.v4.pkg.apis.workflow.v1alpha1.WorkflowTemplate) { option (google.api.http) { post: /api/v1/workflow-templates/{namespace} body: * }; }这解释了两个关键事实REST 等价端点POST /api/v1/workflow-templates/{namespace}请求体即整个WorkflowTemplateCreateRequestbody: *返回WorkflowTemplate对象命名空间双通道namespace同时出现在 URL 路径与请求体中服务端通过 gRPC 网关将路径参数绑定到请求字段。三、服务端创建流程校验 → 标签 → 落库理解了请求模型后再看服务端如何处理这份请求。Argo Server 的CreateWorkflowTemplate实现位于 server/workflowtemplate/workflow_template_server.go处理流程如下func (wts *Server) CreateWorkflowTemplate(ctx context.Context, req *workflowtemplatepkg.WorkflowTemplateCreateRequest) (*v1alpha1.WorkflowTemplate, error) { wfClient : auth.GetWfClient(ctx) if req.Template nil { return nil, sutils.ToStatusError(fmt.Errorf(workflow template was not found in the request body), codes.InvalidArgument) } wts.instanceIDService.Label(req.Template) creator.LabelCreator(ctx, req.Template) wftmplGetter : wts.wftmplStore.Getter(ctx, req.Namespace) cwftmplGetter : wts.cwftmplStore.Getter(ctx) err : validate.WorkflowTemplate(ctx, wftmplGetter, cwftmplGetter, req.Template, nil, validate.Opts{}) if err ! nil { return nil, sutils.ToStatusError(err, codes.InvalidArgument) } wfTmpl, err : wfClient.ArgoprojV1alpha1().WorkflowTemplates(req.Namespace).Create(ctx, req.Template, v1.CreateOptions{}) if err ! nil { return nil, sutils.ToStatusError(err, codes.InvalidArgument) } return wfTmpl, nil }可以拆解为四个阶段空载荷检查req.Template nil时返回InvalidArgument错误信息为 workflow template was not found in the request body。因此 Java 侧即使文档标注template为 optional实际调用也必须填充标签注入instanceIDService.Label注入 Argo 实例隔离标签多租户/多实例部署时区分归属creator.LabelCreator记录创建者身份用于审计与权限追踪深度校验validate.WorkflowTemplate会对模板进行语义校验entrypoint 是否存在、模板引用是否解析、参数默认值是否合法等。校验失败同样以InvalidArgument返回模板不会被创建Kubernetes 落库通过wfClient.ArgoprojV1alpha1().WorkflowTemplates(req.Namespace).Create(...)将模板真正写入 Kubernetes API Server成功后返回带完整 metadata含 resourceVersion、uid 等的 WorkflowTemplate 对象。对应的服务端测试可参考 server/workflowtemplate/workflow_template_server_test.go其中覆盖了创建成功、参数缺失等路径。四、Java 实战用 SDK 创建工作流模板1. 客户端初始化与认证Argo Server 默认监听2746端口Java SDK 使用 API KeyBearerToken认证。完整调用骨架如下源自 WorkflowTemplateServiceApi.md 的官方示例// Import classes: import io.argoproj.workflow.ApiClient; import io.argoproj.workflow.ApiException; import io.argoproj.workflow.Configuration; import io.argoproj.workflow.auth.*; import io.argoproj.workflow.models.*; import io.argoproj.workflow.apis.WorkflowTemplateServiceApi; public class CreateWorkflowTemplateExample { public static void main(String[] args) { ApiClient defaultClient Configuration.getDefaultApiClient(); defaultClient.setBasePath(http://localhost:2746); // Configure API key authorization: BearerToken ApiKeyAuth BearerToken (ApiKeyAuth) defaultClient.getAuthentication(BearerToken); BearerToken.setApiKey(YOUR API KEY); // 如需前缀例如 Token取消下一行注释默认 null //BearerToken.setApiKeyPrefix(Token); WorkflowTemplateServiceApi apiInstance new WorkflowTemplateServiceApi(defaultClient); String namespace default; IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest body new IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest(); try { IoArgoprojWorkflowV1alpha1WorkflowTemplate result apiInstance.workflowTemplateServiceCreateWorkflowTemplate(namespace, body); System.out.println(result); } catch (ApiException e) { System.err.println(Exception when calling WorkflowTemplateServiceApi#workflowTemplateServiceCreateWorkflowTemplate); System.err.println(Status code: e.getCode()); System.err.println(Reason: e.getResponseBody()); System.err.println(Response headers: e.getResponseHeaders()); e.printStackTrace(); } } }2. 组装 template 载荷真正创建前必须填充template。以下代码构造一个最小可用的 hello-world 模板metadata.name指定模板名spec.entrypoint声明入口spec.templates定义具体执行步骤。IoArgoprojWorkflowV1alpha1WorkflowTemplate template new IoArgoprojWorkflowV1alpha1WorkflowTemplate() .apiVersion(argoproj.io/v1alpha1) .kind(WorkflowTemplate) .metadata(new V1ObjectMeta().name(hello-world-template)) .spec(new IoArgoprojWorkflowV1alpha1WorkflowSpec() .entrypoint(main) .addTemplatesItem(new IoArgoprojWorkflowV1alpha1Template() .name(main) .container(new IoArgoprojWorkflowV1alpha1Container() .image(docker/whalesay) .addCommandItem(cowsay) .addArgsItem(hello world)))); body.namespace(namespace); body.template(template); // 可选body.createOptions(new CreateOptions().addDryRunItem(All));3. HTTP 请求细节与响应该 API 的协议细节同样记录在 WorkflowTemplateServiceApi.md如下HTTP 方法/路径POST /api/v1/workflow-templates/{namespace}Content-Typeapplication/jsonAcceptapplication/json成功响应HTTP200响应体为完整的IoArgoprojWorkflowV1alpha1WorkflowTemplate含服务端填充的 resourceVersion、uid、creationTimestamp 等异常响应HTTP0对应的 gRPC 错误帧例如InvalidArgument校验失败、PermissionDenied无权限4. 边界与限制createOptions.dryRun虽可序列化但如前所述当前服务端CreateWorkflowTemplate固定传入空的v1.CreateOptions{}dryRun 语义未生效如需试运行校验应使用Lint接口POST /api/v1/workflow-templates/{namespace}/lint创建前校验失败时服务端返回InvalidArgumentJava 侧应捕获ApiException并解析getResponseBody()中的校验错误详情模板创建成功后即可被 Workflow 通过workflowTemplateRef引用实现「模板一次定义、工作流多次复用」。五、与 CLI / REST 的对照同一请求模型的不同载体WorkflowTemplateCreateRequest并不只在 Java SDK 中出现它是整个 Argo Workflows 各端共用的请求契约。CLI 视角argo template create命令cmd/argo/commands/template/create.go在内部正是构造了WorkflowTemplateCreateRequest并调用serviceClient.CreateWorkflowTemplatecreated, err : serviceClient.CreateWorkflowTemplate(ctx, workflowtemplatepkg.WorkflowTemplateCreateRequest{ Namespace: wftmpl.Namespace, Template: wftmpl, })命令用法argo template create hello-world-template.yaml -n default -o name-o/--output输出格式如name、json、yaml--strict严格模式校验默认true对应服务端validate.WorkflowTemplate的严格程度若 YAML 中未声明metadata.namespaceCLI 会以client.Namespace(ctx)kubeconfig 上下文填充后放入请求体。REST 视角直接使用curl调用等价端点请求体即为WorkflowTemplateCreateRequest的 JSON 序列化curl -X POST http://localhost:2746/api/v1/workflow-templates/default \ -H Authorization: Bearer $ARGO_TOKEN \ -H Content-Type: application/json \ -d { namespace: default, template: { apiVersion: argoproj.io/v1alpha1, kind: WorkflowTemplate, metadata: {name: hello-world-template}, spec: { entrypoint: main, templates: [ { name: main, container: { image: docker/whalesay, command: [cowsay], args: [hello world] } } ] } } }三种方式殊途同归最终都汇聚为WorkflowTemplateCreateRequest或其 gRPC 等价消息由 Argo Server 的 CreateWorkflowTemplate 统一处理。这也是理解该模型的最高价值所在——掌握了WorkflowTemplateCreateRequest就等于掌握了 Argo Workflows 编程式创建工作流模板的统一入口。六、参考资料请求模型定义sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplateCreateRequest.md模板对象模型sdks/java/client/docs/IoArgoprojWorkflowV1alpha1WorkflowTemplate.md创建选项模型sdks/java/client/docs/CreateOptions.mdAPI 调用示例与协议细节sdks/java/client/docs/WorkflowTemplateServiceApi.mdgRPC 服务定义pkg/apiclient/workflowtemplate/workflow-template.proto服务端实现server/workflowtemplate/workflow_template_server.goCLI 调用链cmd/argo/commands/template/create.go模板示例清单examples/workflow-template/赞分享云原生容器编排工作流自动化任务调度后端【免费下载链接】argo-workflowsWorkflow Engine for Kubernetes项目地址https://gitcode.com/gh_mirrors/ar/argo-workflows点击查看免费下载相关推荐SysDVR技术解析基于硬件级捕获的Switch游戏流媒体传输方案SysDVR技术解析基于硬件级捕获的Switch游戏流媒体传输方案 问题背景游戏内容捕获的技术瓶颈 在游戏内容创作和远程游戏体验领域实时捕获和传输游戏画面云原生容器编排工作流自动化任务调度后端OpenMed多语言PII实战中文、日文、印地语去标识化全流程指南OpenMed多语言PII实战中文、日文、印地语去标识化全流程指南 OpenMed 是一个 本地优先Local first的医疗隐私 AI 工具 专注临云原生容器编排工作流自动化任务调度后端Argo Workflows Java SDK 指南Sensor 模型与 SensorService API 详解Argo Workflows Java SDK 指南Sensor 模型与 SensorService API 详解 Argo Workflows 的 Java云原生容器编排工作流自动化任务调度后端上一篇10分钟搭建企业级后台AdminLTE Bootstrap 5模板实战指南下一篇印尼语NLP新突破jeffding/indonesian-roberta-large-openmind模型完整解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门