( クラウド時代の分散マシン操作ライブラリ Svengali )
ユーザはプラグイン機構によりSvengaliの機能を拡張したり、選択することが可能です。
主要な部分以外は、プラグインの集合体として構成する設計をとっており、
これにより
- ・他コンポーネントへの依存をプラグイン単位に抑える
- ・各々のユーザが作成したコードを取り込みやすくする
- ・(機能がプラグインの単位でモジュール化されているので、)拡張時にユーザが理解すべきコード量を少なく抑える
といったことを狙っています。
私一人の開発力では、ユーザのニーズ全てに応えるのは不可能だと考え、最初からユーザの方々と一緒に拡張していけるよう、このような設計にしてある、ということでもあります。
プラグインを使う
load_pluginメソッドを呼び出すことでプラグインをロードできます。
#リポジトリに置いてあるくせに動かないeucalyptusプラグイン load_plugin("eucalyptus")
指定するプラグイン名はpluginsディレクトリ内に置いてあるrubyファイルの拡張子部分を除いたものになります。
残念ながら、2010年6月27日現在でユーザが選択できるプラグインは1つもありませんが、
続くセクションでプラグインの作成方法を説明しますので、是非自作してみて下さい^^;
プラグインを作成する
プラグインの作成は簡単です。
Rubyコードを書いてpluginsディレクトリに置くだけでできます。
ある関数hogeをライブラリ内で利用したければ
#my_plugin.rb def hoge() #何かの処理をする end
というファイルを用意してpluginsディレクトリに置くだけです。
自作のクラスが使いたければ、同様にクラスを定義すればOKです。
Svengaliの元々の機能を変更したり拡張したい場合は、同名の関数やクラス定義を置き換えます。
皆さんご存知のように、LLのRubyでは特に難しいことをしなくてもこのような事が出来てしまいます。*1
例えば、Machine#install_packageメソッドは、Machineクラスを拡張するプラグインとして実装されており
class Machine def install_package(package_name_str) return @ssh.exec!(ExtStr.cmd["package_install"] + " " + package_name_str) end end
#ExtStr.cmd変数はSvengaliが標準で公開している変数です。これについてはプラットフォーム切り替えのところで説明したいと思います。
これを、デフォルトでロードするようになっています。
#svengali/svengali.rb ・・・・・・・(省略)・・・・・・・ #load default plugins load_plugin("machine_config") load_plugin("package") ・・・・・・・(省略)・・・・・・・
お願い
作成して頂いたプラグインは、オフィシャルのコードとして積極的に取り込んで行きたいと考えています。
つきましては、作成者の方はプラグインを ryo.contact [at] gmail.com までメールして頂ければと思います。
メールでのやり取りが面倒(かつgithubが使いこなせるパワフルな開発者)な方は、github経由でpull requestを送って頂いてもOKです。*2 *3
#とか書いているけど、自分自身githubの使い方がいまいち分かっていなかったり
ご協力頂いた方は、contributorのページに名前を掲載させて頂く予定です。
皆さまの力を借りてSvengaliを使えるプロダクトにしていきたいと思います。
ご協力よろしくお願いします <(_ _)>