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




Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 1 (more)