kuby-linode 0.2.0 → 0.4.0
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 +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +8 -6
- data/kuby-linode.gemspec +0 -1
- data/lib/kuby/linode/client.rb +38 -35
- data/lib/kuby/linode/config.rb +7 -0
- data/lib/kuby/linode/provider.rb +12 -7
- data/lib/kuby/linode/version.rb +1 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ef921c80cb878286577fc739b1f7251ca2f65e902ed235b9686e20f8efb9477
|
4
|
+
data.tar.gz: 3e4699bb0037b9698650c090ad0065d6bdd76717e03616803c1670de09b7bda4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a7bc044c46d8af896bae55f0a9085d2a300a085bb6c0e7f960416e8cef5d7e23e1fb67985d2b2ba0e415a5ffc1441a2199149f82e9850384d54a694fddadc83
|
7
|
+
data.tar.gz: 50cfd0daf6a9c20c641898fcd78dc0e227832eebb57b52e9aa691211ee04087b63e5004a91db77fb2804922c4622659800a39379092c5853bd8e607a9307c5e2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## 0.4.0
|
2
|
+
* Remove Faraday dependency.
|
3
|
+
|
4
|
+
## 0.3.2
|
5
|
+
* Add a unique hash of the configuration options to the kubeconfig path.
|
6
|
+
* Update README with new environment syntax.
|
7
|
+
* Use `linode-block-storage-retain` storage class to prevent losing block storage volumes when PVCs are deleted.
|
8
|
+
|
9
|
+
## 0.3.1
|
10
|
+
* Avoid `instance_eval`ing a `nil` block during configuration.
|
11
|
+
|
12
|
+
## 0.3.0
|
13
|
+
* Accept `environment` instead of `definition` instances.
|
14
|
+
|
1
15
|
## 0.2.0
|
2
16
|
* Remove dependency on rails app.
|
3
17
|
* Refresh kubeconfig in more places.
|
data/README.md
CHANGED
@@ -13,14 +13,16 @@ All providers adhere to a specific interface, meaning you can swap out one provi
|
|
13
13
|
Enable the Linode provider like so:
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
Kuby.define(
|
17
|
-
|
16
|
+
Kuby.define('MyApp') do
|
17
|
+
environment(:production) do
|
18
|
+
kubernetes do
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
provider :linode do
|
21
|
+
access_token 'my-linode-access-token'
|
22
|
+
cluster_id 'my-cluster-id'
|
23
|
+
end
|
23
24
|
|
25
|
+
end
|
24
26
|
end
|
25
27
|
end
|
26
28
|
```
|
data/kuby-linode.gemspec
CHANGED
data/lib/kuby/linode/client.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'base64'
|
2
|
-
require '
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
3
4
|
|
4
5
|
module Kuby
|
5
6
|
module Linode
|
@@ -24,31 +25,40 @@ module Kuby
|
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
28
|
+
class BearerAuth
|
29
|
+
attr_reader :access_token
|
30
|
+
|
31
|
+
def initialize(access_token:)
|
32
|
+
@access_token = access_token
|
33
|
+
end
|
34
|
+
|
35
|
+
def make_get(path)
|
36
|
+
Net::HTTP::Get.new(path).tap do |request|
|
37
|
+
request['Authorization'] = "Bearer #{access_token}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
27
42
|
class Client
|
28
43
|
API_URL = 'https://api.linode.com'.freeze
|
29
44
|
KUBECONFIG_PATH = '/v4/lke/clusters/%{cluster_id}/kubeconfig'.freeze
|
30
45
|
|
31
46
|
def self.create(access_token:)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
new(
|
41
|
-
Faraday.new(options) do |faraday|
|
42
|
-
faraday.request(:retry, max: 3)
|
43
|
-
faraday.adapter(:net_http)
|
44
|
-
end
|
45
|
-
)
|
47
|
+
uri = URI(API_URL)
|
48
|
+
|
49
|
+
connection = Net::HTTP.new(uri.host, uri.port).tap do |http|
|
50
|
+
http.use_ssl = true if uri.scheme == 'https'
|
51
|
+
end
|
52
|
+
|
53
|
+
auth = BearerAuth.new(access_token: access_token)
|
54
|
+
new(connection, auth)
|
46
55
|
end
|
47
56
|
|
48
|
-
attr_reader :connection
|
57
|
+
attr_reader :connection, :auth
|
49
58
|
|
50
|
-
def initialize(connection)
|
59
|
+
def initialize(connection, auth)
|
51
60
|
@connection = connection
|
61
|
+
@auth = auth
|
52
62
|
end
|
53
63
|
|
54
64
|
def kubeconfig(cluster_id)
|
@@ -58,32 +68,25 @@ module Kuby
|
|
58
68
|
|
59
69
|
private
|
60
70
|
|
61
|
-
def
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
response = get(url, params)
|
71
|
+
def get_json(path)
|
72
|
+
request = auth.make_get(path)
|
73
|
+
request['Accept'] = 'application/json'
|
74
|
+
response = connection.request(request)
|
75
|
+
potentially_raise_error!(response)
|
67
76
|
JSON.parse(response.body)
|
68
77
|
end
|
69
78
|
|
70
|
-
def act(verb, *args)
|
71
|
-
connection.send(verb, *args).tap do |response|
|
72
|
-
potentially_raise_error!(response)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
79
|
def potentially_raise_error!(response)
|
77
|
-
case response.
|
80
|
+
case response.code.to_i
|
78
81
|
when 401
|
79
|
-
raise UnauthorizedError, "401 Unauthorized: #{response.
|
82
|
+
raise UnauthorizedError, "401 Unauthorized: #{response.message}"
|
80
83
|
when 404
|
81
|
-
raise NotFoundError, "404 Not Found: #{response.
|
84
|
+
raise NotFoundError, "404 Not Found: #{response.message}"
|
82
85
|
else
|
83
86
|
if failure_response?(response)
|
84
87
|
raise ApiError.new(
|
85
|
-
"HTTP #{response.
|
86
|
-
response.
|
88
|
+
"HTTP #{response.code}: #{response.message}, body: #{response.body}",
|
89
|
+
response.code
|
87
90
|
)
|
88
91
|
end
|
89
92
|
end
|
@@ -91,7 +94,7 @@ module Kuby
|
|
91
94
|
|
92
95
|
def failure_response?(response)
|
93
96
|
data = JSON.parse(response.body) rescue {}
|
94
|
-
(response.
|
97
|
+
(response.code.to_i / 100) != 2 || data['message'] == 'failure'
|
95
98
|
end
|
96
99
|
end
|
97
100
|
end
|
data/lib/kuby/linode/config.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'kube-dsl'
|
2
|
+
require 'digest'
|
2
3
|
|
3
4
|
module Kuby
|
4
5
|
module Linode
|
@@ -6,6 +7,12 @@ module Kuby
|
|
6
7
|
extend ::KubeDSL::ValueFields
|
7
8
|
|
8
9
|
value_fields :access_token, :cluster_id
|
10
|
+
|
11
|
+
def hash_value
|
12
|
+
Digest::SHA256.hexdigest(
|
13
|
+
[access_token, cluster_id].join(':')
|
14
|
+
)
|
15
|
+
end
|
9
16
|
end
|
10
17
|
end
|
11
18
|
end
|
data/lib/kuby/linode/provider.rb
CHANGED
@@ -5,17 +5,18 @@ module Kuby
|
|
5
5
|
module Linode
|
6
6
|
class Provider < Kuby::Kubernetes::Provider
|
7
7
|
KUBECONFIG_EXPIRATION = 7 * 24 * 60 * 60 # 7 days
|
8
|
-
STORAGE_CLASS_NAME = 'linode-block-storage'.freeze
|
8
|
+
STORAGE_CLASS_NAME = 'linode-block-storage-retain'.freeze
|
9
9
|
|
10
10
|
attr_reader :config
|
11
11
|
|
12
12
|
def configure(&block)
|
13
|
-
config.instance_eval(&block)
|
13
|
+
config.instance_eval(&block) if block
|
14
14
|
end
|
15
15
|
|
16
16
|
def kubeconfig_path
|
17
17
|
@kubeconfig_path ||= File.join(
|
18
|
-
kubeconfig_dir,
|
18
|
+
kubeconfig_dir,
|
19
|
+
"#{environment.app_name.downcase}-#{config.hash_value}-kubeconfig.yaml"
|
19
20
|
)
|
20
21
|
end
|
21
22
|
|
@@ -31,14 +32,18 @@ module Kuby
|
|
31
32
|
STORAGE_CLASS_NAME
|
32
33
|
end
|
33
34
|
|
35
|
+
def kubernetes_cli
|
36
|
+
@kubernetes_cli ||= ::KubernetesCLI.new(kubeconfig_path).tap do |cli|
|
37
|
+
cli.before_execute do
|
38
|
+
refresh_kubeconfig
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
34
43
|
private
|
35
44
|
|
36
45
|
def after_initialize
|
37
46
|
@config = Config.new
|
38
|
-
|
39
|
-
kubernetes_cli.before_execute do
|
40
|
-
refresh_kubeconfig
|
41
|
-
end
|
42
47
|
end
|
43
48
|
|
44
49
|
def client
|
data/lib/kuby/linode/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kuby-linode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cameron Dutro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: faraday
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.17'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.17'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: kube-dsl
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
60
|
- !ruby/object:Gem::Version
|
75
61
|
version: '0'
|
76
62
|
requirements: []
|
77
|
-
rubygems_version: 3.
|
63
|
+
rubygems_version: 3.2.22
|
78
64
|
signing_key:
|
79
65
|
specification_version: 4
|
80
66
|
summary: Linode provider for Kuby.
|