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 certificatemy-cert.crt
- The "client" certmy-cert.key
- The key corresponding tomy-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', 2, 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
- Ranjib Dey
- Jesse Nelson
- Nilesh Bairagi
- Dr Nic Williams
- [Eric Buth] (https://github.com/buth)
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
- If applicable, update the README.md