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スキーマで記述する。
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

(表)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 アクティビティで何を実行するかを定義。
使用できるリストは「(表)actionのリスト(StackStorm部品)」「(表)actionのリスト(Ops I提供部品)」を参照
  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 シークレットに登録しているシークレット情報を取得する。

Ops Iユーザーがactionを定義する際に使用可能なOps I提供部品を以下に示します。
詳細については「Ops I提供部品」を参照してください。

(表)actionのリスト(Ops I提供部品)

Action 説明
oi.fetch_access_token Ops Iアクセストークンを取得する。
oi.insert_into_custom_table カスタムテーブルに指定したレコードを挿入する。
oi_user. サブフローとして呼び出すワークフロー名 サブフローとして呼び出すワークフロー名を指定する。
awx.run_job_template 自動化のジョブテンプレートを実行する。
awx.get_job_result 自動化のジョブの結果を取得する。

(表)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_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_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
    next:
      - when: <% succeeded() %>
        do: create_vm_wf_01
      - when: <% failed() %>
        do: fail

  create_vm_wf_01:
    label: 申請
    action: core.noop
    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提供部品