6.1 Workflow

以下にWorkflow定義と定義例を示します。Workflow定義では、ワークフロー全体の定義を行う部分と個々のアクティビティの定義を行う部分の大きく2つに分類されます。ワークフローの詳細については「ワークフロー」と「ワークフローの設計」を参照してください。

(表)Workflow定義

ラベル デフォルト値 必須 説明
apiVersion: 1.0 Yes APIバージョン
kind: Yes ワークフローの際はworkflowを指定する
type: No ワークフローの際はresourceのみ指定可能
name: Yes Workflow定義の内部名。本YAMLファイルのディレクトリ名を指定。
nameは英数字、"_"、"-"のみ使用可能。
label: Yes YAMLファイルの表示名
includes: No このYAMLファイルで利用する関連YAMLファイルを記載
- kind: Yes 読み込むYAMLファイルの種類
  name: Yes 読み込むYAMLファイルの内部名
description: No 詳細説明
parameters: No ワークフローのパラメータ。
JSON Schemaで記述する。
steps: No ワークフローのステップを定義。
タスクの進行状況を表示するために使用する。
- name: No ステップ名
  label: No ステップの表示名
  description: No ステップの詳細説明
(workflow model): Yes ワークフローを定義。
StackStormで定義できるWorkflow Model内容を記述
詳細は「(表)Workflow model」を参照
  (task model): Yes アクティビティを定義。
StackStormで定義できるTask Model内容を記述
詳細は「(表)Task model」を参照
role: No 各アクティビティに対して、そのアクティビティを実行できるロールを定義する。
以下に記述例を示す。
例)
tasks:
  mytask:
    action:  core.ask
    role: "Service Desk Agent"
group: No 各アクティビティに対して、そのアクティビティを実行できるグループを定義する。指定されたグループが自動的にこのアクティビティにアサインされる。
requirements: No このアクティビティに対する要求事項
  skillset: No このアクティビティを実行するのに必要なスキルセット。詳細については、「スキル管理」および「Skill、Skillset」を参照。
ui: No このアクティビティを実行するときに表示するUI。
ワークフローの最初の画面を表示するステップでは、アクションタイプにcore.noopを指定する必要があります。それ以外のステップでは、アクションのタイプにcore.askを指定してください。
step: No このアクティビティが所属するステップ名
label: No 表示名

上記のworkflow modelにはStackStorm で定義されているworkflow modelと同じものを記述します。
StackStorm で定義されているworkflow modelについては以下に示します。
詳細についてはStackStorm公式ページを参照してください。
https://docs.stackstorm.com/3.7/orquesta/languages/orquesta.html#workflow-model

注意事項注意事項

  • ワークフローの最初の画面はサービスカタログ画面から新規ワークフローを開いた時、または未開始のワークフローを開いた時に表示されます。作業項目管理機能からワークフローを実行した場合は、最初の画面のタスクはユーザー入力を待たず次のタスクに遷移します。したがって、最初の画面のタスクで指定したグループやロールの設定は、新規ワークフローまたは未開始のワークフローを開く場合に適用されます。
  • 1つのワークフローの中で複数のUIを指定する場合、Workflow定義の中で使用するUIバージョンは同じにする必要があります。UIバージョンの詳細は「UIバージョン」を参照してください。


(表)Workflow model

ラベル 必須 説明
version: Yes ワークフロー定義形式のバージョン
input: No ワークフローに対する入力項目
vars: No ワークフロー内で利用できる変数のリスト定義
tasks: Yes ワークフローを構成する各アクティビティ定義
output: No ワークフローから出力される変数のリスト定義

以下にTask model内で記述できる内容を示します。
Ops IではStackStormのTask modelと同じものを使用します。
詳細についてはStackStorm公式ページを参照してください。
https://docs.stackstorm.com/3.7/orquesta/languages/orquesta.html#task-model

(表)Task model

ラベル 必須 説明
(taskname): Yes アクティビティごとに名前を付け、そのアクティビティごとに以下を定義
  delay: No アクティビティの実行を遅らせる秒数
  join: No 前段で並行して走っているアクティビティがある場合に、アクティビティの開始の仕様を定義。
例)前段のアクティビティの3/3が終了したら開始、前段のアクティビティの2/3が終了したら開始する。
  action: No アクティビティで何を実行するかを定義。
使用できるリストは以下を参照
  input: No タスクで利用する入力のリスト
  retry: No アクティビティの再試行の定義。
使用できる属性については「(表)retryで使用できる属性」を参照
  next: No 次に実行するアクティビティ。
