当前位置: 首页 > ops >正文

【运维自动化-标准运维】如何实现在不同步骤间传递参数

当流程有多个步骤时,经常需要把前面某个个步骤处理的结果传递给下一个或后面的步骤使用(输出作为输入),这就是跨步骤传参的场景,标准运维通过特有的标记符号"<SOPS_VAR>key:value</SOPS_VAR> "来实现。

理解标记符号"<SOPS_VAR>key:value</SOPS_VAR>"

使用场景就是在脚本里使用标准运维的标记符号"<SOPS_VAR></SOPS_VAR>",将要传递的数据以key/value对的形式包含在标记符号中,并使用echo/print等打印到作业平台的日志中,shell和Python都可以。

shell:

echo "<SOPS_VAR>key:val</SOPS_VAR>"

Python:

print("<SOPS_VAR>key:val</SOPS_VAR>")

例:

message="hello blueking"
echo "<SOPS_VAR>message:$message</SOPS_VAR>"
key "message"对应的value是"hello blueking"

实操演示

例:标准运维流程有两个步骤,第一个步骤使用作业平台插件执行脚本输出的"hello blueking"内容想要给第二个步骤使用

1、步骤一使用脚本执行模拟输出"hello blueking"

在这里插入图片描述

message="hello blueking"
echo "<SOPS_VAR>message:$message</SOPS_VAR>

(示例代码)

输出日志中提取的全局变量,日志中形如 <SOPS_VAR>key:val</SOPS_VAR> 的变量会被提取到 log_outputs[‘key’] 中,值为 val。

2、步骤二通过变量的方式引用第一步的输出

在这里插入图片描述

echo ${log_outputs["message"]}

(示例代码)

3、执行效果

在这里插入图片描述
(步骤一)

在这里插入图片描述
(步骤二)

也可以点击作业平台执行任务详情链接查看执行结果
在这里插入图片描述
不同步骤传参的实现核心要素就是标准运维特有的标记符号“<SOPS_VAR>key:val</SOPS_VAR>”,以及要把log_outputs勾选为变量。

扩展高级使用

  • 多个步骤需要跨步骤传参

如果多个步骤都需要使用到步骤传参(如步骤一的输出要给步骤二作为输入,步骤二的输出又需要给步骤三作为输入),那么输出参数里的KEY可以命名为log_outputs_xxx,避免重名。

如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 一个步骤有多个变量需要被其他步骤引用

多个变量,只要key不同,只需要使用<SOPS_VAR>key:val</SOPS_VAR>的语法,就可以定义多个。

如:

echo "<SOPS_VAR>message1:123</SOPS_VAR>"
echo "<SOPS_VAR>message2:456</SOPS_VAR>"
那么使用
${log_outputs['message1']}获取到123
${log_outputs['message2']}获取到456
  • 使用Python语法处理value,比如指定换行分隔符
举例1:
原始变量为: <SOPS_VAR>message:123|456|789</SOPS_VAR>引用时用换行替换竖线:
${'\n'.join(log_outputs_xxxx['message'].split('|'))}变量执行时,值为:
123
456
789举例2:
原始变量为:<SOPS_VAR>message:1.1.1.1@name1|2.2.2.2@name2|3.3.3.3@name3</SOPS_VAR>引用时,先用空格替换@,再用换行替换竖线:${'\n'.join(' '.join(log_outputs_xxxx['message'].split('@')).split('|'))}变量执行时,值为:
1.1.1.1 name1
2.2.2.2 name2
3.3.3.3 name3

说明:适合产品版本 V6.1/V6.2/V7.0/V7.1

http://www.xdnf.cn/news/9232.html

相关文章:

  • 人该怎样活着呢?54
  • 随机模拟专题:第一课
  • 5G网络切片技术:开启网络服务定制化新时代
  • SpringMVC注解、@Controller注解和@RestController注解的区别、@RequestMapper、@PathVariable
  • 制作一款打飞机游戏59:子弹生成
  • DeepSeek 赋能智能安防:从算法革新到场景落地的全解析
  • 4月报 | SeaTunnel支持TDengine的多表Sink功能
  • 机器学习算法-- K 近邻算法(KNN)
  • Linux 资源限制(进程级,用户级,系统级)
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?
  • Cursor 与DeepSeek的完美契合
  • 树莓派超全系列教程文档--(49)远程访问树莓派
  • 5.27 day 30
  • SQL计算列
  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • ElasticSearch整合SpringBoot
  • 《深入解析UART协议及其硬件实现》-- 第一篇:UART基础与协议层详解
  • 一张Billing项目的流程图
  • 16. Git从入门到实践
  • Java-Set集合遍历的全面指南