package Helm::Task::run;
use strict;
use warnings;
use Moose;
extends 'Helm::Task';
has command => (is => 'ro', writer => '_command', isa => 'Str');
sub validate {
my $self = shift;
my $helm = $self->helm;
my $cmd = $helm->extra_options->{command} || $helm->extra_args->[0];
$helm->die('Missing option: command') unless $cmd;
$self->_command($cmd);
}
sub help {
my ($self, $task) = @_;
my $text = <<END;
Run a command on a remote server(s). This command can either
be specified as the first positional argument:
helm $task 'ls /'
Or as the named --command option:
helm $task --command 'ls /'
END
$text .= qq(\nThis is just an alias for the "run" task) if $task eq 'exec';
return $text;
}
sub execute {
my ($self, %args) = @_;
my $server = $args{server};
my $ssh = $args{ssh};
my $helm = $self->helm;
my $command = $self->command;
$helm->log->info("Running command ($command) on remote server $server");
$helm->run_remote_command(command => $command, ssh => $ssh, ssh_options => {tty => 1});
}
__PACKAGE__->meta->make_immutable;
1;