Enterprise 技術情報 Enterprise Technical information
Kompiraジョブフローの基礎 ジョブフローの書き方FAQ(その1)
ここでは、Kompiraのセミナーでご質問頂いたジョブフローの書き方についてご紹介します。
動作確認環境
ソフトウェア | バージョン |
---|---|
Kompira | 1.5.5.post7 |
LinuxOS | CentOS7.8.2003 |
(1) 文字列と数字を”+”したらどうなるの?
Kompiraの変数は型を持ちませんので、その時に格納されている値を評価します。その際にどのようなリテラル(型)で評価するかにより、演算の結果が変わります。
# (a) 数字を"+"すると加算 [val1 = 123, val2 = 456] -> [result = val1 + val2] -> print(result) -> # 579 # (b) 文字列を"+"すると文字列結合 [val1 = "123", val2 = "456"] -> [result = val1 + val2] -> print(result) -> # 123456 # (c) 数字の文字列化 [val1 = 123, val2 = 456] -> [result = string(val1) + string(val2)] -> print(result)-> # 123456 # (d) 文字列の数値化 [val1 = "123", val2 = "456"] -> [result = int(val1) + int(val2)] -> print(result) -> # 579 # (e) 数字と文字列を"+"するとエラーになる [val1 = 123, val2 = "456"] -> [result = val1 + val2] -> print(result) # aborted at line 14 in /root/ジョブフロー: Failed to execute binary operation: unsupported operand type(s) for +: 'int' and 'unicode'
(a) は2つの変数val1, val2の値が整数と評価されるので、足し算されます。
(b)は両方とも文字列なので”+”は文字列結合となります。
(c),(d)は型の変換の例で、整数を文字列にする場合にはstring()を、逆に文字列を整数にする場合はint()を用います。
(e)の整数+文字列の場合には型の異なる変数間の演算となるため実行時エラーとなります。
(2) ジョブフローのパラメータに123と書いた場合と”123″と書いた場合の動きの違いは?
こちらも上記の質問の場合と同様に、それぞれ整数、文字列で評価されます。
| param_str = "123" | | param_num = 456 | print(type(param_str), param_str) -> print(type(param_num), param_num)
実行結果
String 123 # 文字列で評価 Integer 456 # 整数で評価
(3) 変数に型宣言は出来ないのか?
出来ません。
・ジョブフローのパラメータ指定で入力値に制約を持たせたい場合には、フォーム機能の「フィールド種別」で限定する事が出来ます。
参考:ジョブフローを実行するフォームの作成
・ジョブフロー中で整数を文字列に、文字列を数字に変換したい場合にはstring(), int()のような組み込み関数を用いて型変換を行ってください。
(4) 変数のスコープはどうなっているの?
・基本的にはジョブフロー内から参照できます。 (ジョブフロースコープ)
・{ } で囲まれた単純ブロックで定義された変数やループ変数は{}内に限定されます。 (ブロックスコープ)
[a = 10] -> print(a) -> # ジョブフロースコープの変数a {a = "hello"| print(a)} -> # この行の変数aはブロックスコープ { } 内にでのみ参照できる print(a) -> # { }外なのでジョブフロースコープの変数a [a=10, b=10] -> print("Before Loop: ", a, b) -> {for a in b | print(a,b)} -> # for文のループ変数aはブロック{ }でのみ有効。 変数bはジョブフロースコープ print("After Loop: ", a, b) # { }外なのでジョブフロースコープのa,b
実行結果
10 hello # ブロックスコープで定義したaの値 10 # ジョブフロースコープで定義したaの値 Before Loop: 10 10 # ジョブフロースコープのa,b 0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10 After Loop: 10 10 # ループを抜け、ジョブフロースコープへ
(5) 配列要素を文字列中に展開する方法はあるか?
配列要素を直接文字列の中に埋め込むことはできないため、ブロックスコープか”%”演算子を使用して表示します。
| array = ["a", "b", "c"] | print("2nd element:", array[1]) -> # printは複数の値を引数にできるため、引数として個別に指定する print("2nd element: $array[1]") -> # 要素に$をつけると、配列array と 文字列"[1]"と解釈してしまう { elem = array[1] | print("2nd element: $elem")} -> # ブロックスコープを使用する例 print("2nd element: %elem" % {elem = array[1]}) # "%"演算子を使用する例
実行結果
2nd element: b 2nd element: ['a', 'b', 'c'][1] 2nd element: b 2nd element: b
(6) プレイスホルダーに複数の辞書変数から置換する方法は?
文字列 % 辞書変数 の “%”は演算子であり、文字列に近い方から適用されます。
[dict1 ={"k1":"v1", "k2":"v2", "k3":"v3"}] -> [dict2 ={"k4":"v4", "k5":"v5", "k3":"ZZ"}] -> # (a) dict1でk1を入れ替えた後、dict2でk5を入れ替え [ message = "%k1 と %k5" % dict1 % dict2] -> print(message) -> # v1 と v5 # (b) dict1, dict2で同じキー: 先にdict1で2つのk3が入れ替わってしまう [ message = "%k3 と %k3" % dict1 % dict2] -> print(message) # v3 と v3
(a)の場合、最初にdict1の”%k1″が置換されます。後ろのキー “%k5″はdict1にキーが無いため、置換されません。
2つ目の%演算子でdict2のキーで”%k5″が置換されます。
つまり、以下のように文字列が置換されて行きます。
"%k1 と %k5" % dict1 % dict2 "v1 と %k5" % dict2 "v1 と v5"
(b)では dict1, dict2ともに k3 というキーを持ちます。これも(a)と同じルールで置換していくと以下のようになります。
"%k3 と %k3" % dict1 % dict2 "v3 と v3" % dict2 # 両方ともdict1で置換され、文字列中にキーが残らない "v3 と v3"
このようにして、複数の辞書変数を用いて文字列置換を行う事が出来ます。
スタートガイド
Kompiraジョブフローの基礎
ジョブフローの簡単な例
Kompiraの機能
-
- フィールド修飾子でフィールドの入力内容に制約を設ける
- Kompiraでの文字列のパターンマッチング
- Kompira上でWikiページを作成する
- スケジューラを使って定期的にジョブを実行する
- ジョブフローを実行するフォームを作成する
- テーブル内の情報を選択して処理を実行する
- ジョブフローに権限設定をする
- ジョブフロー画面の各種設定
- Pythonで記述された処理をKompiraから呼び出す
- Kompiraオブジェクトのプロパティ,メソッド,フィールドを扱う
- Windowsでリモートスクリプトを実行する(その1)
- Windowsでリモートスクリプトを実行する(その2)
- Kompira上のデータをバックアップする(その1)
- Kompira上のデータをバックアップする(その2)
- Kompira上のデータをバックアップする(その3)
外部との連携
-
- Prometheusからの通知をKompiraで受信する
- Kompira cloud Pigeonを利用した通知電話の利用
- ネットワーク機器へのコマンド投入
- KompiraからWindowsGUIアプリケーションを操作する (1/2)
- メールを送信する
- メール受信をトリガーにしてジョブフローを実行する
- アラートメールをフィルタリングして転送する
- チャネルを利用して外部システムからデータを受信する
- Webページから内容を取得する
- Redmineへ新規チケットを登録する
- Redmineでのチケット作成をKompiraに通知する
- Kompira REST APIを利用して外部からジョブフローを実行する
- Kompira REST APIを利用して外部からオブジェクト情報を取得する
- KompiraからSlackに通知する
- Slackでの投稿をKompiraに通知する
- KompiraからTwilioで電話をかける
- Zabbixからの通知をKompiraで受信する
- syslogをKompiraで受信する
- snmptrapをKompiraで受信する
- KompiraでExcelファイルの読み書きをする
- KompiraでGoogle SpreadSheetの読み書きをする
- Active Directoryから情報を取得する
- Active Directoryにユーザーを登録する