Your SlideShare is downloading. ×
0
オープンソースなシステム管理フレームワークFunc<br />第4回KLab勉強会<br />(株)paperboy&co.<br />宮下 剛輔<br />http://mizzy.org/<br />2008/03/28<br />
自己紹介<br />(株)paperboy&co. (ペパボ)で働いてます<br />レンタルサーバ のロリポップ!の会社です<br />技術責任者というポジションで色々やってます<br />システムアーキテクト的なこととか<br />システム...
Funcとは?<br />
Funcとは?<br />FedoraUnified Network Controller<br />システム管理フレームワーク<br />と勝手に呼んでます<br />システム管理用のプログラムを開発するためのフレームワーク<br />gih...
Funcとは?<br />複数のサーバに対して,何らかの処理を一括でまとめて実行して結果が取得できる<br />「何らかの処理」の部分は,モジュールで拡張できる<br />「何らかの処理」はコマンドラインから実行して単に結果を表示,ということも...
サンプルその1<br /># func target.example.org call hardwareinfo<br /># func "*.example.org"call yumupdate<br /># func "*" call mo...
サンプルその2<br />import func.overlord.client as fc <br />results = fc.Client("*").service.status("httpd")<br />for (host, rc) ...
同じことをFuncなしでやろうとすると?<br />対象となるホスト情報はどうやって管理する?<br />対象ホストとどうやって通信して処理を実行する?SSH?HTTP?<br />セキュリティはどうやって確保する?<br />実行結果の取得と...
Funcを使うと?<br />対象となるホスト情報はどうやって管理する?<br />Funcが情報持ってます<br />対象ホストとどうやって通信して処理を実行する?SSH?HTTP?<br />XMLRPC over HTTPS<br />利...
Funcのシステム構成<br />certmaster<br />モジュールの<br />実行<br />実行結果の<br />取得<br />minon<br />(funcd)<br />minon<br />(funcd)<br />mi...
Funcが目指すもの<br />超わかりやすい<br />超シンプルに使える<br />メンテと設定が最小限<br />Kick ass<br />
でも対応はRedHat系Linuxのみ<br />FC6以降、EL4以降<br />起動スクリプトがRedHat 依存<br />モジュールがRedHat依存<br />といっても、ピュアPythonなので、他のOSやディストリビューションへの...
funcコマンド<br />
管理対象minion一覧表示<br /># func “*”list_minions<br />['https://func02.example.org:51234', 'https://func01.example.org:51234']<b...
利用可能モジュール一覧表示<br /># func "func01*" call systemlist_modules<br />on https://func01.example.org:51234 running system list_m...
モジュールメソッドの表示<br /># func "func01*" call service list_methods<br />on https://func01.example.org:51234 running service list...
モジュール説明の表示<br /># func "func01*" call servicemodule_description<br />on https://func01.example.org:51234 running service m...
ntpdの起動<br /># func "func01*" call servicestartntpd<br />on https://func01.example.org:51234 running service start (ntpd)<...
ntpdのステータス確認<br /># func "func01*" call servicestatusntpd<br />on https://func01.example.org:51234 running service status ...
ntpdのステータス確認(停止してる場合)<br /># func "func01*" call servicestatusntpd<br />on https://func01.example.org:51234 running servic...
Python APIを利用したプログラミング<br />
基本的なコード<br />import func.overlord.client as fc<br />results = fc.Client("*").module.method(args)<br />for ( host, result )...
virtモジュールの利用例<br />results = fc.Client("*").virt.state()<br />for ( host, vms ) in results.iteritems():<br />  if vms[0] =...
smartモジュールの利用例<br />info = fc.Client("*").smart.info()<br />for(host,details) in info.iteritems():<br />  if type(details)...
デフォルトで使えるモジュール<br />command<br />copyfile<br />filetracker<br />hardware<br />jobs<br />mount<br />nagios-check<br />netap...
モジュールの拡張<br />
モジュールのパスレイアウト<br />$PYTHONPATH/func/minion/modules/<br />mymodule.py<br />(func “*”callmymodulemethod) <br />$PYTHONPATH/f...
モジュールコード<br />import func_module<br />classTest(func_module.FuncModule):<br />  version = "11.11.11"<br />  api_version = ...
func-create-module<br /># func-create-module<br />Module Name: example<br />Description: An example module.<br />Author: G...
func-create-moduleで生成された雛型<br />import func_module<br />class Example(func_module.FuncModule):<br /># Update these if need...
モジュールの配布<br />やりかたわかりません><<br />copyfile使えばいい?<br />
Funcの課題<br />
Funcの課題<br />様々なOSへの対応<br />PuppetのようなOSの違いを吸収するための仕組みが必要<br />モジュールの充実<br />モジュール自体も色んなOSへの対応が必要<br />Func上で動作するアプリケーションの...
Q&A<br />
Upcoming SlideShare
Loading in...5
×

