ArgoWorkflow教程(六)---无缝实现步骤间参数传递

news2024/12/29 8:27:29

argoworkflow-6-parameter-passing-between-steps.png

之前我们分析了,Workflow、WorkflowTemplate 、template 3 者之间如何传递参数。

本文主要分析同一个 Workflow 中的不同 step 之间实现参数传递,比如将上一个步骤的输出作为下一个步骤的结果进行使用(而非以文件方式传递)。

1. 概述

然后就是之前只分析了 Workflow、WorkflowTemplate 、template 3 者之间如何传递参数,今天继续分析一下步骤之间如何传递参数。

要实现步骤间参数传递,需要实现两个功能:

  • 1)导出结果

  • 2)导入参数

基于之前的知识,要实现这两个功能,可以想到的一种方式就是使用 artifact:

  • 导出结果:将参数写入文件,然后以 artifact 保存到 s3
  • 导入参数:下一个 step 下载 artifact 并从中获取参数。

确实可以实现功能,但是有点蹩脚,毕竟 artifact 主要是用于保存文件的。argoworkflow 中也直接提供了对应的 feature 来供大家使用。

2. 步骤间参数传递

  • 将结果导出为 Output Parameter
  • 将上一步的 Output Parameter 导入为当前步骤的 Input Parameter

完整 Demo 如下:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: output-parameter-
spec:
  entrypoint: output-parameter
  templates:
  - name: output-parameter
    steps:
    - - name: generate-parameter
        template: whalesay
    - - name: consume-parameter
        template: print-message
        arguments:
          parameters:
          # Pass the hello-param output from the generate-parameter step as the message input to print-message
          - name: message
            value: "{{steps.generate-parameter.outputs.parameters.hello-param}}"

  - name: whalesay
    container:
      image: docker/whalesay:latest
      command: [sh, -c]
      args: ["echo -n hello world > /tmp/hello_world.txt"]  # generate the content of hello_world.txt
    outputs:
      parameters:
      - name: hello-param  # name of output parameter
        valueFrom:
          path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt

  - name: print-message
    inputs:
      parameters:
      - name: message
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["{{inputs.parameters.message}}"]

导出结果

- name: whalesay
    container:
      image: docker/whalesay:latest
      command: [sh, -c]
      args: ["echo -n hello world > /tmp/hello_world.txt"]  # generate the content of hello_world.txt
    outputs:
      parameters:
      - name: hello-param  # name of output parameter
        valueFrom:
          path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt

首先是 step 的内容,这里为了简单,就只有一个 echo 命令,将结果(hello world)写入到文件

/tmp/hello_world.txt 中。

然后就是到处结果了:

    outputs:
      parameters:
      - name: hello-param  # name of output parameter
        valueFrom:
          path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt

定义了一个 output 参数,名为 hello-param,该参数的 value 从 /tmp/hello_world.txt 文件中获取,最终得到的 value 就是之前写入的 hello world

至此,我们就讲当前步骤的结果导出成了一个 Output Parameter,可以在后续步骤使用了。

导入参数

后续步骤,其实很简单,和普通步骤一样的,通过 Input Parameter 定义参数,然后在使用的使用通过语法{{inputs.parameters.name}} 引用即可。

  - name: print-message
    inputs:
      parameters:
      - name: message
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["{{inputs.parameters.message}}"]

唯一区别在于,这个参数的来源,之前我们都是直接讲参数定义在 Workflow 中的,这里需要改成引用之前步骤导出的 Output Parameter,就像这样:

spec:
  entrypoint: output-parameter
  templates:
  - name: output-parameter
    steps:
    - - name: generate-parameter
        template: whalesay
    - - name: consume-parameter
        template: print-message
        arguments:
          parameters:
          # Pass the hello-param output from the generate-parameter step as the message input to print-message
          - name: message
            value: "{{steps.generate-parameter.outputs.parameters.hello-param}}"

