StackStorm再入門その2までで、Vagrant+VirutalBox環境上のCentOS7にStackStorm(St2)を導入し、St2の構造についても説明しました。
今回は、St2活用の基本ということで、パックとアクションの作り方を説明します。
パックの作成
パックは、St2のアクションやトリガーといった構成要素をまとめて管理するための単位です。公開されているパックをインストールすることもできるし、自分でパックを作成することもできます。
パックを作成するには、Pythonのst2sdkパッケージを使うと便利です。ここでは、St2本体でも使用しているCentOS7標準のPython2環境に導入していきます。
まずは、Pythonのパッケージ管理ツールであるpipをyumで導入します。
sudo yum install python2-pip
そのpipを使って、st2sdkをインストールします。
sudo pip install st2sdk
パックの作成は簡単です。いまインストールしたst2sdkのbootstrap
コマンドでパック名(ここではhello
)を指定するのみです。
cd /vagrant
st2sdk bootstrap hello
hello
というディレクトリに、下図のような構造でファイルとディレクトリが作成されます。
自動生成されたpack.yaml
はこのようになっています。パック名と、後はバージョン名などのメタ情報です。ref
の値は、後でパックを指定する際に使用します。
---
name: hello
ref: hello
description: ''
version: 0.1.0
author: John Doe
email: [email protected]
パックは、/opt/stackstorm/packs
配下に置くので、ここではシンボリックリンクを作成します。
ln -s /vagrant/hello /opt/stackstorm/packs/hello
アクションの作成
St2のアクションは、定義ファイルのyamlと実体のプログラムという構成で作成します。actions/echo.yaml
を作成し、下記のようにします。
---
name: hello_echo
pack: hello
runner_type: local-shell-script
entry_point: echo.sh
description: hello echo action
enabled: true
parameters:
name:
type: string
default: 'John'
今回はシェルスクリプト(entry_point
の値としてスクリプト名を指定)が実行したいアクションの本体なので、ActionRunner(runner_type
)としてlocal-shell-script
を指定します。
parameters
の値はアクションを実行する際の引数です。name
という名前のパラメータを定義し、その型がstring
であり、デフォルト値がJohn
であることを指定します。
次に、実行したいシェルスクリプトをactions/echo.sh
に作成します。
極めて単純なものですが、下記のようにしました。
#!/bin/sh
echo "Hello, $1!"
exit 0
St2にログイン
St2 CLIのコマンドを実行する前に、St2にログインします。--write-password
を指定することで、以後、自動的にログインすることができます。
st2 login st2admin --write-password
パックの登録
ここまで作成したら、作成したパックをSt2に登録します。パックに含まれるアクションも自動で登録されます。
cd /opt/stackstorm/packs
st2 pack register hello
ちなみに、パックを登録した後にアクションを追加する場合は、st2 action create
というコマンドを使用し、引数としてアクションの定義ファイル(yaml)のパスを指定します。
st2 action create hello/actions/echo.yaml
アクションの定義ファイルを更新した場合は、st2 action update
コマンドの引数にアクションのref
の値と、アクションの定義ファイルを指定します。(アクションの定義ファイルを変えずに、実行したいシェルスクリプトの中身だけが変わる場合は特に何もする必要はありません。
st2 action update hello.echo hello/actions/echo.yaml
アクションの実行
st2 action execute
で、アクションを実行してみましょう。st2 action execute
コマンドの引数としてアクションのref
の値を指定します。
st2 action execute hello.echo
St2のWebコンソールからアクションの実行ログを見ると、このように表示されました。シェルスクリプトには引数の値が--name=John
のように引き渡されるようです。
シェルスクリプトを変更
引数の値だけを取得できるようにシェルスクリプトを少し変更しました。(かなり適当な実装ですが・・・。)
先ほど述べたように、実行するシェルスクリプトの中身が変わっただけの場合は、特に何もしなくてもSt2に反映されます。
#!/bin/sh
name=${1:7}
echo "Hello, $name!"
exit 0
アクションの引数は、このように引数名と値をイコールでつないで指定します。
st2 action execute hello.echo name="Ken"
このように、望んだ結果が得られました。