Open Source System Administration Framework - Func

1,491

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,491
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Open Source System Administration Framework - Func"

  1. 1. オープンソースなシステム管理フレームワークFunc<br />第4回KLab勉強会<br />(株)paperboy&co.<br />宮下 剛輔<br />http://mizzy.org/<br />2008/03/28<br />
  2. 2. 自己紹介<br />(株)paperboy&co. (ペパボ)で働いてます<br />レンタルサーバ のロリポップ!の会社です<br />技術責任者というポジションで色々やってます<br />システムアーキテクト的なこととか<br />システム障害調査とか<br />ウェブアプリケーションやAPIの開発とか<br />部署宛の郵便物を部員に配ったりとか<br />ドクターペッパー大好きです<br />
  3. 3.
  4. 4. Funcとは?<br />
  5. 5. Funcとは?<br />FedoraUnified Network Controller<br />システム管理フレームワーク<br />と勝手に呼んでます<br />システム管理用のプログラムを開発するためのフレームワーク<br />gihyo.jpで連載中です<br />You Can Do Almost Anything With It<br />フレームワークなので「具体的な何かができる」というものではない<br />逆にいえば何でもできます<br />
  6. 6. Funcとは?<br />複数のサーバに対して,何らかの処理を一括でまとめて実行して結果が取得できる<br />「何らかの処理」の部分は,モジュールで拡張できる<br />「何らかの処理」はコマンドラインから実行して単に結果を表示,ということもできるし,Python API でプログラマブルに処理することもできる<br />
  7. 7. サンプルその1<br /># func target.example.org call hardwareinfo<br /># func "*.example.org"call yumupdate<br /># func "*" call moduleyouwrotemethodname1234 5678 firetruck acmelabs hike!<br />
  8. 8. サンプルその2<br />import func.overlord.client as fc <br />results = fc.Client("*").service.status("httpd")<br />for (host, rc) inresults.iteritems():<br />if rc != 0: fc.Client(host).service.start("httpd")<br />
  9. 9. 同じことをFuncなしでやろうとすると?<br />対象となるホスト情報はどうやって管理する?<br />対象ホストとどうやって通信して処理を実行する?SSH?HTTP?<br />セキュリティはどうやって確保する?<br />実行結果の取得とパースはどうする?<br />といったことを考えないといけません<br />
  10. 10. Funcを使うと?<br />対象となるホスト情報はどうやって管理する?<br />Funcが情報持ってます<br />対象ホストとどうやって通信して処理を実行する?SSH?HTTP?<br />XMLRPC over HTTPS<br />利用者は意識しなくて良い<br />セキュリティはどうやって確保する?<br />SSL証明書による相互認証<br />実行結果の取得とパースはどうする?<br />Pythonの内部データ形式で結果取得<br />
  11. 11. Funcのシステム構成<br />certmaster<br />モジュールの<br />実行<br />実行結果の<br />取得<br />minon<br />(funcd)<br />minon<br />(funcd)<br />minon<br />(funcd)<br />
  12. 12. Funcが目指すもの<br />超わかりやすい<br />超シンプルに使える<br />メンテと設定が最小限<br />Kick ass<br />
  13. 13. でも対応はRedHat系Linuxのみ<br />FC6以降、EL4以降<br />起動スクリプトがRedHat 依存<br />モジュールがRedHat依存<br />といっても、ピュアPythonなので、他のOSやディストリビューションへの対応はそれほど難しくなさそう<br />今後に期待<br />
  14. 14. funcコマンド<br />
  15. 15. 管理対象minion一覧表示<br /># func “*”list_minions<br />['https://func02.example.org:51234', 'https://func01.example.org:51234']<br />func02.example.org<br />func01.example.org<br />
  16. 16. 利用可能モジュール一覧表示<br /># func "func01*" call systemlist_modules<br />on https://func01.example.org:51234 running system list_modules ()<br />['certmaster', 'command', 'copyfile', <br />'filetracker', 'func_module', 'hardware',<br />'jobs', 'mount', 'nagios-check',<br />'netapp.snap', 'netapp.vol', <br />'netapp.vol.clone', 'networktest', <br />'process', 'reboot', 'rpms', 'service', <br />'smart', 'snmp', 'sysctl', 'test', <br />'yumcmd']<br />
  17. 17. モジュールメソッドの表示<br /># func "func01*" call service list_methods<br />on https://func01.example.org:51234 running service list_methods ()<br />['status', 'reload', 'get_running', 'stop', 'start', 'inventory', 'get_enabled', 'restart', 'module_description', 'module_version', 'module_api_version', 'list_methods']<br />
  18. 18. モジュール説明の表示<br /># func "func01*" call servicemodule_description<br />on https://func01.example.org:51234 running service module_description ()<br />Allows for service control via func.<br />
  19. 19. ntpdの起動<br /># func "func01*" call servicestartntpd<br />on https://func01.example.org:51234 running service start (ntpd)<br />0<br />
  20. 20. ntpdのステータス確認<br /># func "func01*" call servicestatusntpd<br />on https://func01.example.org:51234 running service status (ntpd)<br />0<br />
  21. 21. ntpdのステータス確認(停止してる場合)<br /># func "func01*" call servicestatusntpd<br />on https://func01.example.org:51234 running service status (ntpd)<br />3<br />
  22. 22. Python APIを利用したプログラミング<br />
  23. 23. 基本的なコード<br />import func.overlord.client as fc<br />results = fc.Client("*").module.method(args)<br />for ( host, result ) in results.iteritems():<br /># 何か処理<br />
  24. 24. virtモジュールの利用例<br />results = fc.Client("*").virt.state()<br />for ( host, vms ) in results.iteritems():<br /> if vms[0] == 'REMOTE_ERROR':<br />continue<br />for vm in vms:<br /> ( domain, state ) = vm.split(' ')<br />if state == 'shutdown':<br /> fc.Client(host).virt.create(domain)<br />
  25. 25. smartモジュールの利用例<br />info = fc.Client("*").smart.info()<br />for(host,details) in info.iteritems():<br /> if type(details) != list:<br />print"%s had an error : %s" % (host,str(details))<br /> break<br /> (rc, list_of_output) = details<br /> if rc != 0:<br />print"Host %s may have problems" % host<br />print"n".join(list_of_output[3:])<br />
  26. 26. デフォルトで使えるモジュール<br />command<br />copyfile<br />filetracker<br />hardware<br />jobs<br />mount<br />nagios-check<br />netapp.options<br />netapp.snap<br />netapp.vol<br />netapp.vol.clone<br />networktest<br />process<br />reboot<br />rpms<br />service<br />smart<br />snmp<br />sysctl<br />test<br />yumcmd<br />
  27. 27. モジュールの拡張<br />
  28. 28. モジュールのパスレイアウト<br />$PYTHONPATH/func/minion/modules/<br />mymodule.py<br />(func “*”callmymodulemethod) <br />$PYTHONPATH/func/minion/modules/<br />foo/<br />__init__.py<br />bar.py<br />(func “*”callfoo.barmethod)<br />
  29. 29. モジュールコード<br />import func_module<br />classTest(func_module.FuncModule):<br /> version = "11.11.11"<br /> api_version = "0.0.1"<br /> description = "Just a very simple example module"<br />defadd(self, num1, num2):<br />returnnum1 + num2<br />defexception(self):<br />raiseexceptions.Exception("khhhhhhaaaaaan!!!!!!")<br />
  30. 30. func-create-module<br /># func-create-module<br />Module Name: example<br />Description: An example module.<br />Author: Gosuke Miyashita<br />Email: gosukenator@gmail.com<br />Leave blank to finish.<br />Method: mymethod<br />Method:<br />Your module is ready to be hacked on. Wrote out to example.py.<br />
  31. 31. func-create-moduleで生成された雛型<br />import func_module<br />class Example(func_module.FuncModule):<br /># Update these if need be.<br /> version = "0.0.1"<br />api_version = "0.0.1"<br /> description = "An example module."<br />defmymethod(self):<br />"""<br /> TODO: Document me ...<br /> """<br />pass<br />
  32. 32. モジュールの配布<br />やりかたわかりません><<br />copyfile使えばいい?<br />
  33. 33. Funcの課題<br />
  34. 34. Funcの課題<br />様々なOSへの対応<br />PuppetのようなOSの違いを吸収するための仕組みが必要<br />モジュールの充実<br />モジュール自体も色んなOSへの対応が必要<br />Func上で動作するアプリケーションの充実<br />func-inventoryぐらいしか今はない<br />ホスト管理のバリエーション<br />DBとかYAMLとかLDAPとか<br />
  35. 35. Q&A<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×