「メールを送信する」では、指定の URL にリクエストを送り、その結果をメールで通知するジョブフロー (以降「メールでの通知」ジョブフローとする) を作成しました。
| url = "http://www.kompira.jp/" |
urlopen(url) =>
{ if $STATUS != 0 |
then:
mailto(
to="tantou@sample.co.jp",
from="operator@sample.co.jp",
subject="障害通知",
body="異常が検出されました"
)
elif $RESULT.code != 200:
mailto(
to="tantou@sample.co.jp",
from="operator@sample.co.jp",
subject="障害通知",
body="異常が検出されました。エラーコードは %{code}" % $RESULT
)
else:
mailto(
to="tantou@sample.co.jp",
from="operator@sample.co.jp",
subject="正常通知",
body="特に異常は認められませんでした。"
)
}
ここでは mailto() を何度も呼び出していますが、これを別のジョブフローに切り出して、共通部品化してみます。
動作確認環境
本稿は、以下の環境で検証しています。
| ソフトウェア | バージョン |
| Kompira Enterprise | 1.5.5.post7 |
| OS | CentOS 7.8.2003 |
または
| ソフトウェア | バージョン |
| Kompira Enterprise | 1.6.2.post4 |
| OS | CentOS 8.2.2004 |
または
| ソフトウェア | バージョン |
|---|---|
| Kompira Enterprise | 1.6.8 |
| OS | CentOS Stream 8 |
以下のようなジョブフロー「メール送信」を作成します。
| param_to = "default@kompira.jp" |
| param_from = "info@kompira.jp" |
| param_subject = "default subject" |
| param_body = "default message" |
mailto(param_to, param_from, param_subject, param_body) ->
return('SENT')
ここでは mailto() の引数を、全てパラメータとして設定します。
この「メール送信」ジョブフローは、「メールでの通知」ジョブフローを以下の様に書き換えることで呼び出すことができます。
| url = "http://www.kompira.jp/" |
| to = "tantou@sample.co.jp" |
| from = "operator@sample.co.jp" |
urlopen(url) =>
{ if $STATUS != 0 |
then:
[./メール送信:
to,
from,
"障害通知",
"異常が検出されました"
]
elif $RESULT.code != 200:
[./メール送信:
to,
from,
"障害通知",
"異常が検出されました。エラーコードは %{code}" % $RESULT]
else:
[./メール送信:
to,
from,
"正常通知",
"特に異常は認められませんでした。"
]
}
呼び出すところを見てみると、次のようになっています。
[./メール送信:
to,
from,
"障害通知",
"異常が検出されました"
]
このように [] 内にジョブフローを記載する事で、他のジョブフローを呼び出す事が出来ます。また [jobflow: パラメータ] として、呼ばれる側のパラメータを動的に指定する事が出来ます。パラメータが複数ある場合には上記のように “,(カンマ)” で区切って記載します。
呼ばれる側のジョブフロー (上記の場合は「メール送信」) でパラメータが定義されている順番で、呼ぶ側 (上記の場合は「メールでの通知」) のパラメータを並べます。
では、呼ばれる側の差出人アドレス (“param_from”) はデフォルト値 (“info@kompira.jp”) を使いたいような場合には、どのように呼び出したらいいでしょうか?
この場合には、呼ばれる側のパラメータ名を明示的に指定します。
[./メール送信:
param_to=to,
param_subject="障害通知",
param_body="異常が検出されました"
]
パラメータ名を付加して呼び出す場合には、順番は前後しても構いません。
[./メール送信:
param_body="異常が検出されました",
param_to=to,
param_subject="障害通知"
]
さて、ここで応答がなかった場合に Web サーバー関連のプロセス ( httpd , mysqld ) の起動状況を確認して、停止していた場合には再起動するジョブフロー「プロセス再起動」を作成して追加してみましょう。
プロセス再起動実行のためには sudo をパスワード入力無しで行う必要があるため、前準備として以下のように root (もしくは sudo をパスワード入力無しに行えるユーザー) をノード情報に登録します。


詳しい手順は「[事前準備] 接続先のサーバを登録する」にて紹介しております。
それでは「プロセス再起動」を作成してみましょう。このジョブフローを呼び出す際には通知メールの送信先アドレス等を引数に取るものとし、 ノード名は server1 とします。
| param_to = "default@kompira.jp" |
| param_from = "info@kompira.jp" |
| param_title = "確認通知" |
[
__node__ = ./server1,
__sudo__ = true
] ->
{ for procname in ['httpd', 'mysqld'] |
print('$procname プロセスの動作を確認します') ->
['ps axuw | grep $procname | grep -v grep'] =>
{ if $STATUS == 0 |
[./メール送信:
param_to,
param_from,
param_title,
"$procname プロセスは動作中です"
] ->
continue
} ->
# プロセスが停止していた場合に再起動
print('$procname プロセスは動作していません') ->
['service $procname start && sleep 5'] =>
{ if $STATUS != 0 |
[./メール送信:
param_to,
param_from,
param_title,
"$procname の再起動に失敗しました"
] ->
return(false)
} ->
# 再起動に成功した場合
[./メール送信:
param_to,
param_from,
param_title,
"$procname を再起動しました"
]
} ->
return(true)
これを「メールでの通知」ジョブフローに追加すると、以下のようになります。
| url = "http://www.kompira.jp/" |
| to = "tantou@sample.co.jp" |
| from= "operator@sample.co.jp" |
urlopen(url) =>
{ if $STATUS != 0 |
then:
[./メール送信:
to,
from,
"障害通知",
"異常が検出されました"
] ->
[./プロセス再起動: to, from]
elif $RESULT.code != 200:
[./メール送信:
to,
from,
"障害通知",
"異常が検出されました。エラーコードは %{code}" % $RESULT
] ->
[./プロセス再起動: to, from]
else:
[./メール送信:
to,
from,
"正常通知",
"特に異常は認められませんでした。"
]
}
上記で見てきた通り、共通する機能や処理に関しては、独立したジョブフローを作成しておくことで、繰り返し処理であったり複数のジョブフローから呼び出す事が可能になります。また、呼び出す側は実行時の条件指定が出来るため、条件に応じた対応を行う事が可能となります。
今回の記事では mailto() を同じ機能のジョブフローで置き換えるなど、極めて単純な例で説明をいたしましたが、もちろんまとまった大規模な処理を記述する事も可能です。
ただし、可読性・保守性を高めるためには1つのジョブフローで処理をすべて書くよりも、適切にジョブフローを分割して管理することが重要です。








