nodejs-etcd

etcd client for node

nodejs-etcd

Another (!!) etcd library for nodejs. This is formerly based on etcd-node, but has since evolved to a full-fledged new library with etcd v2 support.

This is not stable at the moment. Development will follow closely the development of etcd and changes in its API. minor-version changes will be kept in sync.

$ npm install etcd

The client only need to be configured very simply by providing the base url of the etcd service.

var etcd = require('etcd');
 
var e = new etcd({
    url: 'https://node01.example.com:4001'
})

Nodejs-etcd supports the full v2 api specification.

Reads from etcd. All paths you may want to read start with '/' as the etcd hierarchy strictly mimics the one of a filesystem

e.read({'key': '/hello', function (errresultbody) {
  if (err) throw err;
  assert(result.value);
});

All etcd flags are supported here as well; the valid options are:

  • recursive (boolean) it set to true, fetches all subdirectories
  • wait (boolean) if set to true, the request will wait until the value changes.
  • wait_index (integer) if set toghether with wait, will wait to return until the marked index is reached

The callback can be encapsulated using this method. It will return a valid callback for the other methods that will:

  • Manage HTTP response codes
  • Populate a standard EtcdResult object (see result.js)
  • Apply resp_cb to this result.

Let's say we just want to output the value of the key:

cb = e.generator(
    function () { console.log('An error has occurred')},
    function (result) { console.log('We found the key, it has value ' + result.value)}
)
e.read(
    {key: '/hello'},
    cb
)

By default, if no callback is declared nodejs-etcd will log some important values of the response to the console.

Writes a key or dir to the cluster. Simplest form:

e.write({
    key: 'hello',
    value: 'world',
    }, function (err,respbody) {
  if (err) throw err;
  console.log(body);
});

All etcd flags to a write operation are supported and must be added to the options object.

Accepted options:

  • `ttl`` (integer) sets a TTL on the key
  • prev_exists (boolean) key gets written only if it is being created.
  • prev_index (integer) sets the key only if the actual index is exactly this one.
  • prev_value (string) sets the key only if the actual value is this one.

Deletes a key from etcd. If the recursive option is set to true, it will allow to remove directories.

e.del('hello', function (err) {
  if (err) throw err;
});
etcd.machines(function (errlist) {
  if (err) throw err;
});
etcd.leader(function (errhost) {
  if (err) throw err;
});

MIT