Etcd3
view release on metacpan or search on metacpan
lib/Etcd3/Role/Actions.pm view on Meta::CPAN
my ($self) = @_;
my $init = $self->json_args;
$init or return;
return $self;
}
=head2 headers
=cut
has headers => ( is => 'ro' );
=head2 response
=cut
has response => ( is => 'ro' );
=head2 request
=cut
has request => ( is => 'lazy', );
sub _build_request {
my ($self) = @_;
$self->init;
my $cb = $self->cb;
my $cv = $self->cv ? $self->cv : AE::cv;
$cv->begin;
http_request(
'POST',
$self->etcd->api_path . $self->{endpoint},
headers => $self->headers,
body => $self->json_args,
on_header => sub {
my($headers) = @_;
$self->{response}{headers} = $headers;
},
on_body => sub {
my ($data, $hdr) = @_;
$self->{response}{content} = $data;
$cb->($data, $hdr) if $cb;
$cv->end;
1
},
sub {
my (undef, $hdr) = @_;
#print STDERR Dumper($hdr);
my $status = $hdr->{Status};
$self->{response}{success} = 1 if $status == 200;
$cv->end;
}
);
$cv->recv;
return $self;
}
=head2 get_value
returns single decoded value or the first.
=cut
sub get_value {
my ($self) = @_;
my $response = $self->response;
my $content = from_json( $response->{content} );
#print STDERR Dumper($content);
my $value = $content->{kvs}->[0]->{value};
$value or return;
return decode_base64($value);
}
=head2 all
returns list containing for example:
{
'mod_revision' => '3',
'version' => '1',
'value' => 'bar',
'create_revision' => '3',
'key' => 'foo0'
}
where key and value have been decoded for your pleasure.
=cut
sub all {
my ($self) = @_;
my $response = $self->response;
my $content = from_json( $response->{content} );
my $kvs = $content->{kvs};
for my $row (@$kvs) {
$row->{value} = decode_base64( $row->{value} );
$row->{key} = decode_base64( $row->{key} );
}
return $kvs;
}
1;
( run in 2.521 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )