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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2b02f5b7ceb4756e4c177d3e2cbddb01340e4483c445be7450022da2d0abe75
4
- data.tar.gz: d203e31153215b224a1fd7eb1b46edcabdf515da1074d8aa01c6451623fbadff
3
+ metadata.gz: 3ef921c80cb878286577fc739b1f7251ca2f65e902ed235b9686e20f8efb9477
4
+ data.tar.gz: 3e4699bb0037b9698650c090ad0065d6bdd76717e03616803c1670de09b7bda4
5
5
  SHA512:
6
- metadata.gz: 6fe8b16ab0a4d5d84f6782f7683df929c4a9655ce25bcd4295c1c84fb1ed230090a805b399898400405bb5ce1916a436137c880f559c7294d04c956f41ae6561
7
- data.tar.gz: d4e02a93bbc31e140922afe500d35645f3ee7fc427265f88ef59f9c8ae22189348bdcb8e1220962ed680ab72d709b449551196094ed12cfe4d83245e444bc627
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(:production) do
17
- kubernetes do
16
+ Kuby.define('MyApp') do
17
+ environment(:production) do
18
+ kubernetes do
18
19
 
19
- provider :linode do
20
- access_token 'my-linode-access-token'
21
- cluster_id 'my-cluster-id'
22
- end
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
@@ -12,7 +12,6 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.platform = Gem::Platform::RUBY
14
14
 
15
- s.add_dependency 'faraday', '~> 0.17'
16
15
  s.add_dependency 'kube-dsl', '~> 0.1'
17
16
 
18
17
  s.require_path = 'lib'
@@ -1,5 +1,6 @@
1
1
  require 'base64'
2
- require 'faraday'
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
- options = {
33
- url: API_URL,
34
- headers: {
35
- Accept: 'application/json',
36
- Authorization: "Bearer #{access_token}"
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 get(url, params = {})
62
- act(:get, url, params)
63
- end
64
-
65
- def get_json(url, params = {})
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.status
80
+ case response.code.to_i
78
81
  when 401
79
- raise UnauthorizedError, "401 Unauthorized: #{response.env.url}"
82
+ raise UnauthorizedError, "401 Unauthorized: #{response.message}"
80
83
  when 404
81
- raise NotFoundError, "404 Not Found: #{response.env.url}"
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.status}: #{response.env.url}, body: #{response.body}",
86
- response.status
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.status / 100) != 2 || data['message'] == 'failure'
97
+ (response.code.to_i / 100) != 2 || data['message'] == 'failure'
95
98
  end
96
99
  end
97
100
  end
@@ -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
@@ -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, "#{definition.app_name.downcase}-kubeconfig.yaml"
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
@@ -1,5 +1,5 @@
1
1
  module Kuby
2
2
  module Linode
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.4.0'.freeze
4
4
  end
5
5
  end
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.2.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: 2020-08-06 00:00:00.000000000 Z
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.1.4
63
+ rubygems_version: 3.2.22
78
64
  signing_key:
79
65
  specification_version: 4
80
66
  summary: Linode provider for Kuby.