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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b631270b8fb44fc9f63bf971305a3a5336bc9064
4
- data.tar.gz: 799324974b4957ace06c52553281a37ac178a1af
3
+ metadata.gz: e3da4471fa89eef12de54927ad29a3dfe9ad78d1
4
+ data.tar.gz: d2c7b8a7df8d7a464881a6fa226c20cc24142347
5
5
  SHA512:
6
- metadata.gz: fbe1eb6655e78bd7ba390bb84b5d11d8b2843f8ebab0ee12838d02a0da46508409847f993081307a2eb56192ea8bd0ec98156095964b11034e3872b413940195
7
- data.tar.gz: 7124c6966834392ee9f11b44770160ee8e0ee2cdd3fa892901f58d1f87ce46b1f6c78257a0ce86df6bfc97887acba9bf525797da57f4c8302458538f25770278
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
- if token
88
- @metadata[:token] = token
89
- @options[:user] = user
90
- @options[:password] = password
91
- return true
92
- end
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
@@ -18,8 +18,7 @@ class Etcd
18
18
  Authpb::User.new(name: user, password: password)
19
19
  )
20
20
  response.token
21
- rescue GRPC::FailedPrecondition => exception
22
- puts exception.message
21
+ rescue GRPC::FailedPrecondition, GRPC::InvalidArgument => exception
23
22
  false
24
23
  end
25
24
 
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
@@ -1,3 +1,3 @@
1
1
  class Etcd
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -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.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-01 00:00:00.000000000 Z
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.11
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