etcdv3 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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