在 arguments.parameters 中直接引用了之前步骤的 Output Parameter,语法为 {{steps.$stepName.outputs.parameters.$parameterName}}

之前我们导出结果的步骤名为 generate-parameter,然后导出的参数名为 hello-param,因此这里就使用{{steps.generate-parameter.outputs.parameters.hello-param}} 来引用该参数。

内置的 result 参数

除了我们手动导出的参数之外,ArgoWorkflow 还会默认生成一个 Output Parameter,他就是 result。

和其他 Output Parameter 一样,可以通过 {{steps.$stepName.outputs.parameters.$parameterName}} 语法进行引用。

这个 result 参数会捕获最大 256KB 的标准输出作为 value,因此他可以包含以下内容:

  • 1)script 的运行结果
  • 2)容器的标准输出
  • 3)…

只要是在容器中输出到标准输出的,内容都可以被 result 捕获。


**【ArgoWorkflow 系列】**持续更新中,搜索公众号【探索云原生】订阅,文章。


3. 小结

本文主要分析了 Argo 中的 Workflow 中怎么传递参数还是比较简单的:

  • 1)通过 Output Parameter 导出参数
  • 2)在 arguments.parameters 中引用上一步导出的参数

最后介绍了一下内置的 result Output Parameter ,可以用于获取容器中的标准输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

引领零售未来:年销售额500亿的运动品牌如何实现多渠道会员管理?

通过技术创新和全渠道整合,提升运动品牌影响力、用户粘性和市场竞争力。 运动热情高涨持续释放消费潜力,全球知名运动品牌2024财年营收超500亿美元,保持七个季度连续增长。 而随着电商的崛起和消费习惯的变化,会员数量激增且分布…

Android实现ViewPager剧中放大效果

效果图 实现方式核心思想是自定义PageTransformer继承ViewPager.PageTransformer,精确控制每一个page的动效。 PageTransformer的transformPage方法并不会区分当前的page是哪一个,所以需要我们自己去识别,我的方法是每个page添加一个text显…

Nuxt.js 应用中的 page:transition:finish 钩子详解

title: Nuxt.js 应用中的 page:transition:finish 钩子详解 date: 2024/10/10 updated: 2024/10/10 author: cmdragon excerpt: page:transition:finish 是 Nuxt.js 中的一个事件钩子,专门用于处理页面过渡效果结束后的逻辑。这一钩子在页面过渡的 onAfterLeave 事件之后…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl,那么我们就可以直接用了,这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

【NLP自然语言处理】03 - 使用Anaconda创建新的环境/pycharm切换环境

NLP基础阶段:创建新的虚拟环境 第一步:查看有多少个虚拟环境 conda env list 第二步:创建一个新的虚拟环境,起个名字:nlpbase 打开anconda prompt终端,输入命令: conda create -n nlpbase python3.10 第三步…

基于xml配置文件的Spring事务

在项目中对事务属性通常传播属性,回滚属性,隔离级别,超时属性都取默认值,只有只读属性会如下的配置: 什么意思:Service层你的类里的方法,以get,find,select等开头的方法是…

如何进行数据中心负载测试的自动化?

数据中心负载测试的自动化是一种通过使用软件工具和脚本来模拟大量用户访问数据中心的过程,以评估其性能、稳定性和可扩展性的方法。以下是进行数据中心负载测试自动化的一些建议: 市场上有许多负载测试工具可供选择,如LoadRunner、JMeter、…

【图论】(二)图论基础与路径问题

图论基础与路径问题 图的构造邻接矩阵邻接表 所有可达路径邻接矩阵存储邻接表存储 字符串接龙有向图的完全可达性 图的构造 这里仅对图论路径问题中图的构造做整理总结归纳,具体详细相关概念请参考代码随想录上的整理总结: 图论理论基础深度优先搜索理…

C语言函数栈帧的创建与销毁(32)

