第3回ではfuncコマンドから、第4回ではPythonプログラムから既存のFuncモジュールを呼び出す方法について解説しました。今回はFuncモジュールそのものを作成する方法について解説します。
モジュールのパスレイアウト
モジュールファイルは、/usr/lib/python2.4/site-packagesなどの、Pythonモジュール探索パスの下に、以下のように配置します。
このように配置されたモジュールは、funcコマンドからは func "*" call mymodule mymethod で呼び出せます。
また、以下のようにモジュールのディレクトリを階層化することもできます。
このように配置されたモジュールは、funcコマンドからは func "*" call foo.bar mymethod で呼び出せます。
Funcモジュールファイルの内容
Funcモジュールの基本的なコードは以下のようになります。簡単な説明をコード中にコメントとして記述していますので、ご参照ください。
Funcにはモジュールの雛形を生成するための、func-create-moduleというコマンドが付属しています。func-create-moduleを実行し、モジュール名や説明などを入力していくと、モジュールの雛形が生成されます。
雛形ファイルは以下のような内容で生成されます。
この雛形をベースにして、モジュールで実行したい処理を記述していきます。
モジュールの配布
モジュールは各minionに配布する必要がありますが、今のところFuncには、モジュールを配布する仕組みは実装されていないようです。そこで、copyfileモジュールを利用して、各minionにモジュールを配布する簡単なサンプルスクリプトを作成してみました。
以下のように実行することで、管理対象のminionすべてにmymodule.pyを配布します。
Funcの今後
Funcの連載は今回が最後となります。短い間でしたが、おつきあいいただきありがとうございました。
Funcはまだまだ発展途上のツールであり、今後広く使われるようになるためには、以下のような課題を解決する必要があると考えています。
- 様々なOSへの対応
- 現在はRed Hat系Linuxでしかまともに動作しません。
- モジュールの充実
- モジュールの充実とともに、様々なOSに対応しやすいモジュールメカニズムも必要でしょう。
- Func上で動作するアプリケーションの充実
- Funcに付属のfunc-inventoryぐらいしか現在は存在しません。
- ホスト情報の外部からの取り込み
- PuppetのようにLDAPやYAMLでのホスト情報管理が可能になると、様々なツールで利用するホスト情報を一元管理しやすくなります。
まだまだ課題はありますが、素性はとても良いツールだと思いますので、今後の発展に期待しています。
また、上記に挙げたような問題の解決のため、そしてモジュールを私が好きな言語であるPerlで書きたいという思いから、Punc(Perl Unified Network Controller)というFuncクローンなシステム管理フレームワーク実装の開発をはじめました。まだプロトタイプとも呼べない状態ですが、CodeReposでソースコードを管理していますので、どなたでも開発にご参加いただけます。PuncについてはYAPC::Asia 2008で詳しくお話しする予定です。