resque-kubernetes 2.0.0 → 3.0.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 +5 -5
- data/.rubocop.yml +9 -5
- data/.ruby-version +1 -1
- data/Appraisals +1 -5
- data/CHANGELOG.md +9 -0
- data/Gemfile +8 -0
- data/README.md +1 -1
- data/gemfiles/kubeclient_4.gemfile +9 -1
- data/lib/resque/kubernetes/configurable.rb +2 -0
- data/lib/resque/kubernetes/context/kubectl.rb +13 -5
- data/lib/resque/kubernetes/context/well_known.rb +10 -4
- data/lib/resque/kubernetes/job.rb +1 -0
- data/lib/resque/kubernetes/jobs_manager.rb +15 -17
- data/lib/resque/kubernetes/version.rb +1 -1
- data/resque-kubernetes.gemspec +3 -9
- metadata +11 -122
- data/gemfiles/kubeclient_3.gemfile +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c5705807fc4c023c6d41f4ea9de1ead2e365e1a7a4153b9c0bbf507a775c17ef
|
4
|
+
data.tar.gz: 80b8d23e4914a5d59308e46e3486b8ee8935f8da0661ecf692e4a33ad5d3075f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a406b7260bbb127425fa7522bb7ab579594236190f88a5a992071161da966b4a96d3a12dd442fea0a5fb4134d515a2e044b0728303858dea3c9bdab593c22b77
|
7
|
+
data.tar.gz: 71e8a8a42de666cd4a43ab5ba311349d07311bc956733c9a464203118bd098b7ab4b36928e7e800087b7efd7258b4b444f26958ccd84f509433c365619b47460
|
data/.rubocop.yml
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
-
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
SuggestExtensions: false
|
4
|
+
|
5
|
+
Style/Documentation:
|
2
6
|
Exclude:
|
3
7
|
- "**/railtie.rb"
|
4
8
|
- "spec/**/*"
|
5
9
|
|
6
10
|
Style/StringLiterals:
|
7
11
|
EnforcedStyle: double_quotes
|
8
|
-
|
12
|
+
Layout/LineLength:
|
9
13
|
Max: 120
|
10
|
-
Layout/
|
14
|
+
Layout/HashAlignment:
|
11
15
|
EnforcedHashRocketStyle: table
|
12
16
|
EnforcedColonStyle: table
|
13
17
|
Layout/SpaceInsideHashLiteralBraces:
|
@@ -16,9 +20,9 @@ Style/RaiseArgs:
|
|
16
20
|
EnforcedStyle: compact
|
17
21
|
Style/EmptyMethod:
|
18
22
|
EnforcedStyle: expanded
|
19
|
-
Layout/
|
23
|
+
Layout/FirstArrayElementIndentation:
|
20
24
|
IndentationWidth: 4
|
21
|
-
Layout/
|
25
|
+
Layout/FirstHashElementIndentation:
|
22
26
|
IndentationWidth: 4
|
23
27
|
Style/ConditionalAssignment:
|
24
28
|
EnforcedStyle: assign_inside_condition
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.5
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# V3.0.0
|
2
|
+
**Breaking Change:**
|
3
|
+
- Drop support for Ruby 2.7.
|
4
|
+
- Drop support for `kubeclient` 3.x.
|
5
|
+
|
6
|
+
**Changes:**
|
7
|
+
- Add support for Ruby 3.0.
|
8
|
+
- Requires `kubeclient` >= 4.9.3.
|
9
|
+
|
1
10
|
# V2.0.0
|
2
11
|
**Breaking Change:**
|
3
12
|
- The `environments` configuration as been replaced by a more flexible `enabled` property.
|
data/Gemfile
CHANGED
@@ -4,3 +4,11 @@ source "https://rubygems.org"
|
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in resque-kubernetes.gemspec
|
6
6
|
gemspec
|
7
|
+
|
8
|
+
gem "appraisal"
|
9
|
+
gem "bundler", "~> 2.0"
|
10
|
+
gem "bundler-audit", "~> 0"
|
11
|
+
gem "googleauth", "~> 0.6"
|
12
|
+
gem "rake", "~> 12.3"
|
13
|
+
gem "rspec", "~> 3.7"
|
14
|
+
gem "rubocop", "~> 1.50"
|
data/README.md
CHANGED
@@ -212,7 +212,7 @@ The gem will automatically connect to the Kubernetes server in the following cas
|
|
212
212
|
installed
|
213
213
|
|
214
214
|
There are many other ways to connect and you can do so by providing your own
|
215
|
-
[configured `kubeclient`](https://github.com/
|
215
|
+
[configured `kubeclient`](https://github.com/ManageIQ/kubeclient#usage):
|
216
216
|
|
217
217
|
```ruby
|
218
218
|
# config/initializers/resque-kubernetes.rb
|
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gem "kubeclient", "4.
|
5
|
+
gem "kubeclient", "4.11.0"
|
6
6
|
|
7
7
|
gemspec path: "../"
|
8
|
+
|
9
|
+
gem "appraisal"
|
10
|
+
gem "bundler", "~> 2.0"
|
11
|
+
gem "bundler-audit", "~> 0"
|
12
|
+
gem "googleauth", "~> 0.6"
|
13
|
+
gem "rake", "~> 12.3"
|
14
|
+
gem "rspec", "~> 3.7"
|
15
|
+
gem "rubocop", "~> 1.50"
|
@@ -12,6 +12,7 @@ module Resque
|
|
12
12
|
#
|
13
13
|
# name: The name of the setting.
|
14
14
|
# default: A default value for the setting. (Optional)
|
15
|
+
# rubocop: disable Style/ClassVars
|
15
16
|
def define_setting(name, default = nil)
|
16
17
|
class_variable_set("@@#{name}", default)
|
17
18
|
|
@@ -23,6 +24,7 @@ module Resque
|
|
23
24
|
class_variable_get("@@#{name}")
|
24
25
|
end
|
25
26
|
end
|
27
|
+
# rubocop: enable Style/ClassVars
|
26
28
|
|
27
29
|
private
|
28
30
|
|
@@ -9,32 +9,40 @@ module Resque
|
|
9
9
|
File.exist?(kubeconfig)
|
10
10
|
end
|
11
11
|
|
12
|
+
# rubocop: disable Metrics/MethodLength
|
12
13
|
def context
|
13
14
|
config = Kubeclient::Config.read(kubeconfig)
|
14
15
|
|
15
|
-
|
16
|
-
config.context.api_endpoint,
|
17
|
-
config.context.api_version,
|
18
|
-
config.context.namespace,
|
16
|
+
options = {
|
19
17
|
auth_options: auth_options(config),
|
20
18
|
ssl_options: config.context.ssl_options
|
19
|
+
}
|
20
|
+
|
21
|
+
Resque::Kubernetes::ContextFactory::Context.new(
|
22
|
+
config.context.api_endpoint,
|
23
|
+
config.context.api_version,
|
24
|
+
config.context.namespace,
|
25
|
+
options
|
21
26
|
)
|
22
27
|
end
|
28
|
+
# rubocop: enable Metrics/MethodLength
|
23
29
|
|
24
30
|
private
|
25
31
|
|
26
32
|
def kubeconfig
|
27
|
-
File.join(
|
33
|
+
File.join(Dir.home, ".kube", "config")
|
28
34
|
end
|
29
35
|
|
30
36
|
def auth_options(config)
|
31
37
|
options = config.context.auth_options
|
32
38
|
return options unless options.empty?
|
39
|
+
|
33
40
|
google_application_default_credentials
|
34
41
|
end
|
35
42
|
|
36
43
|
def google_application_default_credentials
|
37
44
|
return unless defined?(Google) && defined?(Google::Auth)
|
45
|
+
|
38
46
|
{bearer_token: Kubeclient::GoogleApplicationDefaultCredentials.token}
|
39
47
|
end
|
40
48
|
end
|
@@ -14,12 +14,16 @@ module Resque
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def context
|
17
|
-
|
18
|
-
"https://kubernetes.default.svc",
|
19
|
-
"v1",
|
20
|
-
namespace,
|
17
|
+
options = {
|
21
18
|
auth_options: {bearer_token_file: TOKEN_FILE},
|
22
19
|
ssl_options: ssl_options
|
20
|
+
}
|
21
|
+
|
22
|
+
Resque::Kubernetes::ContextFactory::Context.new(
|
23
|
+
"https://kubernetes.default.svc",
|
24
|
+
"v1",
|
25
|
+
namespace,
|
26
|
+
options
|
23
27
|
)
|
24
28
|
end
|
25
29
|
|
@@ -27,11 +31,13 @@ module Resque
|
|
27
31
|
|
28
32
|
def namespace
|
29
33
|
return nil unless File.exist?(NAMESPACE_FILE)
|
34
|
+
|
30
35
|
File.read(NAMESPACE_FILE)
|
31
36
|
end
|
32
37
|
|
33
38
|
def ssl_options
|
34
39
|
return {} unless File.exist?(CA_FILE)
|
40
|
+
|
35
41
|
{ca_file: CA_FILE}
|
36
42
|
end
|
37
43
|
end
|
@@ -20,21 +20,17 @@ module Resque
|
|
20
20
|
|
21
21
|
def reap_finished_jobs
|
22
22
|
finished_jobs.each do |job|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
raise unless e.error_code == 404
|
27
|
-
end
|
23
|
+
jobs_client.delete_job(job.metadata.name, job.metadata.namespace)
|
24
|
+
rescue KubeException => e
|
25
|
+
raise unless e.error_code == 404
|
28
26
|
end
|
29
27
|
end
|
30
28
|
|
31
29
|
def reap_finished_pods
|
32
30
|
finished_pods.each do |pod|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
raise unless e.error_code == 404
|
37
|
-
end
|
31
|
+
pods_client.delete_pod(pod.metadata.name, pod.metadata.namespace)
|
32
|
+
rescue KubeException => e
|
33
|
+
raise unless e.error_code == 404
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
@@ -63,6 +59,7 @@ module Resque
|
|
63
59
|
|
64
60
|
def client(scope)
|
65
61
|
return RetriableClient.new(Resque::Kubernetes.kubeclient) if Resque::Kubernetes.kubeclient
|
62
|
+
|
66
63
|
client = build_client(scope)
|
67
64
|
RetriableClient.new(client) if client
|
68
65
|
end
|
@@ -70,18 +67,19 @@ module Resque
|
|
70
67
|
def build_client(scope)
|
71
68
|
context = ContextFactory.context
|
72
69
|
return unless context
|
70
|
+
|
73
71
|
@default_namespace = context.namespace if context.namespace
|
74
72
|
|
75
|
-
Kubeclient::Client.new(context.endpoint + scope, context.version, context.options)
|
73
|
+
Kubeclient::Client.new(context.endpoint + scope, context.version, **context.options)
|
76
74
|
end
|
77
75
|
|
78
76
|
def finished_jobs
|
79
|
-
resque_jobs = jobs_client.get_jobs(label_selector: "resque-kubernetes=job")
|
77
|
+
resque_jobs = jobs_client.get_jobs({label_selector: "resque-kubernetes=job"})
|
80
78
|
resque_jobs.select { |job| job.spec.completions == job.status.succeeded }
|
81
79
|
end
|
82
80
|
|
83
81
|
def finished_pods
|
84
|
-
resque_jobs = pods_client.get_pods(label_selector: "resque-kubernetes=pod")
|
82
|
+
resque_jobs = pods_client.get_pods({label_selector: "resque-kubernetes=pod"})
|
85
83
|
resque_jobs.select do |pod|
|
86
84
|
pod.status.phase == "Succeeded" && pod.status.containerStatuses.all? do |status|
|
87
85
|
status.state.terminated.reason == "Completed"
|
@@ -90,10 +88,10 @@ module Resque
|
|
90
88
|
end
|
91
89
|
|
92
90
|
def jobs_maxed?(name, namespace)
|
93
|
-
resque_jobs = jobs_client.get_jobs(
|
94
|
-
|
95
|
-
|
96
|
-
|
91
|
+
resque_jobs = jobs_client.get_jobs({
|
92
|
+
label_selector: "resque-kubernetes=job,resque-kubernetes-group=#{name}",
|
93
|
+
namespace: namespace
|
94
|
+
})
|
97
95
|
running = resque_jobs.reject { |job| job.spec.completions == job.status.succeeded }
|
98
96
|
running.size >= owner.max_workers
|
99
97
|
end
|
data/resque-kubernetes.gemspec
CHANGED
@@ -23,16 +23,10 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
|
-
spec.
|
27
|
-
spec.add_development_dependency "bundler", "~> 1.16"
|
28
|
-
spec.add_development_dependency "bundler-audit", "~> 0"
|
29
|
-
spec.add_development_dependency "googleauth", "~> 0.6"
|
30
|
-
spec.add_development_dependency "rake", "~> 12.3"
|
31
|
-
spec.add_development_dependency "rspec", "~> 3.7"
|
32
|
-
# Pinned less than 0.56.0 until this is resolved: https://github.com/rubocop-hq/rubocop/issues/5975
|
33
|
-
spec.add_development_dependency "rubocop", "~> 0.52", ">= 0.52.1", "< 0.56.0"
|
26
|
+
spec.required_ruby_version = ">= 3.0"
|
34
27
|
|
35
|
-
spec.add_dependency "kubeclient", ">=
|
28
|
+
spec.add_dependency "kubeclient", ">= 4.9.3", "< 5.0"
|
36
29
|
spec.add_dependency "resque", ">= 1.26"
|
37
30
|
spec.add_dependency "retriable", "~> 3.0"
|
31
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
38
32
|
end
|
metadata
CHANGED
@@ -1,132 +1,22 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-kubernetes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Wadsack
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: appraisal
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.16'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.16'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: bundler-audit
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: googleauth
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.6'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.6'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '12.3'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '12.3'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '3.7'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '3.7'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rubocop
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.52'
|
104
|
-
- - ">="
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: 0.52.1
|
107
|
-
- - "<"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 0.56.0
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0.52'
|
117
|
-
- - ">="
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: 0.52.1
|
120
|
-
- - "<"
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 0.56.0
|
123
13
|
- !ruby/object:Gem::Dependency
|
124
14
|
name: kubeclient
|
125
15
|
requirement: !ruby/object:Gem::Requirement
|
126
16
|
requirements:
|
127
17
|
- - ">="
|
128
18
|
- !ruby/object:Gem::Version
|
129
|
-
version:
|
19
|
+
version: 4.9.3
|
130
20
|
- - "<"
|
131
21
|
- !ruby/object:Gem::Version
|
132
22
|
version: '5.0'
|
@@ -136,7 +26,7 @@ dependencies:
|
|
136
26
|
requirements:
|
137
27
|
- - ">="
|
138
28
|
- !ruby/object:Gem::Version
|
139
|
-
version:
|
29
|
+
version: 4.9.3
|
140
30
|
- - "<"
|
141
31
|
- !ruby/object:Gem::Version
|
142
32
|
version: '5.0'
|
@@ -189,7 +79,6 @@ files:
|
|
189
79
|
- Rakefile
|
190
80
|
- bin/console
|
191
81
|
- bin/setup
|
192
|
-
- gemfiles/kubeclient_3.gemfile
|
193
82
|
- gemfiles/kubeclient_4.gemfile
|
194
83
|
- lib/resque/kubernetes.rb
|
195
84
|
- lib/resque/kubernetes/configurable.rb
|
@@ -207,8 +96,9 @@ files:
|
|
207
96
|
homepage: https://github.com/keylimetoolbox/resque-kubernetes
|
208
97
|
licenses:
|
209
98
|
- MIT
|
210
|
-
metadata:
|
211
|
-
|
99
|
+
metadata:
|
100
|
+
rubygems_mfa_required: 'true'
|
101
|
+
post_install_message:
|
212
102
|
rdoc_options: []
|
213
103
|
require_paths:
|
214
104
|
- lib
|
@@ -216,16 +106,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
106
|
requirements:
|
217
107
|
- - ">="
|
218
108
|
- !ruby/object:Gem::Version
|
219
|
-
version: '0'
|
109
|
+
version: '3.0'
|
220
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
221
111
|
requirements:
|
222
112
|
- - ">="
|
223
113
|
- !ruby/object:Gem::Version
|
224
114
|
version: '0'
|
225
115
|
requirements: []
|
226
|
-
|
227
|
-
|
228
|
-
signing_key:
|
116
|
+
rubygems_version: 3.2.33
|
117
|
+
signing_key:
|
229
118
|
specification_version: 4
|
230
119
|
summary: Run Resque Jobs as Kubernetes Jobs
|
231
120
|
test_files: []
|