使用できる属性については「(表)nextで使用できる属性」を参照
  subflow: No 指定した場合、サブフローとして実行する。
  type: Yes サブフローの種別。以下の値のどちらかを指定。
  • "static":起動元フローの保存時点でコンテキスト(スケジュール)を作成
  • "dynamic":サブフローの実行時にコンテキスト(スケジュール)を作成

Ops Iユーザーは以下のactionを使用可能です。

Ops Iユーザーがactionを定義する際に使用可能なStackStorm部品を以下に示します。
詳細についてはStackStorm公式ページを参照してください。
https://docs.stackstorm.com/3.7/actions.html

(表)actionのリスト(StackStorm部品)

Action 説明
core.ask ユーザーからの入力を待機する。
core.http HTTPリクエストを送る。
core.noop 何もしない。
core.sendmail メールを送付する。
core.local ローカルホスト上で任意のLinuxコマンドを実行する。
vault.read シークレット情報を取得する。
シークレット管理からシークレット情報を取得する際に利用します。
vault.readを使用する場合は、以下のパラメータを設定する必要があります。
パラメータ 必須 説明
path Yes String シークレット情報が格納されているパスを指定する。
vault.readの戻り値は以下の通りです。
パラメータ 必須 説明
result.data.シークレット情報のキー名 Yes String シークレット情報のキー名

(表)retryで使用できる属性

ラベル 必須 説明
when: No retryを実行するための条件
count: Yes 再試行する回数
delay: No 再試行間の秒数

(表)nextで使用できる属性

ラベル 必須 説明
when: No 遷移するための条件
publish: No コンテキストに公開する値
do: No 条件が満たされているときに呼び出す次のタスク

<定義例>

apiVersion: 1.0
kind: workflow
type: resource
name: create_vm_wf
label: VM貸出申請
description: デモ用VM貸出申請のワークフローです

includes:
  - kind: ui
    name: create_vm_ui_00
  - kind: ui
    name: create_vm_ui_01
  - kind: ui 
    name: create_vm_ui_02
  - kind: ui
    name: create_vm_ui_04
  - kind: ui 
    name: create_vm_ui_05

version: 1.0

steps:
  - name: create_vm_wf_00_step
    label: 開始
    description: 開始
  - name: create_vm_wf_01_step
    label: 申請
    description: 申請
  - name: create_vm_wf_02_step
    label: 申請内容の確認
    description: 申請内容の確認
  - name: create_vm_wf_03_step
    label: VM生成
    description: VM生成
  - name: create_vm_wf_04_step
    label: VM生成の確認
    description: VM生成の確認
  - name: create_vm_wf_05_step
    label: 承認
    description: 承認

tasks:
  start:
    action: core.noop
    ui: create_vm_ui_00
    step: create_vm_wf_00_step
    next:
      - when: <% succeeded() %>
        do: create_vm_wf_01
      - when: <% failed() %>
        do: fail

  create_vm_wf_01:
    label: 申請
    action: core.ask
    ui: create_vm_ui_01
    step: create_vm_wf_01_step
    next:
      - when: <% succeeded() %>
        do: create_vm_wf_02
      - when: <% failed() %>
        do: fail

  create_vm_wf_02:
    label: 申請内容の確認
    action: core.ask
    ui: create_vm_ui_02
    step: create_vm_wf_02_step
    role: ope-team
    input:
      schema:
        type: object
        properties:
          oi_response:
            type: string
            required: true
    next:
      - when: <% result().response.oi_response = accept %>
        do: create_vm_wf_03
      - when: <% result().response.oi_response = reject %>
        do: create_vm_wf_01
      - when: <% failed() %>
        do: fail
        
  create_vm_wf_03:
    label: VM生成
    action: core.noop
    step: create_vm_wf_03_step
    next:
      - when: <% succeeded() %>
        do: create_vm_wf_04
      - when: <% failed() %>
        do: fail

(中省略)

  create_vm_wf_05:
    label: 承認
    action: core.ask
    ui: create_vm_ui_05
    role: ope-team
    step: create_vm_wf_05_step
    input:
      schema:
        type: object
        properties:
          oi_response:
            type: string
            required: true
    next:
      - when: <% result().response.oi_response = accept %>
        do: finish
      - when: <% result().response.oi_response = reject %>
        do: create_vm_wf_04
      - when: <% failed() %>
        do: fail
        
  finish:
    action: core.noop   

似たセクションが続く箇所は(中省略)として省略しています。



節構成

6.1.1 Ops I提供部品