Changeset 8512 for lang/perl/Punc/trunk

Show
Ignore:
Timestamp:
03/30/08 20:45:13 (8 months ago)
Author:
mizzy
Message:

lang/perl/Punc: modify provider auto discovery mechanism.

Location:
lang/perl/Punc/trunk/lib/Punc
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Punc/trunk/lib/Punc/Client/Response.pm

    r8509 r8512  
    11package Punc::Client::Response; 
     2 
     3use strict; 
     4use warnings; 
    25 
    36sub new { 
  • lang/perl/Punc/trunk/lib/Punc/Server/Module.pm

    r8509 r8512  
    44use warnings; 
    55use Pod::Text; 
     6use Module::Pluggable; 
    67 
    78sub new { 
    89    my $class = shift; 
     10    $class->search_path( new => $class ); 
     11 
     12    my @modules = $class->plugins; 
     13    for my $module ( @modules ) { 
     14        $module->require or die $@; 
     15        my $default_for = $module->default_for; 
     16        next unless $default_for; 
     17 
     18        my ( $fact ) = keys %$default_for; 
     19        if ( grep { `facter $fact` =~ /$_/i } @{ $default_for->{$fact} } ) { 
     20            $class = $module; 
     21        } 
     22    } 
     23 
    924    bless {}, $class; 
    1025} 
     26 
     27sub default_for { } 
    1128 
    1229sub exec { 
  • lang/perl/Punc/trunk/lib/Punc/Server/Module/Service.pm

    r8509 r8512  
    55use base qw( Punc::Server::Module ); 
    66use UNIVERSAL::require; 
    7  
    8 sub new { 
    9     my $class = shift; 
    10     my $provider = get_provider(); 
    11     $class = "${class}::${provider}"; 
    12     $class->require or die $@; 
    13     bless {}, $class; 
    14 } 
    15  
    16 my %provider_map = ( 
    17     'centos|fedora' => 'RedHat', 
    18 ); 
    19  
    20 sub get_provider { 
    21     my $os = `facter operatingsystem`; 
    22  
    23     for ( keys %provider_map ) { 
    24         return $provider_map{$_} if $os =~ /$_/i; 
    25     } 
    26  
    27     return 'RedHat' # default; 
    28 } 
    297 
    308sub status { 
  • lang/perl/Punc/trunk/lib/Punc/Server/Module/Service/RedHat.pm

    r8509 r8512  
    11package Punc::Server::Module::Service::RedHat; 
    22 
     3use strict; 
     4use warnings; 
    35use base qw( Punc::Server::Module::Service ); 
     6 
     7sub default_for { 
     8    return { 'operatingsystem' => [ 'redhat', 'fedora', 'centos' ] } 
     9} 
    410 
    511sub status {