文章目录 前言一、什么是函数栈帧?二、理解函数栈帧能解决什么问题?三、函数栈帧的创建和销毁解析什么是栈?认识相关寄存器和汇编指令 四、解析函数栈帧的创建和销毁预备知识函数的调用堆栈准备环境转到反汇编函数栈帧的创建函数栈帧的销毁 五…

采用反相正基准电压电路的反相运算放大器

1 简介 本设计使用采用反相正基准电压的反相放大器将 –5V 至 –1V 的输入信号转换为 3.3V 至 0.05V 的输出电压。该电路可用于将传感器负输出电压转换为可用的 ADC 输入电压范围。 2 设计目标 2.1 输入 2.2 输出 2.3 电源 3 电路设计 根据设计目标,最终设计的电…

2.1类和对象(上)

本篇博客来梳理类和对象的基础知识 一、类的定义 1.类定义格式 (1)关键字:class。类中的变量称为类的属性/成员变量,类中的函数称为类的方法/成员函数 (2)为区分成员变量,一般会加…

MES管理系统对中小企业有哪些帮助

MES管理系统解决方案对中小企业具有显著的帮助,主要体现在以下几个方面: 一、提升生产效率 MES管理系统能够实时监控生产过程,提供准确的生产数据和及时的反馈。这种实时监控与数据分析能力,使中小企业能够精准把握生产脉搏&…

如何应对动态图片大小变化?Python解决网页图片截图难题

背景介绍 随着互联网的发展,许多网站,尤其是电商平台,如京东(JD.com),为了提升用户体验,采用了许多动态内容加载技术。当我们使用爬虫获取商品图片时,往往会遇到一些棘手问题&#…

中科星图GVE(案例)——AI提取指定采样区域的建筑物范围

目录 简介 函数 gve.Image.fromGeometry(geometry,source,options) gve.Services.AI.buildingExtraction(fromGridRes) 代码 结果 ​编辑 知识星球 机器学习 简介 要提取指定采样区域的建筑物范围,可以使用遥感图像处理和计算机视觉技术。以下是一种可能的…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享14

5.4 软件实现 5.4.1 软件配置管理(掌握) 软件配置管理(SCM)是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。 SCM活动的目标就是标识变更、控制变更、确保变更正确 SCM的目的是使错误降为最小&#xff0…

申报审批|基于springBoot的入校申报审批系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 传统办法管理信息首先需要花费的时间比较多,其次数据出…

数据库中间件 -- MyCat

1、什么是数据库中间件 数据库中间件(Database Middleware)是一种位于应用程序与数据库管理系统(DBMS)之间的软件层。它的主要目的是为应用程序提供更加高效、可靠和透明的数据库访问,同时解决多种数据库管理问题。 The domain name Mycat.io is for sale 1.1、常见的数…

新质生产力在制造业中的“新”主要体现在哪

新质生产力,以其独特的技术创新、模式变革和思维升级,正逐步重塑制造业的面貌,引领其走向更加智能化、绿色化和高效化的未来。 一、技术创新:驱动产业升级的核心引擎 新质生产力在制造业中的首要“新”,体现在技术创新…

Chromium 书签加载过程分析c++

一、书签存储路径: %localappdata%\Chromium\User Data\Default\Bookmarks %localappdata%\Chromium\User Data\Default\Bookmarks.bak 【备份文件】 本机测试存储的Bookmarks文件如下(未加密的可以直接打开): {"checksum": &q…

Allegro平台正式进军匈牙利市场,Allegro怎么快速上架产品?

近日,波兰电商平台Allegro正式宣布进军匈牙利市场,此举标志着Allegro在中东欧地区的扩张步伐再次加速。作为一家在波兰本土享有盛誉的电商平台,Allegro此举无疑为匈牙利乃至整个中欧地区的电商市场注入了新的活力。 Allegro此次进军匈牙利市…