2014年3月24日

Kompiraオブジェクトことはじめ

開発部の溝江です。

 Kompiraはジョブフローやそこで使用される各種データ、テンプレートなどをオブジェクトとして管理できる機能を提供しています。
各オブジェクトはブラウザ上から閲覧・編集でき、ジョブフローからもアクセスできます。
デフォルトで用意されているオブジェクト型の他に、自分で型を定義することも可能です。

本記事では上記のようなオブジェクトの使い方について解説します。
(なお、本記事はKompira 1.3.5の仕様に基づき記述しています。)



オブジェクトの作成 

Kompiraをインストール直後、ブラウザからKompiraにrootユーザでログインすると以下の様な画面が表示されます。


KompiraはUNIXライクなファイルシステムを持っており、上記の場合「/root」という位置にあるディレクトリを表示しています。KompiraオブジェクトのパスとURLのパスは対応していて、この場合のURLはhttp://(kompiraサーバ名)/rootとなります。


以下に、デフォルトで用意されている代表的なオブジェクトをいくつかご紹介します。

ディレクトリ


中に複数のオブジェクトを格納できるオブジェクトです。
これにより、ジョブフローや各データをツリー構造上に配置して管理することができます。
画面下部のフォームに名称と型を入力して新規作成ボタンを押すと、ディレクトリに新しいオブジェクトが追加されます。


ジョブフロー


Kompiraの主な機能であるジョブフロー言語を記述するオブジェクトです。ジョブフロー言語の閲覧・編集・実行をすることができます。
ジョブフロー言語の文法についてはKompiraジョブフロー言語基礎文法最速マスターの記事を参照してください。


スクリプトジョブ


シェルやPython, Ruby, Perlなどのスクリプトを記述するオブジェクトです。
ジョブフローから呼び出すことで、Kompiraが動作しているサーバ、またはリモートサーバ上で実行させ、結果を取得することができます。
運用を自動化していくにあたって、既に使用しているスクリプトがある場合、それを全てKompiraのジョブフロー言語で書きなおすのは大変ですし、新たなバグを生み出してしまう可能性もあります。
既存のスクリプトは、スクリプトジョブオブジェクトを利用してフローに組み込むのが良いでしょう。


環境変数


名前と値の組を複数個登録できるオブジェクトです。
最も一般的な使用例は、ジョブフローの中で使用されるパラメータをまとめて環境変数に登録しておくというものです。
前述のジョブフロー画面にもパラメータの入力欄が設けられていますが、ジョブフローを実行する度に変わるようなパラメータはジョブフロー画面で、その他のパラメータは環境変数で管理するといった使い分けをします。


ノード情報/アカウント情報 


ノード情報とアカウント情報は、リモートサーバへの接続に使用する情報を管理できるオブジェクトです。
ノード情報はIPアドレス、接続方式、ポート番号などを、アカウント情報はユーザ名、パスワード、SSH鍵ファイルを登録することができます。
運用フローの中には、1つのサーバについて複数のアカウントを使用する必要がある場合があります。また、多数のサーバを管理している現場では、共通のアカウントを設定しているといったケースが見受けられます。
このようなケースに柔軟に対応するため、アカウント情報とノード情報は別のオブジェクトとして定義されています。

これらの型はジョブフローから使用されることを想定しています。
ジョブフローからリモートサーバに対してコマンドを発行する場合、一番単純に行う方法は、以下のようにIPアドレス、ユーザ名、パスワードを直接指定することです。

[__host__ = '192.168.100.100'] ->
[__user__ = 'username'] ->
[__password__ = 'your_pass'] ->
['ifconfig']

この場合、対象サーバを指定するために3行使って記述をしなければいけません。ポート番号やシェルを指定する場合はさらに記述を増やす必要がありますし、パスワードがジョブフローに埋め込まれてしまうという問題もあります。
より実用的な方法は、アカウント情報とノード情報のオブジェクトを作成し、ジョブフローからそれを呼び出すというやり方です。

[__node__ = /root/test_node] ->
['ifconfig']

