return $self->_run($cmd, $code, @argv);
} elsif ($code = $self->can("each_$cmd")) {
return $self->_run_each($cmd, $code, @argv);
+ } elsif ($code = $self->can("every_$cmd")) {
+ return $self->_run_every($cmd, $code, @argv);
}
$self->stderr->print("No such command: ${cmd}\n");
return $self->local_help;
return;
}
my $opt = $self->_maybe_parse_options($code, \@argv);
- if (my $prepare = $self->can("prepare_$cmd")) {
- $self->$prepare($opt, @argv);
- }
$self->local_client->ensure(connector => 'Tak::ConnectorService');
foreach my $target (@targets) {
my $remote = $self->_connection_to($target);
}
}
+sub _run_every {
+ my ($self, $cmd, $code, @argv) = @_;
+ my @targets = $self->_host_list_for($cmd);
+ unless (@targets) {
+ $self->stderr->print("No targets for ${cmd}\n");
+ return;
+ }
+ my $opt = $self->_maybe_parse_options($code, \@argv);
+ $self->local_client->ensure(connector => 'Tak::ConnectorService');
+ my @remotes = map $self->_connection_to($_), @targets;
+ $self->$code(\@remotes, $opt, @argv);
+}
+
sub _host_list_for {
my ($self, $command) = @_;
my @host_spec = map split(' ', $_), @{$self->options->{host}};