Kompira

Menu Menu

Enterprise Technical information

ジョブフローの簡単な例 CSVファイルからテーブル情報を作成する

管理下のサーバーにパッチをあてる場合のように、決まった処理を複数のサーバーに適用する場合の方法は、別記事「複数サーバーでのコマンド実行」で、テーブル型オブジェクトを利用した繰り返し処理で記述する方法をご紹介しました。

テーブル型オブジェクトにサーバー登録を追加するのは、Kompira画面から1台ずつ登録する事も出来ますが、台数が多くなると登録作業がひと手間です。
本記事では、このテーブル型オブジェクトにCSVファイルを使って、一括で登録・変更を行う方法をご紹介します。

 
作業の方針

CSVファイル自体はテキストエディターやExcelなどを使って作成します。これを添付ファイル型オブジェクトにアップロードします。CSV形式のデータの読み込みと処理ですが、現在のKompira(バージョン1.4.9)ではCSVデータを扱う組み込み関数が用意されていません。そこでライブラリ型オブジェクトを利用して、PythonのCSVモジュールを利用します。

ノード情報型オブジェクトのテーブルは、あらかじめテーブル型オブジェクトを作成しておきます。CSVファイルから読み込んだデータを利用してaddメソッドを利用してノード情報型オブジェクトを追加。その後、サーバーの各種設定情報を更新します。

この記事では以下のコンテンツを作成します。
(1) サーバー情報を記載したCSVファイル
(2) アップロードファイル (添付ファイル型)
(3) /root/user1 (アカウント情報)
(4) サーバーリスト (ノード情報型を格納するテーブル型)
(5) csvreader (ライブラリ型)
(6) サーバー追加 (ジョブフロー型)

 
CSVファイルの作成

ここではサーバー名(ノード情報型オブジェクトの名称に利用)、IPアドレス、ログイン情報(アカウント情報型オブジェクトのパス)の3つの項目を記載します。
CSVファイル

名前は適当につけてPC上に作成しておきます。

 
アップロードファイル(添付ファイル型)の作成

アップロードファイル

作成したCSVファイルを添付ファイル型のオブジェクトにアップロードします。上図の様に作成し、編集画面の添付ファイル1よりPC上のファイルを指定してアップロードします。

 
アカウント情報(/root/user1)の作成

CSVファイルの「ログイン情報」に記載したパスでオブジェクトを作成します。

アカウント情報

sshでログインするためのID、パスワードをそれぞれ指定します。本記事での例では全てのサーバーに同じアカウント情報を設定しています。もしCSVファイルで複数のアカウント情報を記載している場合には、それに応じたアカウント情報を個別に作成しておいてください。

 
サーバーリスト(テーブル)の作成

ここではあらかじめ手動でオブジェクトを作成しておきます。

サーバーリスト

上図のように設定画面にて「ノード情報」を設定して保存してください。

 
csvreader(ライブラリ型)の作成

PythonのCSVモジュールを利用して、指定されたCSVファイルを読み込み、各行を要素とする配列形式で応答します。
ここでは”csvreader”という名前のライブラリ型オブジェクトを作成し、関数名を”read_csv”とします。
ライブラリ「csvreader」

import csv #csvモジュールをインポートする

def read_csv(datafile):
	array_result = []	# 配列形式のデータで返す
	f = open(datafile, 'rb')
	dataReader = csv.reader(f)

	# CSVファイルから1行ずつ読み込んで配列に格納
	for row in dataReader:
		array_result.append(row)

	return(array_result)

 
ジョブフローの作成

これまで作成した各オブジェクトを処理するジョブフローを書きます。

|table_name = ./サーバーリスト|             # (4)で作成したテーブル
|file       = ./アップロードファイル|        # (2)で作成した添付ファイル

# 添付ファイルオブジェクトのCSVデータの読み込み
[csvdata = file.attached1.data] -> 
[tmp_file = '/tmp/dummy.csv'] ->            # Kompiraサーバー上の一時ファイル
['cat > $tmp_file' << ./アップロードファイル.attached1.data] ->
[arr = ./csvreader.read_csv(tmp_file) ] -> # (5)のライブラリの呼び出し

{ for item in arr |
    # CSVの各要素の取り込み
    [name    = item[0]] => {if name == "" | break } ->
    [ip      = item[1]] ->
    [account = item[2]] ->

    # 指定の名称のノード情報が無い場合は作成
    path( "$table_name/$name" ) =>
    { if $STATUS != 0 | [./サーバーリスト.add: name] } ->
    [obj = $RESULT] ->

    # ノード情報の登録情報の更新
    [name >> obj.hostname] ->
    [ip   >> obj.ipaddr] ->
    [account >> obj.account]
}

このジョブフローを実行すると、テーブルには以下の図のようにノード情報が追加されます。既存の登録名がある場合にはCSVの記載内容で情報が更新されます。

サーバーリスト

CSVからダイレクトにテーブルに格納する機能はありませんが、ここで見てきたようにファイルの読み込みからオブジェクトに反映させる事は可能です。もしデータがJSON形式であれば、ライブラリを用いずに組み込み関数のJSON_parse()関数を利用して記述する事が出来ます。

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携