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

More Related Content

PPT
Puppet Best Practices? at COOKPAD
PDF
Ansible入門...?
PDF
最近の PHP の話
PPTX
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
PDF
実"戦"CakePHP Plugin
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Puppet Best Practices? at COOKPAD
Ansible入門...?
最近の PHP の話
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
実"戦"CakePHP Plugin
FuelPHPで3種のprofilerを使ってみた
15分でCakePHPを始める方法(Nseg 2013-11-09 )
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT

What's hot (20)

PDF
Ansible入門
PDF
Ansible 入門 #01 (初心者向け)
PDF
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PDF
PDF
PHPの今とこれから 2013
PPTX
PHP AST 徹底解説
PDF
Em synchrony について
PDF
第21回Creators MeetUp
KEY
FuelPHPをさわってみて
PDF
PHPの今とこれから2014
PDF
はじめての FuelPHP
PDF
Symfony2 workshop-2
PDF
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
KEY
Perl 非同期プログラミング
PPTX
PHP と SAPI と ZendEngine3 と
PPTX
php and sapi and zendengine2 and...
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料
PDF
シェル入門
PPTX
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
Ansible入門
Ansible 入門 #01 (初心者向け)
omoon.org の裏側 〜FuelPHP の task 活用例〜
PHPの今とこれから 2013
PHP AST 徹底解説
Em synchrony について
第21回Creators MeetUp
FuelPHPをさわってみて
PHPの今とこれから2014
はじめての FuelPHP
Symfony2 workshop-2
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Perl 非同期プログラミング
PHP と SAPI と ZendEngine3 と
php and sapi and zendengine2 and...
PHPカンファレンス2014の懇親会飛び込みLT資料
シェル入門
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
Ad

Viewers also liked (6)

PPT
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
PPT
Assurer - a pluggable server testing/monitoring framework
PPTX
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
PPT
How Danga::Socket handles asynchronous processing and how to write asynchrono...
PPTX
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
PPTX
Serverspec at July Tech Festa 2013
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Assurer - a pluggable server testing/monitoring framework
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
How Danga::Socket handles asynchronous processing and how to write asynchrono...
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Serverspec at July Tech Festa 2013
Ad

Similar to Open Source System Administration Framework - Func (16)

PDF
[Oracle Innovation Summit Tokyo 2018] Fn Project: Next Generation Serverless ...
PDF
2日間Fabricを触った俺が
 色々解説してみる
KEY
Fabricでサーバー管理をDRYにしよう
PDF
コンテナで作れるFaaS
PDF
おまえらこのライブラリ使ってないの? m9 (2013-07)
PDF
debugging server with strace
PDF
ピタゴラなんとかスイッチを作って破壊した話
PDF
Why Reactive Matters #ScalaMatsuri
PDF
3分でサーバオペレーションコマンドを作る技術
PDF
Fn project爆誕
PDF
Richard high performance fuzzing ja
PDF
Kyoto Tycoon Guide in Japanese
PDF
Fujitask meets Extensible Effects
PPTX
StackStormを活用した運用自動化の実践
PPTX
Reactive Programming
[Oracle Innovation Summit Tokyo 2018] Fn Project: Next Generation Serverless ...
2日間Fabricを触った俺が
 色々解説してみる
Fabricでサーバー管理をDRYにしよう
コンテナで作れるFaaS
おまえらこのライブラリ使ってないの? m9 (2013-07)
debugging server with strace
ピタゴラなんとかスイッチを作って破壊した話
Why Reactive Matters #ScalaMatsuri
3分でサーバオペレーションコマンドを作る技術
Fn project爆誕
Richard high performance fuzzing ja
Kyoto Tycoon Guide in Japanese
Fujitask meets Extensible Effects
StackStormを活用した運用自動化の実践
Reactive Programming

More from Gosuke Miyashita (17)

PDF
Walter ファミリーの紹介 at Shibuya.go#1
PDF
Serverspec at Testing Framework Meeting
PPTX
Serverspec at hbstudy #45
PPTX
NoSQLに関するまとめ
PPTX
イベント駆動プログラミングとI/O多重化
PPTX
Maglica - A Simple Internal Cloud Tool at #techkayac
PPTX
DevOps とは何か 何であるべきか
PPTX
Inside Sqale's Backend at RubyConf Taiwan 2012
PPTX
Ia型超新星とチャンドラセカール限界
PPTX
How Perl Changed My Life
PPTX
10分でわかるDevOps
PPTX
DevOpsって何?
PPTX
Puppetのススメ
PPT
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
PPT
関西オープンソース 2008 30days Albumの裏側
PPT
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
PPT
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...
Walter ファミリーの紹介 at Shibuya.go#1
Serverspec at Testing Framework Meeting
Serverspec at hbstudy #45
NoSQLに関するまとめ
イベント駆動プログラミングとI/O多重化
Maglica - A Simple Internal Cloud Tool at #techkayac
DevOps とは何か 何であるべきか
Inside Sqale's Backend at RubyConf Taiwan 2012
Ia型超新星とチャンドラセカール限界
How Perl Changed My Life
10分でわかるDevOps
DevOpsって何?
Puppetのススメ
Xen Summit 2008 Tokyo - Operating Xen domains through LL(Perl/Python) with li...
関西オープンソース 2008 30days Albumの裏側
How To Build A Scalable Storage System with OSS at TLUG Meeting 2008/09/13
Yapc::Asia 2008 Tokyo - Easy system administration programming with a framewo...

Open Source System Administration Framework - Func