Rex-WebUI
view release on metacpan or search on metacpan
lib/Rex/WebUI/Model/RexInterface.pm view on Meta::CPAN
}
}
# expand server list into hashrefs, adding info from db if available
# TODO: add db interface
foreach my $server (@$servers) {
$server = { name => $server};
}
return $servers;
}
sub load_rexfile
{
my ($self, $rexfile) = @_;
$rexfile = $self->{rexfile} || "SampleRexfile" unless $rexfile;
$Rex::TaskList::task_list = {};
$self->{tasks} = undef;
delete $self->{tasks};
$self->{tasklist} = undef;
delete $self->{tasklist};
# Is rexfile already loaded?
if (exists $self->{rexfiles}->{$rexfile}) {
warn "Rexfile already loaded: $rexfile, use tasklist from cache";
$Rex::TaskList::task_list = $self->{rexfiles}->{$rexfile};
$self->{rexfile} = $rexfile;
return 1;
}
# workaround namespace issues - Rex::CLI is handled already for this issue
if (defined _hacky_do_rexfile($rexfile)) {
warn "Loaded Rexfile: $rexfile";
$self->{rexfile} = $rexfile;
$self->{rexfiles}->{$rexfile} = $Rex::TaskList::task_list;
return 1;
}
else {
warn "Error loading Rexfile: $rexfile - $@";
return $self->{rexfile} = undef;
}
}
sub _hacky_do_rexfile
{
my $filename = shift;
my $rexfile = eval { local(@ARGV, $/) = ($filename); <>; };
eval "package Rex::CLI; use Rex -base; $rexfile";
if($@) {
die("Error loading Rexfile: $@");
}
return $rexfile;
}
# I'm getting a weird conflict with Rex::Commands::run_task so I'm renaming this to something more obscure
sub do_run_task
{
my ($self, $task_name, $server_name, $temp_logfile) = @_;
Rex::Config->set_log_filename($temp_logfile) if $temp_logfile;
my $result;
try {
$result = Rex::Commands::run_task("$task_name", on => $server_name);
Rex::Logger::info("DONE");
return $result;
}
catch {
Rex::Logger::info("Task Failed: $_", 'error');
return undef;
};
}
sub options
{
my ($self, $opts) = @_;
$Rex::Logger::debug = $opts->{debug} if exists $opts->{debug};
$Rex::Cache::USE = $opts->{cache} if exists $opts->{cache};
}
1;
( run in 0.778 second using v1.01-cache-2.11-cpan-ceb78f64989 )