ITのチカラで、デジタルビジネスへの変革を。

stackstormでActionChainを作ろう

#StackStorm #自動化

はじめに

前回の記事では、stackstormのインストール方法を記事として記載しましたが、今回はstackstormの醍醐味でもある「ActionChain」の作成方法について書いていきたいと思います。

ActionChainとは

公式ドキュメントを要約すると複数のActionを直線的に結びつけた単純なワークフロー、または、成功or失敗程度の簡単な分岐ロジックの入ったワークフローを提供と書いてあります。※詳しくは公式ドキュメントを参照ください。

イメージ図

それでは実際に「ActionChain」を作成してみたいと思います。

ActionChainの作成

準備としてActionChainのMetadataを作成していきます。

Metadataの作成

Metadataの作成場所ですが、以下のフォルダになります。

/opt/stackstorm/packs/<pack>/actions

 

※<pack>については、任意の場所を指定してください。

例:default配下であれば<pack>にdefaultを指定する。

/opt/stackstorm/packs/default/actions

 

作成するMetadataは以下になります。

[root@localhost actions]# cat actionchain-test.meta.yaml
name: "actionchain-test"
pack: "default"
description: "test Action Chain"
runner_type: "action-chain"
entry_point: 'workflows/actionchain-test.yaml'
enabled: true
[root@localhost actions]#

 

パラメータ 設定値 説明
name actionchain-test action名
pack default 登録するpack名
description test Action Chain 実行するactionの説明
runner_type action-chain 動作するactionのタイプ
entry_point workflows/actionchain-test.yaml 動作するワークフローの場所
enabled True 動作モード

Metadataの作成が完了したら、いよいよAction-chainを作成します。

Action-chainの作成

Metadataの作成時にも指定した「entry_point」に実際に動作させるAction-chainを作成します。今回は、公式サイトにあったものを使用して説明していきたいと思います。

[root@localhost workflows]# cat actionchain-test.yaml
---
    chain:
        -
            name: "c1"
            ref: "core.local"
            parameters:
                cmd: "echo c1"
            on-success: "c2"
            on-failure: "c4"
        -
            name: "c2"
            ref: "core.local"
            parameters:
                cmd: "date"
            on-success: "c3"
            on-failure: "c4"
        -
            name: "c3"
            ref: "core.local"
            parameters:
                cmd: "echo c3"
            on-failure: "c4"
        -
            name: "c4"
            ref: "core.local"
            parameters:
                cmd: "echo fail c4"
    default: "c1"
[root@localhost workflows]#

 

Action-Chainの動作を把握するためにものすごくシンプルなものを選びました。一目見て動作を理解できる方もいるとは思いますが、ワークフローにすると以下のようになります。

ワークフローの中身を全部説明せずとも一部をピックアップして説明するだけですべて理解できると思います。以下一部ピックアップ(一番初めに動作する箇所になります。)。

-
    name: "c1"
    ref: "core.local"
    parameters:
        cmd: "echo c1"
    on-success: "c2"
    on-failure: "c4"

 

パラメータ 設定値 説明
name c1 action名
ref core.local 使用するaction
parameters cmd: “echo c1” 実行するコマンド
on-success c2 コマンド成功の場合は、c2の処理
on-failure c4 コマンド失敗の場合は、c4の処理

はじめに、c1の処理が動作します。処理内容としては、”core.local”Actionを使用して”echo c1″を表示するコマンドになります。コマンドの実行結果が成功した場合は、c2の処理を実行。実行結果が失敗した場合は、c4の処理を実行します。今回は、”core.local”Actionを使用してますが、”core.remote”を使用すればリモートサーバの操作なども操作可能です。※Actionについてはまた後日の記事でご紹介できればと思います。

Action-Chainの実行

ここまででAction-Chain(workflow)とMetadataの作成が完了しましたので、実際に動作するか実行していきます。まずは先ほど作成したAction-ChainのMetadataをstackstormに登録していきます。コマンドは以下になります。

[root@localhost workflows]# st2 action create /opt/stackstorm/packs/default/actions/actionchain-test.meta.yaml
+-------------+---------------------------------+
| Property    | Value                           |
+-------------+---------------------------------+
| id          | 5abdc4c7e1382306b8084821        |
| name        | actionchain-test                |
| pack        | default                         |
| description | test Action Chain               |
| enabled     | True                            |
| entry_point | workflows/actionchain-test.yaml |
| notify      |                                 |
| parameters  |                                 |
| ref         | default.actionchain-test        |
| runner_type | action-chain                    |
| tags        |                                 |
| uid         | action:default:actionchain-test |
+-------------+---------------------------------+

 

※作成に失敗した場合は、.yamlファイルの書き方が悪い場合もありますので一度チェックしてみてください。

登録ができたか確認していきます。コマンドは以下になります。※今回は、defaultのpackに追加したので以下になります。

[root@localhost workflows]# st2 action list --pack=default
+--------------------------+---------+-------------------+
| ref                      | pack    | description       |
+--------------------------+---------+-------------------+
| default.actionchain-test | default | test Action Chain |
+--------------------------+---------+-------------------+

 

ここまでで準備は完了です。あとは実際に動作確認していきます。以下のコマンドで動作確認を行います。

[root@localhost workflows]# st2 run default.actionchain-test
...
id: 5abdcc23e1382306b8084829
action.ref: default.actionchain-test
parameters: None
status: succeeded
result_task: c3
result:
  failed: false
  return_code: 0
  stderr: ''
  stdout: c3
  succeeded: true
start_timestamp: Fri, 30 Mar 2018 05:33:23 UTC
end_timestamp: Fri, 30 Mar 2018 05:33:28 UTC
+--------------------------+------------------------+------+------------+-----------------+
| id                       | status                 | task | action     | start_timestamp |
+--------------------------+------------------------+------+------------+-----------------+
| 5abdcc23e1382303db1b92de | succeeded (1s elapsed) | c1   | core.local | Fri, 30 Mar     |
|                          |                        |      |            | 2018 05:33:23   |
|                          |                        |      |            | UTC             |
| 5abdcc25e1382303db1b92e0 | succeeded (0s elapsed) | c2   | core.local | Fri, 30 Mar     |
|                          |                        |      |            | 2018 05:33:25   |
|                          |                        |      |            | UTC             |
| 5abdcc26e1382303db1b92e2 | succeeded (1s elapsed) | c3   | core.local | Fri, 30 Mar     |
|                          |                        |      |            | 2018 05:33:26   |
|                          |                        |      |            | UTC             |
+--------------------------+------------------------+------+------------+-----------------+
[root@localhost workflows]#

 

これだと少しわかりにくいのでwebでも確認をしてみましょう。

実行したAction-Chainのログが表示されてます。今回は、すべてのactionが正常に終了したのですべて緑色になっております。失敗した場合は、赤色に表示されるのでわかるかと思います。一つ一つにactionをクリックすると実行した結果が見れるようになっております。

まとめ

「ActionChain」の作成に最初は時間がかかってしまうと思いますが、慣れてしまえば簡単にワークフローを作成することが可能だと思います。既に運用業務などで手順書等を使ってコマンドを入力している場合は、「ActionChain」を使うことで自動化が可能だと思いますので、是非チャレンジしてみてください。

Masahiro Someya

この記事を書いた人

Masahiro Someya