etcdv3 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/etcdv3.rb +36 -9
- data/lib/etcdv3/auth.rb +1 -2
- data/lib/etcdv3/kv.rb +0 -6
- data/lib/etcdv3/maintenance.rb +36 -0
- data/lib/etcdv3/version.rb +1 -1
- data/spec/etcdv3/maintenance_spec.rb +43 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3da4471fa89eef12de54927ad29a3dfe9ad78d1
|
4
|
+
data.tar.gz: d2c7b8a7df8d7a464881a6fa226c20cc24142347
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5870f96529e1084efe1c18fdc8f3295371ec6a6008f744b3db3f48198bf05564c438a2191c5a29f33d7b5a0602f4c23b86f96ee020642fe546cd7b0d3e8aacee
|
7
|
+
data.tar.gz: 4bf35190f37e5453368c9a50349dcb7151f966278b88d6ef3429bdf86716670db0912fdfe9ef82b116a097b45211ff00a5858d58c1909e5d609f7b7ffa83769b
|
data/README.md
CHANGED
@@ -6,6 +6,8 @@ Ruby client for Etcd V3
|
|
6
6
|
|
7
7
|
## Getting Started
|
8
8
|
|
9
|
+
[RubyDocs](http://www.rubydoc.info/gems/etcdv3/0.1.1/Etcd)
|
10
|
+
|
9
11
|
To install etcdv3, run the following command:
|
10
12
|
```
|
11
13
|
gem install etcdv3
|
@@ -87,3 +89,12 @@ Disabling auth will clear the auth token and all previously attached user inform
|
|
87
89
|
```
|
88
90
|
conn.disable_auth
|
89
91
|
```
|
92
|
+
|
93
|
+
**Alarms**
|
94
|
+
```
|
95
|
+
# List all active Alarms
|
96
|
+
conn.alarm_list
|
97
|
+
|
98
|
+
# Deactivate ALL active Alarms
|
99
|
+
conn.deactivate_alarms
|
100
|
+
```
|
data/lib/etcdv3.rb
CHANGED
@@ -5,6 +5,7 @@ require 'uri'
|
|
5
5
|
require 'etcdv3/etcdrpc/rpc_services_pb'
|
6
6
|
require 'etcdv3/auth'
|
7
7
|
require 'etcdv3/kv'
|
8
|
+
require 'etcdv3/maintenance'
|
8
9
|
|
9
10
|
class Etcd
|
10
11
|
|
@@ -45,6 +46,21 @@ class Etcd
|
|
45
46
|
@metadata[:token] = auth.generate_token(user, password) unless user.nil?
|
46
47
|
end
|
47
48
|
|
49
|
+
# Version of Etcd running on member
|
50
|
+
def version
|
51
|
+
maintenance.member_status.version
|
52
|
+
end
|
53
|
+
|
54
|
+
# Store size in bytes.
|
55
|
+
def db_size
|
56
|
+
maintenance.member_status.dbSize
|
57
|
+
end
|
58
|
+
|
59
|
+
# Cluster leader id
|
60
|
+
def leader_id
|
61
|
+
maintenance.member_status.leader
|
62
|
+
end
|
63
|
+
|
48
64
|
# Inserts a new key.
|
49
65
|
def put(key, value)
|
50
66
|
kv.put(key, value)
|
@@ -84,15 +100,12 @@ class Etcd
|
|
84
100
|
# On successful authentication, an auth token will be assigned to the instance.
|
85
101
|
def authenticate(user, password)
|
86
102
|
token = auth.generate_token(user, password)
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
return false
|
94
|
-
rescue GRPC::InvalidArgument => exception
|
95
|
-
return false
|
103
|
+
return false unless token
|
104
|
+
@metadata[:token] = token
|
105
|
+
@options[:user] = user
|
106
|
+
@options[:password] = password
|
107
|
+
|
108
|
+
true
|
96
109
|
end
|
97
110
|
|
98
111
|
# List all roles.
|
@@ -151,6 +164,16 @@ class Etcd
|
|
151
164
|
response
|
152
165
|
end
|
153
166
|
|
167
|
+
# List active alarms
|
168
|
+
def alarm_list
|
169
|
+
maintenance.alarms(:get, leader_id)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Disarm alarms on a specified member.
|
173
|
+
def deactivate_alarms
|
174
|
+
maintenance.alarms(:deactivate, leader_id)
|
175
|
+
end
|
176
|
+
|
154
177
|
private
|
155
178
|
|
156
179
|
def auth
|
@@ -161,6 +184,10 @@ class Etcd
|
|
161
184
|
Etcd::KV.new(hostname, port, @credentials, @metadata)
|
162
185
|
end
|
163
186
|
|
187
|
+
def maintenance
|
188
|
+
Etcd::Maintenance.new(hostname, port, @credentials, @metadata)
|
189
|
+
end
|
190
|
+
|
164
191
|
def resolve_credentials
|
165
192
|
case scheme
|
166
193
|
when 'http'
|
data/lib/etcdv3/auth.rb
CHANGED
data/lib/etcdv3/kv.rb
CHANGED
@@ -9,17 +9,11 @@ class Etcd
|
|
9
9
|
def put(key, value)
|
10
10
|
kv = Etcdserverpb::PutRequest.new(key: key, value: value)
|
11
11
|
@stub.put(kv, metadata: @metadata)
|
12
|
-
rescue GRPC::PermissionDenied, GRPC::InvalidArgument => exception
|
13
|
-
puts exception.message
|
14
|
-
false
|
15
12
|
end
|
16
13
|
|
17
14
|
def get(key, range_end="")
|
18
15
|
kv = Etcdserverpb::RangeRequest.new(key: key, range_end: range_end)
|
19
16
|
@stub.range(kv, metadata: @metadata).kvs
|
20
|
-
rescue GRPC::PermissionDenied, GRPC::InvalidArgument => exception
|
21
|
-
puts exception.message
|
22
|
-
false
|
23
17
|
end
|
24
18
|
end
|
25
19
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class Etcd
|
4
|
+
class Maintenance
|
5
|
+
# Sadly these are the only alarm types supported by the api right now.
|
6
|
+
ALARM_TYPES = {
|
7
|
+
NONE: 0,
|
8
|
+
NOSPACE: 1
|
9
|
+
}
|
10
|
+
|
11
|
+
ALARM_ACTIONS = {
|
12
|
+
get: 0,
|
13
|
+
activate: 1, # Should only be used in testing. Not a stable feature...
|
14
|
+
deactivate: 2
|
15
|
+
}
|
16
|
+
|
17
|
+
def initialize(hostname, port, credentials, metadata = {})
|
18
|
+
@stub = Etcdserverpb::Maintenance::Stub.new("#{hostname}:#{port}", credentials)
|
19
|
+
@metadata = metadata
|
20
|
+
end
|
21
|
+
|
22
|
+
def member_status
|
23
|
+
@stub.status(Etcdserverpb::StatusRequest.new, metadata: @metadata)
|
24
|
+
end
|
25
|
+
|
26
|
+
def alarms(action, member_id, alarm=:NONE)
|
27
|
+
alarm = ALARM_TYPES[alarm]
|
28
|
+
request = Etcdserverpb::AlarmRequest.new(
|
29
|
+
action: ALARM_ACTIONS[action],
|
30
|
+
memberID: member_id,
|
31
|
+
alarm: action == :deactivate ? ALARM_TYPES[:NOSPACE] : alarm
|
32
|
+
)
|
33
|
+
@stub.alarm(request)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/etcdv3/version.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Etcd::Maintenance do
|
4
|
+
|
5
|
+
let(:conn) do
|
6
|
+
Etcd.new(url: 'http://127.0.0.1:2379')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#version' do
|
10
|
+
subject { conn.version }
|
11
|
+
it { is_expected.to_not be_nil }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#leader_id' do
|
15
|
+
subject { conn.leader_id }
|
16
|
+
it { is_expected.to_not be_nil }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#db_size' do
|
20
|
+
subject { conn.db_size }
|
21
|
+
it { is_expected.to_not be_nil }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#alarm_list' do
|
25
|
+
before { conn.send(:maintenance).alarms(:activate, conn.leader_id, :NOSPACE) }
|
26
|
+
after { conn.deactivate_alarms }
|
27
|
+
subject { conn.alarm_list }
|
28
|
+
it 'returns an alarm' do
|
29
|
+
expect(subject).to be_an_instance_of(Etcdserverpb::AlarmResponse)
|
30
|
+
expect(subject.alarms.size).to eq(1)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#deactivate_alarms' do
|
35
|
+
before { conn.send(:maintenance).alarms(:activate, conn.leader_id, :NOSPACE) }
|
36
|
+
subject { conn.deactivate_alarms }
|
37
|
+
it 'deactivates alarms' do
|
38
|
+
expect(subject).to be_an_instance_of(Etcdserverpb::AlarmResponse)
|
39
|
+
expect(conn.alarm_list.alarms.size).to eq(0)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: etcdv3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shaun Davis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/etcdv3/etcdrpc/rpc_pb.rb
|
58
58
|
- lib/etcdv3/etcdrpc/rpc_services_pb.rb
|
59
59
|
- lib/etcdv3/kv.rb
|
60
|
+
- lib/etcdv3/maintenance.rb
|
60
61
|
- lib/etcdv3/protos/annotations.proto
|
61
62
|
- lib/etcdv3/protos/auth.proto
|
62
63
|
- lib/etcdv3/protos/descriptor.proto
|
@@ -68,6 +69,7 @@ files:
|
|
68
69
|
- spec/etcd_spec.rb
|
69
70
|
- spec/etcdv3/auth_spec.rb
|
70
71
|
- spec/etcdv3/kv_spec.rb
|
72
|
+
- spec/etcdv3/maintenance_spec.rb
|
71
73
|
- spec/helpers/test_instance.rb
|
72
74
|
- spec/spec_helper.rb
|
73
75
|
homepage: https://github.com/davissp14/etcdv3-ruby
|
@@ -90,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
92
|
version: '0'
|
91
93
|
requirements: []
|
92
94
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.6.
|
95
|
+
rubygems_version: 2.6.8
|
94
96
|
signing_key:
|
95
97
|
specification_version: 4
|
96
98
|
summary: A Etcd client library for Version 3
|
@@ -98,5 +100,6 @@ test_files:
|
|
98
100
|
- spec/etcd_spec.rb
|
99
101
|
- spec/etcdv3/auth_spec.rb
|
100
102
|
- spec/etcdv3/kv_spec.rb
|
103
|
+
- spec/etcdv3/maintenance_spec.rb
|
101
104
|
- spec/helpers/test_instance.rb
|
102
105
|
- spec/spec_helper.rb
|