Sceneries through the lenses

その場の気分でもやっと投稿していくブログ。内容はころころ変わります…(汗。

ScriptDirector その4 / バージョン 0.6

2010-04-19 00:42:09 | ScriptDirector
需要は無いけど、ScriptDirector をバージョンアップしました。
# 自分のために作っているという側面が強いんだけど。

http://sourceforge.jp/projects/scriptdirector/simple/

# sourceforge.jp が用意してくれる scriptdirector.sourceforge.jp は更新してないのです…(汗。

更新箇所は下記の通り。3月に作ってたから残していた課題の実装が主。
基本的には 1.0 でも良いような気がする。
現時点ではこれ以上の機能実装を思いつかない状態。^-^;

==================================

【修正箇所】

・ データファイル読み込み失敗時の処理
* シナリオ実行を中止します(開始ボタン=アプリ終了 となります)

・ STOP モードの処理の実装 (GUI側が未実装でした)


【改善箇所】

・ 終了コード出力のサポート(ox形式、戻り値形式の選択式)
* CUI用にオプション -intval を追加。(デフォルトは ox形式)

・ 終了コードの解釈の変更
(現状:0=成功、1=エラー、それ以外=その他
変更:0=成功、9,99=その他、それ以外=エラー)

==================================

ScriptDirector その3 / 仕組み

2010-03-20 19:20:04 | ScriptDirector
とりあえず、ソースコードの公開を始めました。
開発環境の NetBeans からアップデートする方法が良くわからず苦戦。
sourceforge.jp は SSH を利用していますが、外部モジュールを用意したり、結構面倒なんですね…。

現在のソースコードはバイナリ公開以降の更新は行っていないので、結構バグが残っています。
Scenario が問題ない場合はなんとか動くのですが、問題がある場合のチェック等がかなり雑です。あとは、処理後モードのチェック等を行っていません。

っと、中身解説0で色々書いていますが、詳細は下記のとおりです。

【概要】

ScriptDirector はあくまでも、用意された実行ファイルを実行し、結果を取りまとめるだけの機能しかありません。まず、3種類のファイルを用意する必要があります。

・モジュール
・シナリオ
・データファイル (これは任意)

【モジュール】

要は実行されるコマンドです。ls など OS 標準コマンドを利用することも可能ですが、戻り値をちゃんと考えてない部分があるので、ちゃんと使えないケースもあるかと思います。

ScriptDirector でのモジュールは bash, csh, perl などの Linux/Unix 用シェルスクリプト、bat, wsh, ps1 などの Windows 用のスクリプト(バッチファイル、Windows Script Host、PowerShell スクリプト) を想定しています。

中身はスクリプトに依存しているので感知していません。
スクリプトは引数を取ることも可能です。(というかそれを前提にしています。)
スクリプトに求められているのは次の戻り値を返すことです。

・ 0 ... 成功時
・ 1 ... 失敗時
・ 9 ... 処理を中止(何もしない場合/何もする必要が無い場合)
・99 ... Usage

ScriptDirector 内部では次の数値を Success(=0), Failed(=1), Other(=0,1以外) の3種類と判断しています。

上記の値により、最終出力の cvs に
・ 0 ... o
・ 1 ... x
・ それ以外 ... -
と出力するように判断しています。

現在は上記のとおりですが、将来的には Success(=0), Failed(=1,その他すべて), Other(=9,99) と変更する予定です。
(コマンド実行の場合、エラーコードがいくつか定義してあるのでそれに対応するため。そのため、その他の 9, 99 も変更する可能性があります。)

また、cvs の最終出力も o, x, - の出力ではなく、数値をそのまま出力させるモードを用意する方向で考えています。(その方が便利な場合もあるかと思ってまして。)


【データファイル】

このファイルは任意となります。同じコマンドを複数回繰り返す場合などに用意します。cvs 形式を利用していますので、[,] 区切りになっています。

たとえば、ユーザーを追加するシナリオを利用する場合、
[ユーザ名],[パスワード],[UID],[グループ],[ホームディレクトリ],[シェル]
という感じです。

このうち、1番目の要素は ScriptDirector の cvs 出力に利用されますので、1番目の要素にコメントを記述するという方法もあります。


【シナリオ】

シナリオはモジュールの実行順番を記述するためのファイルです。
シナリオファイルは2つの要素に分かれています。
行頭が # の場合はコメント扱い

<データファイル定義>

内部で利用するデータファイルを定義します。
書式は下記のとおり。

[D=固定], [ファイル番号], [ファイル名]

1つ目の[D]は固定です。データファイルの行ということを示しています。

2つ目はシナリオで利用するファイル番号になります。
この番号は 1-99 までを想定しています。すべて異なる番号を定義する必要があります。また、0 を利用することは出来ません。(後述の実行部分で利用するため)

3つ目のファイル名はデータファイルのパスを定義します。
相対パス、絶対パスのどちらでも可能です。相対パスの場合、基準となるパスは java コマンドを実行した時のディレクトリになります。


<コマンド実行部分>

ここに実際に利用するコマンドを定義していきます。
書式は下記のとおり。

[ファイル番号],[実行後処理1],[実行後処理2],[実行後処理3],[コマンド],[コメント]


ファイル番号は上記のファイル定義部分で定義した番号になります。
コマンド実行時にデータファイルを利用したい場合に、その番号を定義します。この番号が 0 の際はファイルを利用しません。

実行後処理1,2,3 はコマンド実行の処理を定義します。

1 ... 成功時
2 ... 失敗時
3 ... その他

になります。定義可能な処理は次のとおりです。

C ... そのまま、次のコマンドを実行
P ... 一時停止をする
R ... 一時停止し、再開後に再度同じコマンド・同じオプションを実行
S ... プログラムを停止


コマンドでは、実行コマンドを定義します。
この際、%[数値] を利用することで、データファイルのデータを利用することが出来ます。

たとえば、下記の場合、データファイルの 1,2,4,5,6 番目の要素を埋め込んで実行します。

modules/windows/create_user.bat %1 %2 %4 %5 %6


最後のコメントはそのままです。 cvs を作成する際に利用します。


<コマンド実行部分の実行順番>

コマンドは基本的に行順に実行していきます。
ただし、ファイル番号が連続して同じ場合は、それらをグループとして考えます。ファイル番号が 0 の場合は単一のコマンドとして扱われます。

0,C,P,C,コマンド,Command 1
1,C,P,C,コマンド,Command 2-1
1,C,P,C,コマンド,Command 2-2
1,C,P,C,コマンド,Command 2-3
0,C,P,C,コマンド,Command 3
1,C,P,C,コマンド,Command 4

たとえば、上記のようなシナリオの場合、Command 2-1, Command 2-2, Command 2-3 がひとつのグループとして扱われます。

このグループの実行順番は
Command 2-1, Command 2-2, Command 2-3 (データファイルの1行目を引数に加える)
Command 2-1, Command 2-2, Command 2-3 (データファイルの2行目を引数に加える)
Command 2-1, Command 2-2, Command 2-3 (データファイルの3行目を引数に加える)
Command 2-1, Command 2-2, Command 2-3 (データファイルの4行目を引数に加える)
というような順番で処理を行っていきます。

Command 4 の部分は同じデータファイルを指定していますが、Command 3実行後の実施になります。この際、データファイルを再度1行目から読み込みます。


条件分岐等はサポートしていません。シナリオをシンプルにするためというのが理由と、条件分岐が必要な場合はモジュール側で対応すれば良いという考えからです。
(シナリオに条件分岐を入れると最終 cvs がおかしくなりそうなので。)

っと、長々と概要を書きましたが、これがすべてだったりします。




ScriptDirector その2 / SourceForge.jp

2010-03-14 02:32:48 | ScriptDirector
ScriptDirector 1 : ふと思ったこと。 に続いて、2回目。

詳細をちょっとずつ書いていこうかと思いましたが、その前に。

http://sourceforge.jp/projects/scriptdirector/

にて、バイナリの公開を始めました。
とりあえず、手元で動いている版ということで、0.5にしています。
プロジェクトサイトには何も書いてませんが、バイナリに README.txt や
サンプルファイルをいくつか用意しているので、
なんとなく動きがわかるのではないかと。

ソースコードも用意が出来次第公開開始します。
動けばよいという感じに作っているので、きれいなコードではありませんが…。

詳細は次回以降に書き始めます。^-^;

ScriptDirector 1 : ふと思ったこと。

2010-03-10 19:33:53 | ScriptDirector
システムのセットアップを行う場合、OSのインストーラでのインストール後にユーザーを追加したり、各種設定の追加を行うのが普通だろう。
通常、大量にサーバを保有している環境の場合、システムの標準化を行い、インストールするOS・設定自体を共通化したり、OSインストール後のセットアップをシェルスクリプトを使ったりすることで効率化を図るべきだろう。

まぁ、実際のところ、そうはなっていないケースは多いのではないかと…。
また、SIerの立場の場合、色々な環境でセットアップを行ったりするので、上記のようなことを行うことは難しい部分があるのかもしれない。

ただ、よくよく考えると、どこでも行う設定などは往々としてあるわけで、そういうのをまとめてシェルスクリプト化などをしておくと便利だなぁ…とか。
あと、外でセットアップする場合、「セットアップ」→「テスト(確認作業)」を行う必要があったりするので、効率化する方法が無いか…と考えたわけです。


ようするに、下記の要件を満たすようなものが欲しかったわけです。

(1) セットアップを実行
(2) テストの実行
(3) 成否判定を出力
(4) データファイル等を使い、繰り返し処理を行う

(1),(2) は目的により内容が変わったりする。
ということは、この部分は固定実装せずに外部の実装を利用する形にするほうが適切だろう。(要はスクリプトやバッチファイルを作成し、呼び出す)

とすると、

(1) スクリプト、バッチファイルを呼び出し、外部コマンドとして実行する
(2) 成否判定を記録する(csvで出力)
(3) データファイル等を用い、繰り返し処理に対応する

となり、これらを満たすフロントエンドを作成しようということで、最近プログラミングにいそしんでいたわけです。
この程度のものであれば、スクリプトを駆使して作ったり出来る可能性もあるのだが、Linux・Windowsのマルチプラットフォームでの利用を考えて、Javaで実装することに。
まぁ、自分がJavaがすぐにわかるというのも理由の1つだったりするわけだけど。


っと、実は、すでにここまでは出来てたり。
ただ、デバッグ等がまったく終わっていないので、設定が正しい場合はちゃんと動くのだが、想定外の設定を行った場合に動作がおかしくなるとか、表示が不親切など、色々と欠点はあったりする。

自分以外の需要がどこまであるかわからないが、ブラックボックスではなくオープンソースを前提として作ったので、どこかで公開しようかと思ってたりする。
とりあえず、現状は、ソースコード公開も含めて、準備中…というところ。






ちなみに最終出力として、下記のような感じの csv 出力を行うようにしている。
処理が1度の場合は、「前処理」「後処理」のような1行の出力となり、
繰り返し処理されるものは「処理1」「処理2」「処理3」のような配列で出力されるので、使いやすいのではないかと思ってる。

前処理,o
,aaa,bbb,ccc,dddd
処理1,o,o,o,o
処理2,o,o,o,o
処理3,o,o,o,o
後処理,o

とりあえず、次回以降、細かい話などをちょこちょこと書いていきたいと思う。