Kompira

Menu Menu

Enterprise Technical information

Kompiraジョブフローの基礎 ジョブフローの書き方FAQ(その2)

ジョブフローの書き方FAQ(その1)に続いて、ジョブフローの書き方に関するFAQをご紹介します。


 

動作確認環境

 

ソフトウェア バージョン
Kompira 1.5.5.post7
LinuxOS CentOS7.8.2003

 

※本記事は上記環境を利用して検証しております。掲載時点の情報であり、最新のものとは異なる場合があります。予めご了承ください。

 


 

(1) オブジェクト名の命名規則

命名時のルールとしては次の様なものがあります。
・アルファベット、数字、アンダーバー(“_”)、日本語を使うことができる
・先頭の文字は数字以外でなければいけない
・アルファベットの大文字と小文字は区別される
・オブジェクトの名称の長さは128文字以内でなければいけない
・絶対パスの長さは1024文字以内でなければいけない

以下に具体例を示します。

 

オブジェクト名 有効かどうか 備考
AAA (半角) OK
_AAA (半角) OK
111 (半角) NG 数字で始まるためNG
AA-B (半角) NG ハイフンが含まれるためNG
AAA (全角) OK
111 (全角) OK 数字から始まるが、全角文字のためOK
いろは (全角) OK
*A (全角) NG
-A (全角) NG
_A (全角) NG

 

「-(ハイフン)」が使用できないことに注意してください。
また、全角の数字については先頭であっても使用できますが、全角の記号は半角記号と同じく、名前に含めることはできません。

 

(2) 状態変数を文字列の中に埋め込みたい

Kompiraでは、文字列の中に$付きで変数名を記述すると、ジョブフロー中に定義されている変数の値に置換して文字列とする機能があります。

 

[x = "hello"] ->
print("$x, world")    # "hello, world"

 

Kompiraでは各命令の結果を格納する$RESULT, $STATUS, $ERROR, $DEBUGという変数が存在し、これらを「状態変数」と呼んでいます。
これらは変数名自体に「$」が入っているので、 “$RESULT” と書いただけでは文字列の中で値を展開させることができません。

この場合、 “${$RESULT}” のように、 { }で囲むように記述することで値を展開させることができます。

 

["pwd"] ->
print("Status: $STATUS Path: $RESULT") ->      # このまま表示される
print("Status: ${$STATUS} Path: ${$RESULT}")   # "pwd"コマンドの実行結果としての $STATUS, $RESULT の値が埋め込まれた文字列が表示される

 

(3) 変数で扱える数について

Kompiraの変数では整数を扱うことはできますが、小数点がつく実数は扱えません。

 

[pi = 3.14]   # Syntax error

 

システム運用目的のジョブフローの場合には、あまり小数を扱うケースはありませんが、例えば構成管理でミドルウェアのバージョン番号などを保存しておきたいようなケースでは、数字を文字列として扱う必要がありますので、ご注意ください。

 

(4) sshコマンド実行時の状態について

Kompiraでは[“コマンド”] という構文を使用することで、ローカル/リモートサーバ上でコマンドを実行させることができます。
このとき、[“コマンド”]はそれぞれ個別に通信が発生して実行されます。よって、前の[ ]の処理で実行した一時的な設定は、次の[ ]に引継ぐことができません。
具体的には、ディレクトリの変更を行うcdコマンドや、環境変数のexportコマンドの結果などが引き継がれません。

 
環境変数の変更を伴うジョブフロー例

# システムのデフォルト言語設定が日本語と想定
# 環境変数の設定が必要な場合の例(英語表記)
["export LANG=C; date"] ->  
print($RESULT) ->           # Wed Jun  7 18:35:31 JST 2017
 
# 直前の環境変数は引き継がれずに日本語表記される
["date"] ->
print($RESULT)              # 2017年  6月  7日 水曜日 18:35:12 JST

 

UNIX/Linuxが対象の場合は、上記のように”;”を使って処理を連続させることで回避することができます。

また、cdを行いたい場合は、__dir__制御変数を使用することでコマンド実行時のワーキングディレクトリを指定することができます。

より長い手順を実行する必要がある場合は、スクリプトジョブ型オブジェクトを使用してスクリプトにより処理を実行するようにする、もしくはsessionブロックを利用するといった方法があります。

 

(5) 外部コマンド結果の受信タイミングについて

Kompiraの[“コマンド”]構文を使用してコマンド実行を行う場合、Kompiraは実行したコマンドが終了したタイミングですべての結果を取得します。
ジョブフローを実行すると、コンソール画面には外部コマンドの実行結果が表示されますが、表示されるのはコマンドが終了したときです。
例えば、終了するまで1分かかるようなコマンドを実行する場合、コンソール画面では出力を逐次表示するのではなく、終了時にすべての出力が表示される、という動作となります。

また、手動でCtrl+C(SIGINTシグナルの送信)をすることで停止することが想定されているようなコマンドは、停止させることができません。(例: tail -f, topなど)
この場合、コマンドのオプションで停止するような動作にできるかどうかを調べてみてください。

 

["vmstat 1 30"] ->        # 1秒ごとに30回結果を表示するコマンド
print($RESULT)            # 30秒経過後にまとめて$RESULTに結果が格納される

 

上記例の “vmstat 1 30” は、シェルログインしたコンソール上で実行すると1秒ごとに表示が追加されますが、Kompiraでは30回の結果表示が完了し、コマンド自体が終了したタイミングで結果を取得します。

 

(6) 文字列の指定に使用する ‘ と ” は何か違いがあるか?

特にありません。どちらも対になる記号を入れて利用します。

“hello ‘ world”
‘hello ” world’
のように、 ‘ や ” の文字を文章中に含めたい場合には、それとは別の記号を引用符として使う事で扱えるようになります。

 

(7) 配列や辞書の要素を削除したい

del_itemメソッドを使用することで、配列および辞書の要素の削除をすることができます。

 
del_itemの使用例”

[arr = ['a', 'b', 'c', 'd']] ->
print(arr) ->               # ['a', 'b', 'c', 'd']
[arr.del_item: 1] ->        # 1番目の要素 "b" を削除
print(arr) ->               # ['a', 'c', 'd']

[dict = {'key1': 'a', 'key2': 'b', 'key3': 'c'}] ->
print(dict) ->              # {'key1': 'a', 'key2': 'b', 'key3': 'c'}
[dict.del_item: "key2"] ->  # "key2" の要素を削除
print(dict)                 # {'key1': 'a', 'key3': 'c'}

 

また、辞書に対してはpop_itemというメソッドを使用することができます。
pop_itemは、指定されたキーを辞書から削除し、値を$RESULTに格納します。また、キーが存在しない場合のデフォルト値もあわせて指定することができます。

 
pop_itemの使用例

[dict = {'key1': 'a', 'key2': 'b', 'key3': 'c'}] ->
print(dict) ->                     # {'key1': 'a', 'key2': 'b', 'key3': 'c'}
[dict.pop_item: "key2", "X"] ->    # 'key2' の要素を削除し、$RESULTに格納する
print($RESULT) ->                  # 'b' 
print(dict)                        # {'key1': 'a', 'key3': 'c'}

[dict.pop_item: "key999", "X"] ->  # 存在しないキーの指定
print($RESULT)                     # 'X'

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携