etcdv3 0.0.3
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 +7 -0
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/README.md +33 -0
- data/etcdv3.gemspec +19 -0
- data/lib/etcdv3/auth.rb +33 -0
- data/lib/etcdv3/etcdrpc/auth_pb.rb +33 -0
- data/lib/etcdv3/etcdrpc/kv_pb.rb +30 -0
- data/lib/etcdv3/etcdrpc/rpc_pb.rb +461 -0
- data/lib/etcdv3/etcdrpc/rpc_services_pb.rb +172 -0
- data/lib/etcdv3/kv.rb +21 -0
- data/lib/etcdv3/protos/annotations.proto +30 -0
- data/lib/etcdv3/protos/auth.proto +37 -0
- data/lib/etcdv3/protos/descriptor.proto +804 -0
- data/lib/etcdv3/protos/gogo.proto +125 -0
- data/lib/etcdv3/protos/http.proto +285 -0
- data/lib/etcdv3/protos/kv.proto +49 -0
- data/lib/etcdv3/protos/rpc.proto +966 -0
- data/lib/etcdv3/version.rb +3 -0
- data/lib/etcdv3.rb +98 -0
- data/spec/etcd_spec.rb +52 -0
- data/spec/etcdv3/auth_spec.rb +38 -0
- data/spec/spec_helper.rb +14 -0
- metadata +98 -0
data/lib/etcdv3.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
|
2
|
+
require 'grpc'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
require 'etcdv3/etcdrpc/rpc_services_pb'
|
6
|
+
require 'etcdv3/auth'
|
7
|
+
require 'etcdv3/kv'
|
8
|
+
|
9
|
+
class Etcd
|
10
|
+
|
11
|
+
def options
|
12
|
+
Marshal.load(Martial.dump(@options))
|
13
|
+
end
|
14
|
+
|
15
|
+
def uri
|
16
|
+
URI(@options[:url])
|
17
|
+
end
|
18
|
+
|
19
|
+
def scheme
|
20
|
+
uri.scheme
|
21
|
+
end
|
22
|
+
|
23
|
+
def port
|
24
|
+
uri.port
|
25
|
+
end
|
26
|
+
|
27
|
+
def hostname
|
28
|
+
uri.hostname
|
29
|
+
end
|
30
|
+
|
31
|
+
def user
|
32
|
+
@options[:user]
|
33
|
+
end
|
34
|
+
|
35
|
+
def password
|
36
|
+
@options[:password]
|
37
|
+
end
|
38
|
+
|
39
|
+
def token
|
40
|
+
@metadata[:token]
|
41
|
+
end
|
42
|
+
|
43
|
+
def credentials
|
44
|
+
@credentials
|
45
|
+
end
|
46
|
+
|
47
|
+
def initialize(options={})
|
48
|
+
@options = options
|
49
|
+
@credentials = resolve_credentials
|
50
|
+
@metadata = {}
|
51
|
+
unless user.nil?
|
52
|
+
@metadata[:token] = auth.generate_token(user, password)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def put(key, value)
|
57
|
+
kv.put(key, value, @metadata)
|
58
|
+
end
|
59
|
+
|
60
|
+
def range(key, range_end)
|
61
|
+
kv.range(key, range_end, @metadata)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def add_user(user, password)
|
66
|
+
auth.add_user(user, password, @metadata)
|
67
|
+
end
|
68
|
+
|
69
|
+
def delete_user(user)
|
70
|
+
auth.delete_user(user, @metadata)
|
71
|
+
end
|
72
|
+
|
73
|
+
def user_list
|
74
|
+
auth.user_list(@metadata)
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def auth
|
80
|
+
Etcd::Auth.new(hostname, port, @credentials)
|
81
|
+
end
|
82
|
+
|
83
|
+
def kv
|
84
|
+
Etcd::KV.new(hostname, port, @credentials)
|
85
|
+
end
|
86
|
+
|
87
|
+
def resolve_credentials
|
88
|
+
case scheme
|
89
|
+
when "http"
|
90
|
+
:this_channel_is_insecure
|
91
|
+
when "https"
|
92
|
+
# Use default certs for now.
|
93
|
+
GRPC::Core::ChannelCredentials.new
|
94
|
+
else
|
95
|
+
raise "Unknown scheme: #{scheme}"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/spec/etcd_spec.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Etcd do
|
4
|
+
|
5
|
+
context 'Insecure connection without Auth' do
|
6
|
+
|
7
|
+
let(:conn){ Etcd.new(
|
8
|
+
url: 'http://127.0.0.1:2379'
|
9
|
+
)}
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
|
13
|
+
it 'assigns scheme' do
|
14
|
+
expect(conn.scheme).to eq('http')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'assigns host' do
|
18
|
+
expect(conn.hostname).to eq('127.0.0.1')
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'assigns port' do
|
22
|
+
expect(conn.port).to eq(2379)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'returns nil token' do
|
26
|
+
expect(conn.token).to eq(nil)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'assigns proper credentials' do
|
30
|
+
expect(conn.credentials).to eq(:this_channel_is_insecure)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#put" do
|
35
|
+
it 'issues put request' do
|
36
|
+
expect(conn.put('test', 'test')).to be_an_instance_of(Etcdserverpb::PutResponse)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#range" do
|
41
|
+
it 'returns protobuf' do
|
42
|
+
expect(conn.range('test', '')).to be_an_instance_of(Google::Protobuf::RepeatedField)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns correct result' do
|
46
|
+
expect(conn.range('test', '').first.key).to eq('test')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# require 'spec_helper'
|
2
|
+
# require 'securerandom'
|
3
|
+
#
|
4
|
+
# describe Etcd::Auth do
|
5
|
+
#
|
6
|
+
# context "User managment without Auth" do
|
7
|
+
#
|
8
|
+
# let(:stub){ Etcd::Auth.new("127.0.0.1", 2379, :this_channel_is_insecure)}
|
9
|
+
# let(:rando) { SecureRandom.hex(10) }
|
10
|
+
#
|
11
|
+
# describe "#add_user" do
|
12
|
+
# it 'adds user' do
|
13
|
+
# expect(stub.add_user(rando, 'test')).to be_an_instance_of(Etcdserverpb::AuthUserAddResponse)
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# describe "#user_list" do
|
18
|
+
# it 'has correct data type' do
|
19
|
+
# expect(stub.user_list).to be_an_instance_of(Google::Protobuf::RepeatedField)
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# it 'contains user testy' do
|
23
|
+
# puts stub.user_list
|
24
|
+
# expect(stub.user_list).to eq(rando)
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# describe "#delete_user" do
|
29
|
+
#
|
30
|
+
# it 'deletes user' do
|
31
|
+
# expect(stub.delete_user(rando)).to be_an_instance_of(Etcdserverpb::AuthUserDeleteResponse)
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
require 'etcdv3'
|
5
|
+
RSpec.configure do |config|
|
6
|
+
config.expect_with :rspec do |expectations|
|
7
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
8
|
+
end
|
9
|
+
|
10
|
+
config.mock_with :rspec do |mocks|
|
11
|
+
mocks.verify_partial_doubles = true
|
12
|
+
end
|
13
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: etcdv3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Shaun Davis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-03-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: grpc
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.2.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.5.4
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.5.4
|
41
|
+
description: Etcd v3 Ruby Client
|
42
|
+
email: davissp14@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- ".gitignore"
|
48
|
+
- ".rspec"
|
49
|
+
- ".ruby-version"
|
50
|
+
- Gemfile
|
51
|
+
- README.md
|
52
|
+
- etcdv3.gemspec
|
53
|
+
- lib/etcdv3.rb
|
54
|
+
- lib/etcdv3/auth.rb
|
55
|
+
- lib/etcdv3/etcdrpc/auth_pb.rb
|
56
|
+
- lib/etcdv3/etcdrpc/kv_pb.rb
|
57
|
+
- lib/etcdv3/etcdrpc/rpc_pb.rb
|
58
|
+
- lib/etcdv3/etcdrpc/rpc_services_pb.rb
|
59
|
+
- lib/etcdv3/kv.rb
|
60
|
+
- lib/etcdv3/protos/annotations.proto
|
61
|
+
- lib/etcdv3/protos/auth.proto
|
62
|
+
- lib/etcdv3/protos/descriptor.proto
|
63
|
+
- lib/etcdv3/protos/gogo.proto
|
64
|
+
- lib/etcdv3/protos/http.proto
|
65
|
+
- lib/etcdv3/protos/kv.proto
|
66
|
+
- lib/etcdv3/protos/rpc.proto
|
67
|
+
- lib/etcdv3/version.rb
|
68
|
+
- spec/etcd_spec.rb
|
69
|
+
- spec/etcdv3/auth_spec.rb
|
70
|
+
- spec/spec_helper.rb
|
71
|
+
homepage: https://github.com/davissp14/etcdv3-ruby
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
metadata: {}
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 2.6.11
|
92
|
+
signing_key:
|
93
|
+
specification_version: 4
|
94
|
+
summary: A Etcd client library for Version 3
|
95
|
+
test_files:
|
96
|
+
- spec/etcd_spec.rb
|
97
|
+
- spec/etcdv3/auth_spec.rb
|
98
|
+
- spec/spec_helper.rb
|