kong 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +44 -12
- data/lib/kong/base.rb +1 -0
- data/lib/kong/target.rb +61 -0
- data/lib/kong/upstream.rb +24 -0
- data/lib/kong/version.rb +1 -1
- data/lib/kong.rb +2 -0
- data/spec/kong/target_spec.rb +53 -0
- data/spec/kong/upstream_spec.rb +37 -0
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65344f942e47dd8c8607a2c59df13230abeff63d
|
4
|
+
data.tar.gz: b0e5d1f544da750dc29e73fe64162185e87435e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0e3bb31a1d6b3236e56f449f6ee98cd05492081dcf5504a7b3715ec72cfe24d5b0da360a07925ec5bd5befdbf6af2826bffd4fc913159024bbd6a2e2f691ac8
|
7
|
+
data.tar.gz: b51843df1c0d1962d7db7928cb042a286a3d6ad897a658341c59e9f0bb605e38283e06d10626a5fadcaa989ddaae4e121f5c01485d00fc05a247a546f5dea588
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# 0.3.0 (2017-07-31)
|
2
|
+
- Add support for Upstream and Target resources ([#15](https://github.com/kontena/kong-client-ruby/pull/15))
|
3
|
+
|
1
4
|
# 0.2.0 (2017-04-20)
|
2
5
|
- Add Server information support ([#14](https://github.com/kontena/kong-client-ruby/pull/14))
|
3
6
|
- Add optional attributes to Api
|
data/README.md
CHANGED
@@ -53,6 +53,8 @@ consumer = Kong::Consumer.find_by_custom_id('custom_id')
|
|
53
53
|
|
54
54
|
### All Resources and Actions
|
55
55
|
|
56
|
+
To see the complete Kong Admin API documentation, please visit: https://getkong.org/docs/0.10.x/admin-api/
|
57
|
+
|
56
58
|
#### Consumer
|
57
59
|
|
58
60
|
```ruby
|
@@ -87,9 +89,9 @@ Kong::Api.create(attributes)
|
|
87
89
|
|
88
90
|
api = Kong::Api.new({
|
89
91
|
name: 'Mockbin',
|
90
|
-
|
91
|
-
|
92
|
-
|
92
|
+
hosts: ['mockbin.com'],
|
93
|
+
uris: ['/someservice'],
|
94
|
+
strip_uri: false,
|
93
95
|
preserve_host: false,
|
94
96
|
upstream_url: 'https://mockbin.com'
|
95
97
|
})
|
@@ -118,7 +120,7 @@ plugin = Kong::Plugin.new({
|
|
118
120
|
config: {
|
119
121
|
minute: 20,
|
120
122
|
hour: 500
|
121
|
-
}
|
123
|
+
}
|
122
124
|
})
|
123
125
|
|
124
126
|
plugin.get # reloads resource
|
@@ -128,6 +130,36 @@ plugin.save # requests create_or_update action
|
|
128
130
|
plugin.delete
|
129
131
|
```
|
130
132
|
|
133
|
+
#### Upstream and Targets (for load-balanced APIs)
|
134
|
+
|
135
|
+
```
|
136
|
+
Kong::Upstream.list(filters)
|
137
|
+
Kong::Upstream.all()
|
138
|
+
Kong::Upstream.find(id)
|
139
|
+
Kong::Upstream.find_by_*(value)
|
140
|
+
Kong::Upstream.create(attributes)
|
141
|
+
|
142
|
+
upstream = Kong::Upstream.new({ name: 'myservice' })
|
143
|
+
|
144
|
+
upstream.get # reloads resource
|
145
|
+
upstream.create
|
146
|
+
upstream.update
|
147
|
+
upstream.save # requests create_or_update action
|
148
|
+
upstream.delete
|
149
|
+
|
150
|
+
upstream.targets # lists active targets
|
151
|
+
|
152
|
+
# Add targets
|
153
|
+
Kong::Target.new({ upstream_id: upstream.id, target: 'appserver1:80' }).save
|
154
|
+
Kong::Target.new({ upstream_id: upstream.id, target: 'appserver2:80' }).save
|
155
|
+
|
156
|
+
# Add the API
|
157
|
+
Kong::Api.new({
|
158
|
+
...
|
159
|
+
upstream_url: 'http://myservice'
|
160
|
+
}).save
|
161
|
+
```
|
162
|
+
|
131
163
|
#### OAuthApp
|
132
164
|
|
133
165
|
```ruby
|
@@ -137,8 +169,8 @@ Kong::OAuthApp.find(consumer_id)
|
|
137
169
|
Kong::OAuthApp.find_by_*(value)
|
138
170
|
Kong::OAuthApp.create(attributes)
|
139
171
|
|
140
|
-
app = Kong::OAuthApp.new({
|
141
|
-
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
172
|
+
app = Kong::OAuthApp.new({
|
173
|
+
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
142
174
|
redirect_uri: 'http://some-domain/endpoint/'
|
143
175
|
})
|
144
176
|
|
@@ -154,8 +186,8 @@ app.delete
|
|
154
186
|
```ruby
|
155
187
|
Kong::KeyAuth.create(attributes)
|
156
188
|
|
157
|
-
auth = Kong::KeyAuth.new({
|
158
|
-
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
189
|
+
auth = Kong::KeyAuth.new({
|
190
|
+
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
159
191
|
})
|
160
192
|
|
161
193
|
auth.create
|
@@ -170,7 +202,7 @@ auth.delete
|
|
170
202
|
```ruby
|
171
203
|
Kong::BasicAuth.create(attributes)
|
172
204
|
|
173
|
-
auth = Kong::BasicAuth.new({
|
205
|
+
auth = Kong::BasicAuth.new({
|
174
206
|
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
175
207
|
username: 'user123',
|
176
208
|
password: 'secret'
|
@@ -188,7 +220,7 @@ auth.delete
|
|
188
220
|
```ruby
|
189
221
|
token = Kong::OAuth2Token.find_by_access_token('SOME-TOKEN')
|
190
222
|
|
191
|
-
token = Kong::OAuth2Token.new({
|
223
|
+
token = Kong::OAuth2Token.new({
|
192
224
|
credential_id: 'KONG-APPLICATION-ID',
|
193
225
|
token_type: 'bearer',
|
194
226
|
access_token: 'SOME-TOKEN',
|
@@ -208,7 +240,7 @@ token.oauth_app
|
|
208
240
|
|
209
241
|
```ruby
|
210
242
|
|
211
|
-
jwt = Kong::JWT.new({
|
243
|
+
jwt = Kong::JWT.new({
|
212
244
|
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
213
245
|
key: 'a36c3049b36249a3c9f8891cb127243c',
|
214
246
|
secret: 'e71829c351aa4242c2719cbfbe671c09'
|
@@ -227,7 +259,7 @@ consumer.jwts
|
|
227
259
|
|
228
260
|
```ruby
|
229
261
|
|
230
|
-
acl = Kong::Acl.new({
|
262
|
+
acl = Kong::Acl.new({
|
231
263
|
consumer_id: 'a3dX2dh2-1adb-40a5-c042-63b19dbx83hF4',
|
232
264
|
group: 'group1'
|
233
265
|
})
|
data/lib/kong/base.rb
CHANGED
data/lib/kong/target.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Kong
|
2
|
+
class Target
|
3
|
+
include Base
|
4
|
+
|
5
|
+
ATTRIBUTE_NAMES = %w(id upstream_id target weight).freeze
|
6
|
+
API_END_POINT = '/targets/'.freeze
|
7
|
+
|
8
|
+
def self.find(id)
|
9
|
+
raise NotImplementedError, 'Kong does not support direct access to targets, you must go via an upstream'
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.list(params = {})
|
13
|
+
raise NotImplementedError, 'Kong does not support direct access to targets, you must go via an upstream'
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(attributes = {})
|
17
|
+
super(attributes)
|
18
|
+
raise ArgumentError, 'You must specify an upstream_id' unless self.upstream_id
|
19
|
+
end
|
20
|
+
|
21
|
+
def active?
|
22
|
+
self.weight > 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def save
|
26
|
+
create
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_or_update
|
30
|
+
raise NotImplementedError, 'Kong does not support updating targets, you must delete and re-create'
|
31
|
+
end
|
32
|
+
|
33
|
+
def update
|
34
|
+
raise NotImplementedError, 'Kong does not support updating targets, you must delete and re-create'
|
35
|
+
end
|
36
|
+
|
37
|
+
def use_upstream_end_point
|
38
|
+
self.api_end_point = "/upstreams/#{self.upstream_id}#{self.class::API_END_POINT}" if self.upstream_id
|
39
|
+
end
|
40
|
+
|
41
|
+
# Get Upstream resource
|
42
|
+
# @return [Kong::Upstream]
|
43
|
+
def upstream
|
44
|
+
@upstream ||= Upstream.find(self.upstream_id)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Set Upstream resource
|
48
|
+
# @param [Kong::Upstream] upstream
|
49
|
+
def upstream=(upstream)
|
50
|
+
@upstream = upstream
|
51
|
+
self.upstream_id = upstream.id
|
52
|
+
end
|
53
|
+
|
54
|
+
# Set Upstream id
|
55
|
+
# @param [String] id
|
56
|
+
def upstream_id=(id)
|
57
|
+
super(id)
|
58
|
+
use_upstream_end_point
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Kong
|
2
|
+
class Upstream
|
3
|
+
include Base
|
4
|
+
|
5
|
+
ATTRIBUTE_NAMES = %w(id name slots orderlist).freeze
|
6
|
+
API_END_POINT = '/upstreams/'.freeze
|
7
|
+
|
8
|
+
##
|
9
|
+
# @return [Array<Kong::Target>]
|
10
|
+
def targets
|
11
|
+
targets = []
|
12
|
+
json_data = Client.instance.get("#{API_END_POINT}#{self.id}/targets")
|
13
|
+
|
14
|
+
if json_data['data']
|
15
|
+
json_data['data'].each do |target_data|
|
16
|
+
target = Target.new(target_data)
|
17
|
+
targets << target if target.active?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
targets
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/kong/version.rb
CHANGED
data/lib/kong.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Target do
|
4
|
+
let(:upstream_id) { '1234' }
|
5
|
+
|
6
|
+
let(:valid_attribute_names) do
|
7
|
+
%w(id upstream_id target weight)
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { described_class.new(upstream_id: upstream_id) }
|
11
|
+
|
12
|
+
context 'without an upstream_id' do
|
13
|
+
it 'raises an ArgumentError' do
|
14
|
+
expect { described_class.new }
|
15
|
+
.to raise_error(ArgumentError)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'ATTRIBUTE_NAMES' do
|
20
|
+
it 'contains valid names' do
|
21
|
+
expect(subject.class::ATTRIBUTE_NAMES).to eq(valid_attribute_names)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'API_END_POINT' do
|
26
|
+
it 'contains valid end point' do
|
27
|
+
expect(subject.class::API_END_POINT).to eq('/targets/')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#init_attributes' do
|
32
|
+
it 'uses the correct api end point if the upstream_id is present' do
|
33
|
+
expect(subject.api_end_point).to eq("/upstreams/#{upstream_id}/targets/")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.upstream' do
|
38
|
+
it 'requests the attached Upstream' do
|
39
|
+
expect(Kong::Upstream).to receive(:find).with(upstream_id)
|
40
|
+
subject.upstream
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.active?' do
|
45
|
+
it 'returns true if the weight is > 0' do
|
46
|
+
target1 = described_class.new(upstream_id: upstream_id, target: 'google.com', weight: 100)
|
47
|
+
target2 = described_class.new(upstream_id: upstream_id, target: 'google.com', weight: 0)
|
48
|
+
|
49
|
+
expect(target1).to be_active
|
50
|
+
expect(target2).to_not be_active
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe Kong::Upstream do
|
4
|
+
let(:valid_attribute_names) do
|
5
|
+
%w(id name slots orderlist)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'ATTRIBUTE_NAMES' do
|
9
|
+
it 'contains valid names' do
|
10
|
+
expect(subject.class::ATTRIBUTE_NAMES).to eq(valid_attribute_names)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'API_END_POINT' do
|
15
|
+
it 'contains a valid end point' do
|
16
|
+
expect(subject.class::API_END_POINT).to eq('/upstreams/')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '.targets' do
|
21
|
+
it 'requests targets attached to the Upstream' do
|
22
|
+
subject.id = '12345'
|
23
|
+
|
24
|
+
expect(Kong::Client.instance)
|
25
|
+
.to receive(:get).with("/upstreams/12345/targets")
|
26
|
+
.and_return({
|
27
|
+
'data' => [{ 'upstream_id' => 12345, 'target' => 'google.com:80', 'weight' => 100 }],
|
28
|
+
'total' => 1
|
29
|
+
})
|
30
|
+
|
31
|
+
targets = subject.targets
|
32
|
+
|
33
|
+
expect(targets.size).to eq(1)
|
34
|
+
expect(targets.first).to be_a(Kong::Target)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kong
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lauri Nevala
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -85,6 +85,8 @@ files:
|
|
85
85
|
- lib/kong/oauth_app.rb
|
86
86
|
- lib/kong/plugin.rb
|
87
87
|
- lib/kong/server.rb
|
88
|
+
- lib/kong/target.rb
|
89
|
+
- lib/kong/upstream.rb
|
88
90
|
- lib/kong/version.rb
|
89
91
|
- spec/kong/acl_spec.rb
|
90
92
|
- spec/kong/api_spec.rb
|
@@ -97,6 +99,8 @@ files:
|
|
97
99
|
- spec/kong/oauth_app_spec.rb
|
98
100
|
- spec/kong/plugin_spec.rb
|
99
101
|
- spec/kong/server_spec.rb
|
102
|
+
- spec/kong/target_spec.rb
|
103
|
+
- spec/kong/upstream_spec.rb
|
100
104
|
- spec/spec_helper.rb
|
101
105
|
- tasks/rspec.rake
|
102
106
|
homepage: https://github.com/kontena/kong-client-ruby
|
@@ -119,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
123
|
version: '0'
|
120
124
|
requirements: []
|
121
125
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.6.12
|
123
127
|
signing_key:
|
124
128
|
specification_version: 4
|
125
129
|
summary: A Ruby client for the Kong API
|
@@ -135,4 +139,6 @@ test_files:
|
|
135
139
|
- spec/kong/oauth_app_spec.rb
|
136
140
|
- spec/kong/plugin_spec.rb
|
137
141
|
- spec/kong/server_spec.rb
|
142
|
+
- spec/kong/target_spec.rb
|
143
|
+
- spec/kong/upstream_spec.rb
|
138
144
|
- spec/spec_helper.rb
|