Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.47 KB | None | 0 0
  1. package Spin::Command::spin ;
  2.  
  3. use Moose;
  4. use Spin::Task;
  5. use Spin::Group;
  6. use namespace::autoclean;
  7. use Log::Log4perl::Shortcuts qw(:all);
  8. extends qw(Spin::Command MooseX::App::Cmd::Command);
  9.  
  10. has '_curr_desc' => ( is => 'rw', isa => 'Str', default => '');
  11.  
  12. has '_groups'    => ( traits => [ 'Hash' ], is => 'ro', isa => 'HashRef[Spin::Group]',
  13.                       default => sub { {} },
  14.                       handles => { set_group => 'set', get_group => 'get',
  15.                                    group_exists => 'exists' },
  16.                     );
  17.  
  18. has '_tasks'     => ( traits => [ 'Array' ], is => 'ro', isa => 'ArrayRef[Spin::Task]',
  19.                       default => sub { [] },
  20.                       handles => { all_tasks => 'elements', add_task => 'push',
  21.                                    pop_task  => 'pop',
  22.                              },
  23.                );
  24.  
  25.  
  26.  
  27. sub abstract { return "does some stuff" }
  28. sub description { return 'execute server tasks'; }
  29.  
  30. sub validate {
  31.   my $s = shift;
  32.   $s->_load_spinfile();
  33. }
  34.  
  35. sub execute {
  36.   my $s = shift;
  37.  
  38.   $s->_init_command($s->_spinfile);
  39. }
  40.  
  41. # TODO: Fix
  42. sub group {
  43.   my $group_name = shift;
  44.   my @servers = @_;
  45.   my $group = Spin::Group->new(name => $group_name, servers => \@servers);
  46.   Spin::Command::spin->set_group($group_name => $group);
  47. }
  48.  
  49. sub user { # not implemented yet }
  50.  
  51. sub run { # not implemented yet }
  52.  
  53.  
  54. local our $Object;
  55. {
  56.   my $done = 0;
  57.   sub _init_command {
  58.     return if $done;
  59.     my $s = shift;
  60.     $Object = $s;
  61.     my $file = shift;
  62.     do $file;
  63.     $done++;
  64.   }
  65. }
  66.  
  67. sub task {
  68.   my $name = shift;
  69.   my $desc = $Object->_curr_desc;
  70.   $Object->_curr_desc('');
  71.  
  72.   my $next_arg = pop;
  73.  
  74.   my $func;
  75.   if (ref($next_arg) eq 'CODE') {
  76.     $func = $next_arg;
  77.   } else {
  78.     $func = pop;
  79.   }
  80.  
  81.   my $group = 'ALL';
  82.   my @server = ();
  83.   if (scalar(@_) >= 1) {
  84.     if($_[0] eq 'group') {
  85.       $group = $_[1];
  86.       if ($Object->group_exists($group)) {
  87.         @server = @{$Object->get_group($group)->servers};
  88.       } else {
  89.         #logf ("Group $group not found!\n");
  90.       }
  91.     } else {
  92.       @server = @_;
  93.     }
  94.   }
  95.  
  96.   my $task;
  97.   $task = Spin::Task->new(name => $name, server => [ @server ], desc => $desc);
  98.   $Object->add_task($task);
  99. }
  100.  
  101. sub desc {
  102.   my $desc = shift;
  103.   $Object->_curr_desc($desc);
  104. }
  105.  
  106.  
  107. __PACKAGE__->meta->make_immutable;
  108. 1; # Magic true value required at end of module
  109. # ABSTRACT: [One line description of module's purpose here]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement