Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons



All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 1 (more)

Yapc::Asia 2008 Tokyo - Easy system administration programming with a framework by Gosuke Miyashita

From mizzy, 2 months ago

1185 views  |  0 comments  |  0 favorites  |  11 downloads
 

Groups/Events

 
 

Privacy InfoNew!

This slideshow is Public

 
Embed in your blog
Embed (wordpress.com)
custom

Slideshow Statistics
Total Views: 1185
on Slideshare: 1185
from embeds: 0* * Views from embeds since 21 Aug, 07

Slideshow transcript

Slide 1: フレームワークでシステム管理アプリケーションプロ グラミングをもっと簡単に

Slide 2: About me  Gosuke Miyashita  mizzy.org  Working at paperboy&co.  Recently, released the photo album service “30days album” (http://30d.jp/)  Total technical design, storage api programming, server settings  I love Dr.Pepper

Slide 3: With lots of Dr.Peppers

Slide 5: System Admin Application Framework?  A framework for system admin app  WAF for sysadmin  Func (Fedora Unified Network Controller) is a kind of it  Although Func deoesn’t describe itself a framework  I’m devloping Punc, a perl colne of Func.

Slide 6: System Admin Application?  Basically “Exec some operations for multiple hosts”  Easy to say, but ...  How to select target hosts?  How to connect to target hosts?  How about security?  How about getting results and parsing them  How to reuse codes?

Slide 7: Framework?  Hide the issues on previous page and you can concentrate for your really job  Selecting target hosts?  $punc = Punc::Client->new(‘*’);  $punc = Punc::Client->new(‘www*’);  Connect to target hosts and security  $res = $punc->service->status({ service => ‘httpd’ });  You can get the status of httpd of all taget hosts.  Behind it, JSON-RPC over HTTPS + SSLv3 Auth

Slide 8: Framework? (cont.)  Getting results and parse them  Scalar, hash or array via JSON-RPC  Reusability of code  Punc consists of small modules.  $punc->service->status();  Programming with combination of small modules

Slide 9: Framework! use Punc::Client; my $punc = Punc::Client->new('*'); my $res = $punc->service->status({ service => 'httpd' }); while ( my $r = $res->next ) { Punc::Client->new($r->host) ->service->start({ service => 'httpd' }) if $r->result; }

Slide 11: Punc  A perl clone of Func  Why I’m developing Punc?  Func only works on RedHat linux  Func does not have abstract layer of different environments  I LOVE Perl!

Slide 12: Architecture of Punc Manage target hosts master Manage SSL certs (puncmasterd) JSON-RPC over HTTPS call a module + SSLv3 auth get a result slave slave slave (puncd) (puncd) (puncd) exec a module exec a module exec a module

Slide 13: See http://coderepos.org/share/wiki/Punc

Slide 14: Checkout Punc $ svn co http://svn.coderepos.org/share/lang/perl/ Punc/trunk Punc $ cd Punc

Slide 15: Start puncmasterd ; Create self-signed cert ; automatically and start with https $ ./bin/puncmasterd Please contact me at: <URL:https://host.example.com:7081/>

Slide 16: Start puncd $ ./bin/puncd (Request a CSR to puncmaster and waiting it signed)

Slide 17: Sign to the CSR $ ./bin/puncmaster-ca --list host.example.com $ ./bin/puncmaster-ca --sign host.example.com

Slide 18: Now puncd working! $ ./bin/puncd Please contact me at: <URL:https://host.example.com:7080/>

Slide 19: Use Punc with punc command $ ./bin/punc "*" call service description NAME Punc::Slave::Module::Service - Punc module for service control. SYNOPSIS # with punc command $ sudo punc "*" call service status --service=httpd # with Punc::Client module my $punc = Punc::Client->new($target); my $res = $punc->service->status({ service => 'httpd' }); ...

Slide 20: Use Punc with Punc::Client use Punc::Client; my $punc = Punc::Client->new('*'); my $res = $punc->service->status({ service => 'httpd‘ }); while ( my $r = $res->next ) { Punc->new($r->host)->service ->start({ service => 'httpd' }) if $r->result; }

Slide 22: virt module(not yet exist) my $punc = Punc::Client->new('*'); my $res = $punc->virt->state; while ( my $r = $res->next ) { next if $r->error; for my $vm ( @{ $r->vms } ) { if ( $vm->{state} eq 'shutdown' ) { Punc->new($r->host)->virt ->create($vm->{domain}) } } }

Slide 23: smart module(not yet exist) my $punc = Punc::Client->new('*'); my $result = $punc->smart->info; while ( my $r = $result->next ) { unless ( $r->code ) { print "$r->host has error: "; print $r->detail . "n"; } }

Slide 25: Punc module  Module is distributed and executed on each targeted hosts  Master host calls modules on targeted hosts via punc command or Punc::Client

Slide 26: Architecture of Punc(again) Manage target hosts master Manage SSL certs (puncmasterd) JSON-RPC over HTTPS call a module + SSLv3 auth get a result slave slave slave (puncd) (puncd) (puncd) exec a module exec a module exec a module

Slide 27: file module package Punc::Slave::Module::File; use Path::Class qw( dir file ); use Punc::Slave::Module { operatingsystem => [ qw/ .* / ] }; sub md5sum { my ( $self, $args ) = @_; return `md5sum $args->{file}`; } sub copy { ...

Slide 28: service module(for Red Hat) package Punc::Slave::Module::Service::RedHat; use Punc::Slave::Module::Service { operatingsystem => [ qw / redhat centos fedora / ] }; use Moose; with 'Punc::Slave::Module::Service::Role'; sub status { my ( $self, $args ) = @_; return $self->_command($args->{service}, 'status'); }

Slide 29: service module(for Debian) package Punc::Slave::Module::Service::Debian; use Punc::Slave::Module::Service { operatingsystem => [ qw / debian ubuntu / ] }; use Moose; with 'Punc::Slave::Module::Service::Role'; sub status { my ( $self, $args ) = @_; return $self->_command($args->{service}, 'status'); }

Slide 30: Abstraction layer with Pfacter  Automatically detect a targeted host’s environmant and execute a adequate module  Punc uses Pfacter for this purpose  Pfacter is a perl clone of Facter by Ruby  Facter is used with Puppet

Slide 31: Return values of a module # return scalar, hash ref, or array ref on success return $result; # return an error using Class::ErrorHandler return $self->error(‘error message’);

Slide 32: Module sync  Mosules must be distributed to slaves  Punc has punc-modulesync command  punc-modulesync made with file module

Slide 33: Summary  Punc is a framework for sysatem admin app programming  Modules are executed on each slave node  Master calls modules via JSON-RPC over HTTPS  Programming with Punc is a combination of module calls  Caller programs could be written by langauages other than Perl

Slide 34: Development in progress  Code repository is in CodeRepos  http://coderepos.org/share/  http://svn.coderepos.org/share/lang/perl/Punc /trunk  Feel free to commit to trunk or make your branch!  Please ask yappo if you don’t have a commit bit of CodeRepos  #coderepos@freenode or #assurer@freenode