6.1 Workflow

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

(表)Workflow定義

ラベル デフォルト値 必須 説明
apiVersion: Yes APIバージョン
1.0を指定する
kind: Yes workflowを指定する
type: No resourceを指定する
Ops Iの運用機能に追加する新しい定義であることを示す
name: Yes Workflow定義の内部名
nameは以下のルールに従う必要があります。
  • 本YAMLファイルのディレクトリ名を指定
  • 入力可能な文字は以下の通り
    • 半角英数字:
      a~z A~Z 0~9
    • 半角の特殊文字:
      _ -
  • 先頭文字が半角英数字かアンダーバー(_)
  • その他の注意点は「YAMLファイル作成時の注意」2~4を参照
label: Yes YAMLファイルに記載する運用機能の表示名
includes: No このYAMLファイルで利用する関連YAMLファイルを記載
メモメモ
  • 記載するYAMLファイルはこのYAMLファイル登録前にOps Iに登録されている必要があります。
  • includesラベルを指定することにより、他のYAMLファイルで定義した内容を取り込むことができます。例えば、Workflowの各ステップで表示するGUIを定義したUIのYAMLファイルを取り込む場合に使用します。
- kind: Yes 読み込むYAMLファイルの種類
  name: Yes 読み込むYAMLファイルの内部名
description: No このYAMLファイルに対する詳細説明
テンプレート機能を利用して記述することができる
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 表示名
※入れ子関係にないラベルの必須が「No」の場合は、定義が必須ではありません。入れ子関係にあるラベルの場合は、下層ラベルの必須は、上層ラベルの必須が「Yes」である場合に適用されます。

上記の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提供部品