来源:https://walkoff.readthedocs.io/en/latest/workflow.html
Walkoff开发
在这一页中,我们将讨论工作流编辑器,如何创建工作流,以及可用的工具。
一、创建工作流
在本教程中,我们将创建一个基本工作流来演示工作流编辑器的一般特性。
1.1创建全局变量
在我们创建工作流之前,我们将创建一个我们的操作将使用的全局变量。
在顶部导航栏中,单击设置,然后是全局,然后是添加全局。填写本示例所需的字段,并将值设置为您选择的任何字符串。在这里,您还可以选择使用用户和角色创建中描述的基于角色的权限来限制对变量的访问。然后单击对话框中的Save。如果globals表中没有填充任何内容,那么验证您是否按照先决条件中描述的那样创建了加密密钥。
1.2创建工作流
在顶部导航栏中,单击Workflows返回到主工作流页面。然后,在页面的顶部附近,单击Create New按钮。输入新工作流的名称(以及可选的标签和描述)。在这里,您还可以选择使用用户和角色创建中描述的基于角色的权限来限制对变量的访问。最后,单击Continue。
1.3向工作区添加操作
让我们从Basics应用程序中添加一个hello_world动作和一个echo_string动作开始。然后,双击,或者单击并将所需的操作拖放到工作区中。
在操作参数窗格中单击set as Start操作,确保将hello_world操作设置为开始节点。
1.4配置选项
有些动作会有输入;有些是必须的,有些是可选的。在本例中,echo_string操作有一个必需的参数,但是hello_world操作没有。从下拉列表中将echo_string参数的类型设置为全局变量,并选择在前面的示例中创建的全局变量。操作将引用这个全局变量来回显字符串。
最后,通过从hello_world操作的顶部单击并拖动到pause操作的顶部,将操作连接在一起。您还可以右键单击并从一个操作拖动到另一个操作。
1.5保存和执行工作流
使用工具栏中的按钮,保存,然后执行工作流。工作流必须在执行前保存,以便执行使用工作流的当前状态。
检查结果:
在工作流下面的Execution选项卡中检查工作流的结果。稍后还可以在屏幕顶部的Execution选项卡下查看这些结果。如果所有配置都正确,您可以预期看到如下所示的结果。
二、工作流编辑器
在本教程中,我们将探索工作流编辑器界面的不同组件。
2.1工具栏
从左到右,工具栏上的按钮有:
(1)保存工作流(Save Workflow):将当前工作流保存在指定的名称下
(2)撤销(Undo):返回编辑器中最近的更改
(3)Redo:重新应用最近的未完成动作
(4)删除选中的节点:删除选定的节点或分支
(5)Copy:复制选定的节点
(6)Execute Workflow:计划执行工作流
(7)清除执行结果:清除突出显示和执行节点的结果
(8)编辑描述:编辑当前工作流的描述
(9)创建变量:创建和编辑工作流范围的变量
2.2突出显示
选中的节点或边将以蓝色突出显示。在执行期间,计划执行的节点将变为黄色。如果他们执行成功,他们会变绿;否则,它们就会变成红色。
2.3应用和操作
您在Walkoff实例中安装的应用程序和操作将出现在左侧窗格中。点击应用程序的名称就可以看到该应用程序提供的动作(应用程序只是一种将相关动作分组的方法)。要使用窗格中的操作,请双击操作的名称或单击并将操作拖拽到工作区中。
2.4导航工作区
可以使用窗格左上角的按钮导航工作区。从上到下,这些按钮可用于平移、缩放以适应或放大和缩小。您还可以在空白区域上单击和拖动以进行平移,并使用鼠标上的滚动轮放大和缩小。
2.5将行为联系在一起
当鼠标悬停在一个节点的上边缘时,一个点就会出现。要创建从一个节点到下一个节点的边缘,单击并从b点拖动到序列中的下一个动作;将出现一个箭头,将操作连接在一起并创建一个分支。一个节点可以指向多个节点;它们都将执行,除非条件不指定。
2.6分支配置
当一个操作连接到多个后续操作时,所有这些操作都将被调度。但是,当操作异步执行时,就不能保证这些操作的执行顺序。如果顺序很重要,就按顺序分配。
2.7编辑动作
当一个动作被选中时,它的属性将出现在右窗格中。这包括它来自的应用程序、它将执行的动作和动作的名称(与它的惟一ID分开)。您还可以在此窗格中设置工作流的启动操作。
三、应用程序编辑器
如果导航到“退出”顶部工具栏的“应用程序”选项卡,您将被导向可在其中管理应用程序的页面。如果您在您想要编辑的应用程序上单击Edit Application按钮,它将带您到一个新页面,该页面将包含页面左侧的文件树。此时,您可以单击app.py,文件内容将在右侧显示,如下所示。
如果您想编辑任何文件,您可以在上面显示的文件编辑器中完成。如果您愿意,您可以对多个文件进行更改,只要确保在导航离开该页面之前点击保存图标即可。这将把当前文件保存到minio。至此,minio准备使用新保存的文件进行构建。一旦你点击“重建图像”按钮,WALKOFF将会拉出Minio中的文件并基于这些文件重建图像。成功构建映像后,Walkoff将把文件从Minio复制到工作目录中,以便在本地可以看到这些文件更改。
注意:您可以使用save按钮旁边的符号撤消或重做在应用程序编辑器中所做的更改
四、用户和角色创建
WALKOFF允许基于角色的用户创建。默认情况下,WALKOFF有四个预构建的角色:super_admin、admin、workflow_developer和workflow_operator。
(1)super_admin角色是一个单一的不可变帐户。此角色能够删除/创建新用户,并授予对任何用户在退出时创建的所有资源的完全访问权。不能将新创建的用户赋予此角色;无法删除此帐户,其角色也无法更改。
(2)默认情况下,admin角色与super_admin角色拥有对WALKOFF的相同控制。但是,可以为新创建的用户提供此角色,并且可以编辑此角色。此外,具有不同角色的其他用户可能在此角色层中隐藏工作流和全局变量。
(3)workflow_developer角色可以创建、更新和删除工作流、global_variables、workflow_variables、仪表板和调度。此角色无法更改 WALKOFF设置、添加新用户或角色。
(4)默认情况下,workflow_operator角色只能读取workflow_variables之外的所有 WALKOFF资源,它们可以更新和利用这些资源。他们还能够执行他们能够访问的工作流。
五、创建一个用户
为了创建新用户,您必须作为具有用户创建权限的用户登录(默认情况下,此权限授予admin级别及以上角色)。
首先,导航到WALKOFF工具栏上的“设置”选项卡,然后单击“用户”。
在此页面中,单击create user按钮。为该帐户填写所需的用户名、密码和角色层,然后单击Add User完成用户创建。
六、创建一个角色
为了创建新用户,您必须作为具有角色创建权限的用户登录(默认情况下,此权限授予admin级别及以上的角色)。
首先,导航到WALKOFF工具栏上的“设置”选项卡,然后单击“用户”。
从此页中,单击角色设置选项卡。
填写所需的角色名称和可选描述。
选择您想让此角色访问的资源。选择之后,单击Add Resource。然后,选择要添加的特定权限。
选择资源后,单击Add Role完成角色创建。
七、参数传递和节点类型(内置)
动作可以有参数,参数的属性由应用程序的api.yaml定义。默认情况下,参数的值是您在工作流编辑器中指定的静态值。要使用一个动作的输出作为另一个动作的参数值,请为该参数选择动作输出,然后选择希望接收输出的动作。源操作在某种程度上必须是目标操作的前身。
7.1参数传递
有四种不同类型的参数可以传递给动作:静态值、动作输出、全局变量和工作流变量。
(1)静态值
静态值参数是在工作流创建时设置的。在本例中,只需提供您想使用的值。
(2)动作输出
使用动作输出允许您使用前一个节点的输出作为后一个节点的输入参数。如果一个操作依赖于前一个操作的输出,这就是要使用的适当方法。
(3)全局变量
顾名思义,在Walkoff中,任何工作流都可以使用全局变量。它们是在create-global设置的,默认情况下为存储而加密,并在操作执行时解密。这对于存储跨多个工作流使用的凭据或API令牌等值非常有用。
(4)工作流变量
类似于全局变量,但仅适用于当前工作流。使用工具栏中的“创建变量”按钮创建工作流变量。它们没有加密,而是存储在工作流本身中,这意味着它们在导出工作流时保持存在。
7.2节点类型
(1)触发
工作流的执行可以由触发器暂停。要使用一个,在应用程序栏中选择内置应用。双击或拖动触发器操作到工作流空间。像连接其他动作一样连接触发器。当执行到达一个触发器时,它将暂停。要恢复执行,请按照api网关文档中给出的格式发送一个路径到/api/workflowqueue/<execution_id>。
(2)条件
条件用于根据父节点的输出从多个分支中选择一个(或没有)执行。使用简单的python编写条件:
if previous_node.result.get('value') == 0:
selected_node = blue_node
elif previous_node.result.get('value') == 1:
selected_node = red_node
通过标签引用节点,用下划线替换空格。使用<node_label>.result访问他们的结果。然后必须将selected_node分配给直接遵循条件的一个节点的标签。
稍后将添加用于此操作的图形化编辑器。
(3)并行操作
操作的一种特殊情况,它允许您通过拆分它的一个参数并行地运行它的多个副本。例如,为IP列表中的每个IP运行操作的一个副本,而不是迭代该列表中的一个操作。它们由底部的parameters面板中的一个名为Run in Parallel的选项表示,该选项用于选择要并行化的参数。根据操作的实现,这可能会导致执行时间的改进。