首页 > 其他分享 >stackstorm 变量

stackstorm 变量

时间:2022-08-15 00:27:56浏览次数:45  
标签:变量 parameters stdout stackstorm workflow2 action ref name

变量

全部变量被vars关键词定义在顶部。
Tasks任务通过publish关键字发布新的变量

所有的变量都被Jinja语法引用。累计的已发布变量都可以在一个ActionChian执行结果的publisher属性中被获得,如果display_published属性支持ActionChain Runner。
示例:
---
vars:
    domain: "{{ st2kv.system.domain }}" # Global Var
    port: 9101
chain:
    -
        name: get_service_data
        ref:  my_pack.get_services
        publish:
            url_1: http://"{{ get_service_data.result[0].host.name }}.{{ domain }}:{{ port }}"

这个publish_data.yaml工作流在examples包中,它通过使用vars和publish显示了一个复杂的例子:
---
vars:
    domain: "{{ st2kv.system.domain }}" # `system` references DataStore key-values. Null if not set.
    api_port: 9101
    webui_port: 8080
chain:
    -
        name: "get_host"
        ref: "core.local"
        parameters:
            cmd: hostname | tr -d ' \n'
        publish:
            # Publish a variable to shortcut a long expression
            api_url: "http://{{ get_host.stdout }}:{{ api_port }}"
            webui_url: "http://{{ get_host.stdout }}:{{ webui_port }}"
            host: "{{ get_host.stdout }}"
            # Jinja woodoo used for basic logic
            fqdn: "{{ get_host.stdout }}{% if domain %}.{{ domain }}{% endif %}"
            # A complex object can be published
            paths:
                api: [ "v1/actions", "v1/triggers"]
                webui: "/"
                auth_port: "{{ api_port + 1 }}"
                # This variable references "system_info_path" variable which is an action parameter
                system_info: "{{ system_info_path }}"

        on-success: say_the_names
    -
        name: say_the_names


2 在任务之间传递数据
先前的任务的输出可以通过类似的方式作为一个动作链的输入。
在例子 echochain_param.yaml中展示了输入和数据在工作流中如何传递。
---
    chain:
        -
            name: "c1"
            ref: "core.local"
            parameters:
                cmd: "echo c1, input {{input1}}" # Refers to action's input parameter
            on-success: "c2"
            on-failure: "c4"
        -
            name: "c2"
            ref: "core.local"
            parameters:
                cmd: "echo c2 {{c1.stdout}}" # refers to previous action's output
            on-success: "c3"
            on-failure: "c4"
        -
            name: "c3"
            ref: "core.local"
            parameters:
                cmd: "echo c3 {{c2.stdout}}"
            on-failure: "c4"
        -
            name: "c4"
            ref: "core.local"
            parameters:
                cmd: "echo fail c4"
    default: "c1"

说明:
1 一个任务的输出总是以该任务的名称作为前缀,例如:
在{"cmd":"echo c2 {{c1.stdout}}"}中,c1.stdout执行了'c1'的输出,
并且挖掘到输出的属性列表中。这个引用的关键就是action_execution对象的result
字段。
2) 一个特殊的__results 的键提供了对整个链执行结果的访问。

3 在不同的工作流之间传递数据
在stackstorm中,一个工作流仅仅是一个动作。这意味着可以将一个工作流的数据传递
给另一个,传递到一个动作中,可以使用action参数。
在下面的例子中,有两个工作流-workflow1和workflow2。
在workflow1中task2调用workflow2并传递变量date给它作为一个动作参数。
workflow2接着可以使用这个值并将它打印到便准输出。
workflow1.yaml:
---
    chain:
        -
            name: "task1"
            ref: "core.local"
            parameters:
                cmd: "date"
            on-success: "task2"
        -
            name: "task2"
            ref: "mypack.workflow2"
            parameters:
                date: "{{ task1.stdout }}"  # Here we pass result from "task1" as a "date" action parameter to the action "workflow2"

workflow2.meta.yaml:
---
name: "workflow2"
description: "..."
runner_type: "action-chain"
entry_point: "workflow2.yaml"
enabled: true
parameters:
 date:
    type: "string"
    description: "Date which show be printed to stdout"
    required: True

workflow2.yaml
---
    chain:
        -
            name: "task1"
            ref: "core.local"
            parameters:
                cmd: "echo {{ date }}"  # Here we echo the variable "date" which was passed to the workflow as an action parameter

上述例子可以应用在当有两个相关的工作流,并且一个调用了另一个的场景。
如果拥有两个独立的工作流,并且希望在它们之间传递数据或者在另一个工作流中使用一个工作流的数据,最常见的方法就是使用内置的键值对datastore。
在第一个工作流中,可以在datastore中存储数据,并在第二个工作流中在datastore中查询数据。
这个方法创建了严密的链接。
使用action参数意味着第二种工作流可以被服用并且运行独立于第一个-仅仅需要传递需要的参数给它

 

标签:变量,parameters,stdout,stackstorm,workflow2,action,ref,name
From: https://www.cnblogs.com/skyzy/p/16586800.html

相关文章

  • stackstorm workflows
    workflowsStackStorm支持两种类型的工作流:ActionChain和Mistral。1)ActionChain是StackStorm内部的不加修饰的工作流运行器。它提供了一个简单的语法来定义了工作......
  • stackstorm rule
    stackstormruleRule是映射Trigger到Action(或者Workflow),即当事件触发后,通过Rule定义的标准(Criteria)进行匹配,当匹配成功将执行Action(或者Workflow)。https://docs.stackst......
  • 性能测试工具JMeter(二)—— 安装、配置环境变量
    1.技能大纲技能学习路线  2.接口介绍1.1什么是接口测试?接口测试是测试项目和项目之间,模块与模块之间,组件与组件之间的数据交互和权限鉴定。1.前后端分离架构......
  • Linux环境变量配置
    你不知道的Linux环境变量配置,建议收藏!悠悠 Cloud研习社 2022-07-1807:33 发表于山东收录于合集#实战经验31个#linux46个#计算机32个 Linux环境变量配......
  • python 中字符串拆分可直接赋值给变量名(列表中的元素可以直接赋值给变量)
     001、>>>test1="100200"##test1为字符串>>>test1'100200'>>>a,b=test1.split()##拆分字符串,直接赋值给变量名>>>a'100'>>>b'200'......
  • 第32课 26个兄弟姐妹--循环变量为字符型
    第32课26个兄弟姐妹--循环变量为字符型试编一程序,按字典顺序输出26个字母。程序代码如下:1/*2试编一程序,按字典顺序输出26个字母。3*/4#include<iostream......
  • RUST基础:变量遮蔽
    Rust基础入门书籍推荐《深入浅出RUST》Rust是允许在同一个代码块中声明同样名字的变量。如果这样做,后面声明的变量会将前面声明的变量“遮蔽(Shadowing)”起来。如:1fnm......
  • c语言中形参、变量、实参同名的问题
     001、在函数定义中,形参名不能和函数内部的变量同名,否则会发生冲突。 002、定义不同函数时,可以使用不能的形参名,因为虽然同名,但是分别属于不同的函数。 003......
  • Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法
    python的面向对象面向对象与面向过程面向过程面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做)......
  • cpp-变量
    目录1.枚举类型枚举的定义对枚举类型的操作2.数组数组的定义一维数组的定义初始化表字符串数组字符串数组的初始化二维数组二维数组的定义二维数组的使用3.结构类型结构类......