AnyEvent-Consul-Exec
view release on metacpan or search on metacpan
lib/AnyEvent/Consul/Exec.pm view on Meta::CPAN
$self->_cleanup(sub { $self->{on_error}->($err) });
},
);
}
else {
$self->{_c}->session->create(
Consul::Session->new(
name => 'Remote exec',
behavior => 'delete',
ttl => "15s",
),
cb => $session_started_cb,
);
}
}
sub _cleanup {
my ($self, $cb) = @_;
delete $self->{_refresh_guard};
if ($self->{_sid}) {
$self->{_c}->session->destroy(
$self->{_sid},
$self->{dc_args}->@*,
cb => sub {
$self->{_c}->kv->delete(
"_rexec/$self->{_sid}",
recurse => 1,
$self->{dc_args}->@*,
cb => sub {
delete $self->{_sid};
delete $self->{_c};
$cb->();
},
);
});
}
else {
delete $self->{_sid};
delete $self->{_c};
$cb->();
}
}
sub start {
my ($self) = @_;
$self->{_c} = AnyEvent::Consul->new($self->{consul_args}->@*, error_cb => sub {
my ($err) = @_;
$self->_cleanup(sub { $self->{on_error}->($err) });
});
$self->_start_session;
return;
}
1;
=pod
=encoding UTF-8
=for markdown [](http://travis-ci.org/robn/AnyEvent-Consul-Exec)
=head1 NAME
AnyEvent::Consul::Exec - Execute a remote command across a Consul cluster
=head1 SYNOPSIS
use AnyEvent;
use AnyEvent::Consul::Exec;
my $cv = AE::cv;
my $e = AnyEvent::Consul::Exec->new(
# command to run
command => 'uptime',
# number of seconds target will wait for command, without sending
# output, before terminating it
wait => 2,
# called once job is submitted to Consul
on_submit => sub {
say "job submitted";
},
# called as each target node starts to process the job
# multiple calls, once per node
on_ack => sub {
my ($node) = @_;
say "$node: ack";
},
# called when a node has output from the job
# can be called zero or more times per node, as more output
# becomes available
on_output => sub {
my ($node, $output) = @_;
say "$node: output:";
say "$node> $_" for split("\n", $output);
},
# called when the node completes a job
# multiple calls, one per node
on_exit => sub {
my ($node, $rc) = @_;
say "$node: exit: $rc";
},
# called once all nodes have reported completion
# object is unusable past this point
on_done => sub {
say "job done";
$cv->send;
},
# called if an error occurs anywhere during processing (not command errors)
# typically called if Consul is unable to service requests
# object is unusable past this point
on_error => sub {
( run in 2.174 seconds using v1.01-cache-2.11-cpan-df04353d9ac )