第3回ではfuncコマンドから、
モジュールのパスレイアウト
モジュールファイルは、
$PYTHONPATH/func/minion/modules/mymodule.py
このように配置されたモジュールは、
また、
$PYTHONPATH/func/minion/modules/
foo/
__init__.py
bar.py
このように配置されたモジュールは、
Funcモジュールファイルの内容
Funcモジュールの基本的なコードは以下のようになります。簡単な説明をコード中にコメントとして記述していますので、
# func_moduleをインポート
import func_module
# func_module.FuncModuleを継承したクラスを定義
class Test(func_module.FuncModule):
# version, api_version, descriptionを定義
version = "11.11.11"
api_version = "0.0.1"
description = "Just a very simple example module"
# モジュールメソッドを定義
def add(self, num1, num2):
return num1 + num2
# モジュールメソッドを定義
def exception(self):
# 例外を発生
raise exceptions.Exception("khhhhhhaaaaaan!!!!!!")
Funcにはモジュールの雛形を生成するための、
$ func-create-module Module Name: example Description: An example module. Author: Gosuke Miyashita Email: gosukenator@gmail.com Leave blank to finish. Method: mymethod Method: Your module is ready to be hacked on. Wrote out to example.py.
雛形ファイルは以下のような内容で生成されます。
#
# Copyright 2008
# Gosuke Miyashita <gosukenator@gmail.com>
#
# This software may be freely redistributed under the terms of the GNU
# general public license.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import func_module
class Example(func_module.FuncModule):
# Update these if need be.
version = "0.0.1"
api_version = "0.0.1"
description = "An example module."
def mymethod(self):
"""
TODO: Document me ...
"""
pass
この雛形をベースにして、
モジュールの配布
モジュールは各minionに配布する必要がありますが、
#!/usr/bin/python
import sys
import func.overlord.client as fc
import xmlrpclib
module = sys.argv[1]
client = fc.Client("*")
fb = file(module, "r").read()
data = xmlrpclib.Binary(fb)
print client.copyfile.copyfile(
"/usr/lib/python2.4/site-packages/func/minion/modules/" + module,
data
)
以下のように実行することで、
$ sudo ./copymodule.py mymodule.py
Funcの今後
Funcの連載は今回が最後となります。短い間でしたが、
Funcはまだまだ発展途上のツールであり、
- 様々なOSへの対応
- 現在はRed Hat系Linuxでしかまともに動作しません。
- モジュールの充実
- モジュールの充実とともに、
様々なOSに対応しやすいモジュールメカニズムも必要でしょう。 - Func上で動作するアプリケーションの充実
- Funcに付属のfunc-inventoryぐらいしか現在は存在しません。
- ホスト情報の外部からの取り込み
- PuppetのようにLDAPやYAMLでのホスト情報管理が可能になると、
様々なツールで利用するホスト情報を一元管理しやすくなります。
まだまだ課題はありますが、
また、