This Project Has Not Released Any Files
多くの場合、マシンの設定方法などは対象とするマシンのプラットフォームによって異なります。 例えば、パッケージのインストール一つとっても、Redhat系ではyum、Debian系ではaptとパッケージシステムを使い分ける必要があります。
これに対し、Svengaliでは利用時に対象とするプラットフォーム((とりあえずはディストリビューション。将来的にはOSの差異も隠蔽できればベスト。))を指定する事で、システムに合わせた処理を行わせる事が可能です。
例えば、Debian系のディストリビューションが走っているマシンであれば
というメソッド呼び出しでプラットフォームを指定可能です。
デフォルトのプラットフォームはRedhat系のディストリビューションに対応できるよう設定されており、同ディストリビューションが動作するマシンに適用する場合は、指定不要です。
続いてプラットフォーム切り替えの仕組みについて説明します。 システムの設定作業を考えた時に、プラットフォーム間の差異として以下の2つがあります。
Svengaliでは、これらの情報を設定ファイルにくくり出し(外部化し)、プラットフォームに従って利用する設定ファイルを切り替えることで差異を吸収します。
プログラムからは以下のようにして外部化した情報にアクセスします。
プラグインの説明のところでも出てきたMachine#install_package()のコードです
ExtStr.cmd["package_install"]という部分が、設定ファイルへアクセスしている箇所です。 ExtStr.cmdはHashです。ExtStr.cmd["package_install"]の値は"yun install -y"の時もあれば、"apt-get install"の場合もあるのですが、ここでどちらが返ってくるかを決定するのが、上のセクションで出てきたchange_platformメソッドです。
設定ファイルはYAMLで記述されます。2010年6月30日現在では以下のような内容となっています。
svengali/ext_string/command.yml
ここで、change_platform("debian")とすれば"apt-get install"が返るし、何も呼び出さなければdefaultの"yum install -y"メソッドが返るというわけです。 設定ファイルのパスの場合は、ExtStr.pathハッシュを介してアクセスし、設定ファイルはsvengali/ext_string/path.ymlになります。
まとめると、プラグインの作成では
の2つを行って下さい、ということです。
先人のプラグインを新たなプラットフォーム対応させる場合は、プラグインのコードを眺めてアクセスしている外部データの名前を確認し、path.ymlやcommand.ymlに適切な情報を追加して下さい。
プラットフォームによって手続きがまったく異なる場合などは、外部化による方法だけでは差異を吸収しきれないと思われます。 この場合にどうするかはまだ検討中ですが、$platform_name変数にchange_platformメソッドで指定されたプラットフォーム名が入っているので、これを見て愚直に切り替えてもらうのかなぁとか考えています。