NAME
    Net::Etcd - etcd v3 REST API.

SYNOPSIS
        Etcd v3.1.0 or greater is required.   To use the v3 API make sure to set environment
        variable ETCDCTL_API=3.  Precompiled binaries can be downloaded at https://github.com/coreos/etcd/releases.

        $etcd = Net::Etcd->new(); # host: 127.0.0.1 port: 2379
        $etcd = Net::Etcd->new({ host => $host, port => $port, ssl => 1 });

        # put key
        $result = $etcd->put({ key =>'foo1', value => 'bar' });

        # get single key
        $key = $etcd->range({ key =>'test0' });

        # return single key value or the first in a list.
        $key->get_value

        # get range of keys
        $range = $etcd->range({ key =>'test0', range_end => 'test100' });

        # return array { key => value } pairs from range request.
        my @users = $range->all

        # delete single key
        $etcd->deleterange({ key => 'test0' });

        # watch key range, streaming.
        $watch = $etcd->watch( { key => 'foo', range_end => 'fop'}, sub {
            my ($result) =  @_;
            print STDERR Dumper($result);
        })->create;

        # create/grant 20 second lease
        $etcd->lease( { ID => 7587821338341002662, TTL => 20 } )->grant;

        # attach lease to put
        $etcd->put( { key => 'foo2', value => 'bar2', lease => 7587821338341002662 } );

        # add new user
        $etcd->user( { name => 'samba', password => 'foo' } )->add;

        # add new user role
        $role = $etcd->role( { name => 'myrole' } )->add;

        # grant read permission for the foo key to myrole
        $etcd->role_perm( { name => 'myrole', key => 'foo', permType => 'READWRITE' } )->grant;

        # grant role
        $etcd->user_role( { user => 'samba', role => 'myrole' } )->grant;

DESCRIPTION
    Net::Etcd is object oriented interface to the v3 REST API provided by
    the etcd grpc-gateway <https://github.com/grpc-ecosystem/grpc-gateway>.

ACCESSORS
  host
    The etcd host. Defaults to 127.0.0.1

  port
    Default 2379.

  name
    Username for authentication

  password
    Authentication credentials

  ssl
    To enable set to 1

  api_version
    defaults to /v3alpha

  api_path
    The full api path. Defaults to http://127.0.0.1:2379/v3alpha

  auth_token
    The token that is passed during authentication. This is generated during
    the authentication process and stored until no longer valid or username
    is changed.

PUBLIC METHODS
  watch
    See Net::Etcd::Watch

        $etcd->watch({ key =>'foo', range_end => 'fop' })

  role
    See Net::Etcd::Auth::Role

        $etcd->role({ role => 'foo' });

  role_perm
    See Net::Etcd::Auth::RolePermission

    Grants or revoke permission of a specified key or range to a specified
    role.

  user_role
    See Net::Etcd::User::Role

        $etcd->user_role({ name => 'samba', role => 'foo' });

  auth
    See Net::Etcd::Auth

        $etcd->auth({ name => 'samba', password => 'foo' })->authenticate;
        $etcd->auth()->enable;
        $etcd->auth()->disable

  lease
    See Net::Etcd::Lease

        $etcd->lease( { ID => 7587821338341002662, TTL => 20 } )->grant;

  maintenance
    See Net::Etcd::Maintenance

        $etcd->maintenance()->snapshot

  user
    See Net::Etcd::User

        $etcd->user( { name => 'samba', password => 'foo' } )->add;

  put
    See Net::Etcd::KV::Put

        $etcd->put({ key =>'foo1', value => 'bar' });

  deleterange
    See Net::Etcd::KV::DeleteRange

        $etcd->deleterange({ key=>'test0' });

  range
    See Net::Etcd::KV::Range

        $etcd->range({ key =>'test0', range_end => 'test100' });

  txn
    See Net::Etcd::KV::Txn

        $etcd->txn({ compare => \@compare, success => \@op });

  op
    See Net::Etcd::KV::Op

        $etcd->op({ request_put => $put });
        $etcd->op({ request_delete_range => $range });

  compare
    See Net::Etcd::KV::Compare

        $etcd->compare( { key => 'foo', result => 'EQUAL', target => 'VALUE', value => 'baz' });
        $etcd->compare( { key => 'foo', target => 'CREATE', result => 'NOT_EQUAL', create_revision => '2' });

  configuration
    Initialize configuration checks to see it etcd is installed locally.

AUTHOR
    Sam Batschelet (hexfusion)

CONTRIBUTORS
    Ananth Kavuri

ACKNOWLEDGEMENTS
    The etcd <https://github.com/coreos/etcd> developers and community.

CAVEATS
    The etcd <https://github.com/coreos/etcd> v3 API is in heavy development
    and can change at anytime please see api_reference_v3
    <https://github.com/coreos/etcd/blob/master/Documentation/dev-guide/api_
    reference_v3.md> for latest details.

    Authentication provided by this module will only work with etcd v3.3.0+

LICENSE AND COPYRIGHT
    Copyright 2017 Sam Batschelet (hexfusion).

    This program is free software; you can redistribute it and/or modify it
    under the terms of either: the GNU General Public License as published
    by the Free Software Foundation; or the Artistic License.

    See http://dev.perl.org/licenses/ for more information.

