Enterprise 技術情報 Enterprise Technical information
Kompiraの機能 Pythonで記述された処理をKompiraから呼び出す
Kompiraのジョブフローはssh接続した上でのシェルコマンド実行や、メールの送受信など、運用フローを考える上で頻出する処理が書きやすいように作られています。しかし、実際の運用現場で行われる処理は多様です。ExcelやCSVファイルを読み書きしたい場面があるかもしれません。MySQLやOracle DBなど、RDBMSにアクセスしたいこともあるでしょう。
このようにKompiraの標準機能として用意されていない要素を扱いたい場合は、Pythonのプログラムで機能を実装し、それをKompiraのジョブフローから呼び出す、という方法があります。
本記事ではPythonの言語仕様の詳細には触れず、若干の基礎知識は持っている前提です。必要に応じて専門書やサイトなどを参照してください。
環境情報
本記事は、以下の環境で検証しております。
※ 上記バージョンのKompiraのライブラリオブジェクトとして記述できるのは、バージョン2系のPythonスクリプトのみとなります。
Pythonプログラムについて
Pythonの構文として、ここではdefとimportの2つについて簡単に説明をします。
まずdefは、Pythonで関数を定義するための構文となります。
編集画面で以下のスクリプトを記述して保存します。split()はPythonの文字列を単語に分解する関数です。
ライブラリ「extlib」
結果、次の様な画面になります。ここで「FUNCTIONS」の欄に salestax(x)とsplit(x)が表示されます。これがジョブフローから利用できる関数になります。
これで定義した関数を利用してみましょう。
ここでは新しくジョブフロー「ライブラリ利用」を作成してみます。
ジョブフロー「ライブラリ利用」
これを解消するためにはKompiraサーバにおいて以下のコマンドを実行し、Kompiraの環境において mysql-connector-python をインストールする必要があります(管理者権限が必要です)。
項目 | バージョン |
OS | CentOS Linux release 7.7.1908 |
Kompira | ver.1.5.5.post8 |
mysql-connector-python | 8.0.20 |
def salestax(x): rate = 0.1 return x * rateこれは消費税額を計算する単純なスクリプトです。ここではdef文を用いて関数salestax()を定義しています。 ここでsalestax()を利用して税込価格(priceincludingtax)を計算するのは次の様にします。
price = 1000 priceincludingtax = price + salestax(price)次に、importはPythonライブラリの読み込みを行うための構文です。 Pythonには標準、サードパーティー含め、豊富なライブラリが用意されています。特にデータ加工や、外部システムと通信するためのAPIライブラリがPythonで提供されているケースも多くみられます。 ここではMySQLのドライバ mysql-connector-python を利用し、レコードを追加する例を説明します。 MySQLのドライバを使用してレコードを追加する例
import mysql.connector as mydb conn = mydb.connect(host='localhost', port='3306', user='user', password='password', database='kompiradb') curs = conn.cursor() sql = u"insert into test_table values(1, 'kompira')" curs.execute(sql) sql = u"insert into test_table values(2, 'こんぴら')" curs.execute(sql) conn.commit() curs.close() conn.close()ジョブフローからPythonスクリプトを呼び出す まずは「ライブラリ」オブジェクトを作成します。ここでは「extlib」という名前で作成します。

def split(x): return x.split() def salestax(x): rate = 0.1 return x * rate


# 消費税額の計算 [./extlib.salestax: 1000] -> print($RESULT) -> # 単語分割 [./extlib.split: "hello, world"] -> print($RESULT)これを実行すると以下のような結果が得られます。
100.0 ['hello,', 'world']Kompiraの標準ライブラリでは文字列処理の関数はあまり多くありませんが、split()以外にもfind()などの文字列検索や、reモジュールを呼び出して正規表現によるパターン検索なども行えます。 ここで注意が必要なのが外部pipモジュールのインストール方法です。例えば、MySQLのドライバを利用する例では mysql-connector-python というpipモジュールが必要となります。必要なモジュールがKompiraの環境にないと、ライブラリオブジェクトは以下のようなエラーを出します。

$ /opt/kompira/bin/pip install mysql-connector-pythonインストールが完了したら、ライブラリオブジェクトを「編集」→「保存」すると実行できるようになります。 また、引数の与え方にも注意する必要があります。Kompiraの外部ジョブフローを呼び出すときのように”:”の後に記載するか、()の中に指定して変数に代入します。単に()の中に指定しただけで変数に代入しないと、ライブラリ呼び出しの結果 (ここでは「100」) をジョブとして実行してしまうため、エラーとなります。 NGの例
[./extlib.salestax: 1000] -> print($RESULT) -> [res = ./extlib.salestax(1000)] -> print(res) -> [./extlib.salestax(1000)] -> # エラー print($RESULT)このようにKompira本体の機能で不足する場合は、Pythonの豊富な機能を利用する事が出来ます。特に外部システムと連携したいとき、Pythonライブラリが提供されている場合には積極的に利用してみましょう。
スタートガイド
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にユーザーを登録する