とりあえず、ソースコードの公開を始めました。
開発環境の 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 がおかしくなりそうなので。)
っと、長々と概要を書きましたが、これがすべてだったりします。