Project

etcd

0.12
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Ruby client library for etcd
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0
>= 0
>= 0

Runtime

 Project Readme

Built on Travis

Etcd

A ruby client for etcd

Installation

Add this line to your application's Gemfile:

gem 'etcd'

And then execute:

$ bundle

Or install it yourself as:

$ gem install etcd

Usage

Create a client object

client = Etcd.client # this will create a client against etcd server running on localhost on port 4001
client = Etcd.client(port: 4002)
client = Etcd.client(host: '127.0.0.1', port: 4003)
client = Etcd.client(:user_name => 'test', :password => 'pwd') # populates the authentication header for basic HTTP auth with user name and password (useful for proxied connections)
client = Etcd.client(host: '127.0.0.1', port: 4003, allow_redirect: false) # wont let you run sensitive commands on non-leader machines, default is true

Create a client object to connect to a SSL etcd instance

See Etcd config to setup etcd in SSL mode.

Assuming you have these:

  • myca.crt - Your internal CAs certificate
  • my-cert.crt - The "client" cert
  • my-cert.key - The key corresponding to my-cert.crt

If you were using self signed Certs and have your own CA, You would have set -ca-file in your etcd config also to use myca.crt.

client=Etcd.client(
  :host => "your-etcd-host",
  :port => 443,
  :use_ssl => true,
  :ca_file => "/pathto/myca.crt",
  :ssl_cert => OpenSSL::X509::Certificate.new( File.read("/pathto/my-cert.crt") ),
  :ssl_key => OpenSSL::PKey::RSA.new("/etc/ssl/my-cert.key",passphrase)
)
#Omit passphrase if not set on your key.

Set a key

client.set('/nodes/n1', value: 1)
# with ttl
client.set('/nodes/n2', value: 2, ttl: 4)  # sets the ttl to 4 seconds

Get a key

client.get('/nodes/n2').value

Delete a key

client.delete('/nodes/n1')
client.delete('/nodes/', recursive: true)

Test and set

client.test_and_set('/nodes/n2', value: 2, prevValue: 4) # will set /nodes/n2 's value to 2 only if its previous value was 4

Watch a key

client.watch('/nodes/n1') # will wait till the key is changed, and return once its changed

List sub keys

client.get('/nodes')

Get machines in the cluster

client.machines

Get leader of the cluster

client.leader

More examples and api details can be found in the wiki

Contributors

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request
  6. If applicable, update the README.md