package Tak::MyScript;
use Tak::Takfile;
+use Tak::ObjectClient;
-sub every_exec (stream|s) {
- my ($self, $remotes, $options, @command) = @_;
-
- my @requests;
-
- $_->ensure(command_service => 'Tak::CommandService') for @$remotes;
-
- foreach my $remote (@$remotes) {
- if ($options->{stream}) {
- my $stdout = $self->stdout;
- my $host = $remote->host;
- push @requests, $remote->start(
- {
- on_result => sub { $self->print_exec_result($remote, @_) },
- on_progress => sub {
- $stdout->print($host.' '.$_[0].': '.$_[1]);
- $stdout->print("\n") unless $_[1] =~ /\n\Z/;
- }
- },
- command_service => stream_exec => \@command
- );
- } else {
- push @requests, $remote->start(
- { on_result => sub { $self->print_exec_result($remote, @_) } },
- command_service => exec => \@command
- );
- }
- }
- Tak->await_all(@requests);
-}
-
-sub print_exec_result {
- my ($self, $remote, $result) = @_;
-
- my $res = eval { $result->get }
- or do {
- $self->stderr->print("Host ${\$remote->host}: Error: $@\n");
- return;
- };
-
- my $code = $res->{exit_code};
+sub each_get_homedir {
+ my ($self, $remote) = @_;
+ my $oc = Tak::ObjectClient->new(remote => $remote);
+ my $home = $oc->new_object('Path::Class::Dir')->absolute->stringify;
$self->stdout->print(
- "Host ${\$remote->host}: ".($code ? "NOT OK ${code}" : "OK")."\n"
+ $remote->host.': '.$home."\n"
);
- if ($res->{stderr}) {
- $self->stdout->print("Stderr:\n${\$res->{stderr}}\n");
- }
- if ($res->{stdout}) {
- $self->stdout->print("Stdout:\n${\$res->{stdout}}\n");
- }
}
1;
use Log::Contextual::SimpleLogger;
use Moo;
+with 'Tak::Role::ScriptActions';
+
has options => (is => 'ro', required => 1);
has env => (is => 'ro', required => 1);
return $self->local_help;
}
my $cmd = shift(@argv);
+ $cmd =~ s/-/_/g;
if (my $code = $self->can("local_$cmd")) {
return $self->_run($cmd, $code, @argv);
} elsif ($code = $self->can("each_$cmd")) {