ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

stackstorm 变量

2022-08-15 00:31:57  阅读:158  来源: 互联网

标签:变量 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
来源: https://www.cnblogs.com/skyzy/p/16586800.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有