この方法であれば、ジョブフローとそれを実行する対象のサーバ情報を切り離すことができますし、ジョブフローを実行する対象サーバを変更する場合も、最初の例より簡単に行えます。


Wikiページ


Creole形式のWikiを記述するオブジェクトです。
ジョブフローやデータに関するマニュアル、注意事項、トラブルシューティングなど、記述したジョブフローを運用していく上で必要な情報を、ジョブフローと同じくKompira上で管理することができます。


ジョブフローからオブジェクトのデータにアクセスする

オブジェクトは内部に複数のフィールドを持っており、ジョブフローからフィールドを指定することで、オブジェクトが持つ値を取得することができます。
例えば「ノード情報」オブジェクトは以下の様なフィールドを持っています。


これらのフィールドには、ジョブフローからobject.displayNameのように、ドット記法でアクセスすることができます。また、フィールド以外にname(オブジェクト名), abspath(絶対パス)など全てのオブジェクトに存在する属性があります。
それでは、オブジェクトのデータにアクセスするジョブフローを書いてみましょう。
ノード情報オブジェクトを/root/test_nodeという場所に作成します。


以下はこのノードの情報を取得・更新するジョブフロー例です。
ジョブフロー中でパスを記述すると、オブジェクトとして解釈されます。

[node = /root/test_node] ->
print(node.ipaddr) ->               # IPアドレスを表示
print(node.conntype) ->             # 接続種別を表示
['14.14.14.14' >> node.ipaddr] ->   # IPアドレスの値を更新
print(node.ipaddr)                  # 書き換えたIPアドレスを表示

実行結果



このように、オブジェクトの情報をジョブフローから呼び出し/編集することができます。

上記例では単一のオブジェクトへのアクセスを行いましたが、複数のオブジェクトの値をまとめて取得したい場合があります。
ディレクトリオブジェクトに対してfor構文を使えば、ディレクトリ内のオブジェクトに順次アクセスすることができます。

[dir = /root] ->
{ for obj in dir |
  print(obj.abspath)    # オブジェクトのパスを表示
}

実行結果

















上記コードの実用例としては、アカウント情報型のオブジェクトのみを持つディレクトリを作成しておき、複数台のサーバに同じフローを順次実行するというパターンがあります。


型オブジェクトの作成

ここまでにご紹介した型はKompiraが標準で用意しているものですが、ユーザが好きな型を定義することもできます。
他のオブジェクトと同じやり方で、「型オブジェクト」という種類のオブジェクトを作成してみましょう。


ここでは、何か障害が発生した際に通知を送るということを想定し、ユーザ情報を入力するためのオペレータ型を定義しました。

オブジェクトの中には複数のフィールドを定義することができ、その種別は以下の中から選択できます。

フィールド種別 説明
String 文字列
Integer 整数値
Boolean 論理値
IPAddress IPv4アドレス形式の文字列のみ入力可能
Email Eメール形式の文字列のみ入力可能
URL URL形式の文字列のみ入力可能
Datetime 日付/時刻
Text 複数行の文字列
LargeText 複数行の文字列 (Textよりさらに広い表示・入力フォームを持つ)
Enum 列挙型
Array 配列
Dictionary 辞書型
Object オブジェクト型 (他のオブジェクトへの参照)
File 添付ファイル型

型オブジェクトを作成すると、オブジェクト作成時の型の選択肢に先ほど作成した型オブジェクトの情報が追加され、オブジェクトを作成することができるようになります。


オブジェクトの編集画面では、フィールド種別に合わせた表示・入力フォームが表示されます。
(以下の画像は、左が閲覧画面、右が編集画面です)


これで先ほど定義したオペレータ型のオブジェクトが作成できました。
自分で定義した型のオブジェクトに対しても、標準の型のオブジェクトと同じようにジョブフローからアクセスすることができます。



まとめ

Kompira上でオブジェクトを作成する機能をご紹介しました。
運用において、自動化したい事柄とそれに絡むデータは多種多様です。
Kompiraではジョブフロー言語とユーザ自身が型を定義できるオブジェクトという仕組みの組み合わせにより、様々な状況に柔軟に対応することができます。


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。