kubernetes-deploy 0.22.0 → 0.23.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 +8 -0
- data/CHANGELOG.md +16 -0
- data/README.md +32 -0
- data/exe/kubernetes-deploy +2 -15
- data/exe/kubernetes-render +32 -0
- data/kubernetes-deploy.gemspec +5 -3
- data/lib/kubernetes-deploy.rb +5 -3
- data/lib/kubernetes-deploy/cluster_resource_discovery.rb +34 -0
- data/lib/kubernetes-deploy/container_logs.rb +25 -13
- data/lib/kubernetes-deploy/deploy_task.rb +68 -50
- data/lib/kubernetes-deploy/errors.rb +1 -0
- data/lib/kubernetes-deploy/formatted_logger.rb +16 -2
- data/lib/kubernetes-deploy/kubeclient_builder/google_friendly_config.rb +4 -6
- data/lib/kubernetes-deploy/kubectl.rb +20 -9
- data/lib/kubernetes-deploy/kubernetes_resource.rb +5 -6
- data/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb +3 -4
- data/lib/kubernetes-deploy/kubernetes_resource/daemon_set.rb +4 -5
- data/lib/kubernetes-deploy/kubernetes_resource/deployment.rb +7 -8
- data/lib/kubernetes-deploy/kubernetes_resource/memcached.rb +4 -5
- data/lib/kubernetes-deploy/kubernetes_resource/pod.rb +7 -5
- data/lib/kubernetes-deploy/kubernetes_resource/pod_set_base.rb +12 -6
- data/lib/kubernetes-deploy/kubernetes_resource/redis.rb +5 -6
- data/lib/kubernetes-deploy/kubernetes_resource/replica_set.rb +23 -5
- data/lib/kubernetes-deploy/kubernetes_resource/role.rb +22 -0
- data/lib/kubernetes-deploy/kubernetes_resource/service.rb +8 -4
- data/lib/kubernetes-deploy/kubernetes_resource/stateful_set.rb +2 -3
- data/lib/kubernetes-deploy/oj.rb +4 -0
- data/lib/kubernetes-deploy/options_helper.rb +27 -0
- data/lib/kubernetes-deploy/remote_logs.rb +10 -4
- data/lib/kubernetes-deploy/render_task.rb +119 -0
- data/lib/kubernetes-deploy/renderer.rb +1 -1
- data/lib/kubernetes-deploy/resource_cache.rb +64 -0
- data/lib/kubernetes-deploy/resource_watcher.rb +27 -6
- data/lib/kubernetes-deploy/restart_task.rb +5 -6
- data/lib/kubernetes-deploy/runner_task.rb +6 -10
- data/lib/kubernetes-deploy/statsd.rb +60 -7
- data/lib/kubernetes-deploy/template_discovery.rb +15 -0
- data/lib/kubernetes-deploy/version.rb +1 -1
- data/pull_request_template.md +8 -0
- metadata +47 -5
- data/lib/kubernetes-deploy/resource_discovery.rb +0 -19
- data/lib/kubernetes-deploy/sync_mediator.rb +0 -80
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KubernetesDeploy
|
4
|
+
class TemplateDiscovery
|
5
|
+
def initialize(template_dir)
|
6
|
+
@template_dir = template_dir
|
7
|
+
end
|
8
|
+
|
9
|
+
def templates
|
10
|
+
Dir.foreach(@template_dir).select do |filename|
|
11
|
+
filename.end_with?(".yml.erb", ".yml", ".yaml", ".yaml.erb")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kubernetes-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.23.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Verey
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-12-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -88,6 +88,9 @@ dependencies:
|
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '2.3'
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.3.2
|
91
94
|
type: :runtime
|
92
95
|
prerelease: false
|
93
96
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -95,6 +98,37 @@ dependencies:
|
|
95
98
|
- - "~>"
|
96
99
|
- !ruby/object:Gem::Version
|
97
100
|
version: '2.3'
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.3.2
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: oj
|
106
|
+
requirement: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.7'
|
111
|
+
type: :runtime
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.7'
|
118
|
+
- !ruby/object:Gem::Dependency
|
119
|
+
name: concurrent-ruby
|
120
|
+
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.1'
|
125
|
+
type: :runtime
|
126
|
+
prerelease: false
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.1'
|
98
132
|
- !ruby/object:Gem::Dependency
|
99
133
|
name: bundler
|
100
134
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +218,7 @@ email:
|
|
184
218
|
- ops-accounts+shipit@shopify.com
|
185
219
|
executables:
|
186
220
|
- kubernetes-deploy
|
221
|
+
- kubernetes-render
|
187
222
|
- kubernetes-restart
|
188
223
|
- kubernetes-run
|
189
224
|
extensions: []
|
@@ -207,11 +242,13 @@ files:
|
|
207
242
|
- dev.yml
|
208
243
|
- dev/flamegraph-from-tests
|
209
244
|
- exe/kubernetes-deploy
|
245
|
+
- exe/kubernetes-render
|
210
246
|
- exe/kubernetes-restart
|
211
247
|
- exe/kubernetes-run
|
212
248
|
- kubernetes-deploy.gemspec
|
213
249
|
- lib/kubernetes-deploy.rb
|
214
250
|
- lib/kubernetes-deploy/bindings_parser.rb
|
251
|
+
- lib/kubernetes-deploy/cluster_resource_discovery.rb
|
215
252
|
- lib/kubernetes-deploy/concurrency.rb
|
216
253
|
- lib/kubernetes-deploy/container_logs.rb
|
217
254
|
- lib/kubernetes-deploy/deferred_summary_logging.rb
|
@@ -244,21 +281,26 @@ files:
|
|
244
281
|
- lib/kubernetes-deploy/kubernetes_resource/redis.rb
|
245
282
|
- lib/kubernetes-deploy/kubernetes_resource/replica_set.rb
|
246
283
|
- lib/kubernetes-deploy/kubernetes_resource/resource_quota.rb
|
284
|
+
- lib/kubernetes-deploy/kubernetes_resource/role.rb
|
247
285
|
- lib/kubernetes-deploy/kubernetes_resource/role_binding.rb
|
248
286
|
- lib/kubernetes-deploy/kubernetes_resource/service.rb
|
249
287
|
- lib/kubernetes-deploy/kubernetes_resource/service_account.rb
|
250
288
|
- lib/kubernetes-deploy/kubernetes_resource/stateful_set.rb
|
251
289
|
- lib/kubernetes-deploy/kubernetes_resource/statefulservice.rb
|
252
290
|
- lib/kubernetes-deploy/kubernetes_resource/topic.rb
|
291
|
+
- lib/kubernetes-deploy/oj.rb
|
292
|
+
- lib/kubernetes-deploy/options_helper.rb
|
253
293
|
- lib/kubernetes-deploy/remote_logs.rb
|
294
|
+
- lib/kubernetes-deploy/render_task.rb
|
254
295
|
- lib/kubernetes-deploy/renderer.rb
|
255
|
-
- lib/kubernetes-deploy/
|
296
|
+
- lib/kubernetes-deploy/resource_cache.rb
|
256
297
|
- lib/kubernetes-deploy/resource_watcher.rb
|
257
298
|
- lib/kubernetes-deploy/restart_task.rb
|
258
299
|
- lib/kubernetes-deploy/runner_task.rb
|
259
300
|
- lib/kubernetes-deploy/statsd.rb
|
260
|
-
- lib/kubernetes-deploy/
|
301
|
+
- lib/kubernetes-deploy/template_discovery.rb
|
261
302
|
- lib/kubernetes-deploy/version.rb
|
303
|
+
- pull_request_template.md
|
262
304
|
- screenshots/deploy-demo.gif
|
263
305
|
- screenshots/migrate-logs.png
|
264
306
|
- screenshots/missing-secret-fail.png
|
@@ -285,7 +327,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
327
|
version: '0'
|
286
328
|
requirements: []
|
287
329
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.6
|
330
|
+
rubygems_version: 2.7.6
|
289
331
|
signing_key:
|
290
332
|
specification_version: 4
|
291
333
|
summary: Kubernetes deploy scripts
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module KubernetesDeploy
|
4
|
-
class ResourceDiscovery
|
5
|
-
def initialize(namespace:, context:, logger:, namespace_tags:)
|
6
|
-
@namespace = namespace
|
7
|
-
@context = context
|
8
|
-
@logger = logger
|
9
|
-
@namespace_tags = namespace_tags
|
10
|
-
end
|
11
|
-
|
12
|
-
def crds(sync_mediator)
|
13
|
-
sync_mediator.get_all(CustomResourceDefinition.kind).map do |r_def|
|
14
|
-
CustomResourceDefinition.new(namespace: @namespace, context: @context, logger: @logger,
|
15
|
-
definition: r_def, statsd_tags: @namespace_tags)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module KubernetesDeploy
|
3
|
-
class SyncMediator
|
4
|
-
LARGE_BATCH_THRESHOLD = Concurrency::MAX_THREADS * 3
|
5
|
-
|
6
|
-
def initialize(namespace:, context:, logger:)
|
7
|
-
@namespace = namespace
|
8
|
-
@context = context
|
9
|
-
@logger = logger
|
10
|
-
clear_cache
|
11
|
-
end
|
12
|
-
|
13
|
-
def get_instance(kind, resource_name, raise_if_not_found: false)
|
14
|
-
unless @cache.key?(kind)
|
15
|
-
return request_instance(kind, resource_name, raise_if_not_found: raise_if_not_found)
|
16
|
-
end
|
17
|
-
|
18
|
-
cached_instance = @cache[kind].fetch(resource_name, {})
|
19
|
-
if cached_instance.blank? && raise_if_not_found
|
20
|
-
raise KubernetesDeploy::Kubectl::ResourceNotFoundError, "Resource does not exist (used cache for kind #{kind})"
|
21
|
-
end
|
22
|
-
cached_instance
|
23
|
-
end
|
24
|
-
|
25
|
-
def get_all(kind, selector = nil)
|
26
|
-
fetch_by_kind(kind) unless @cache.key?(kind)
|
27
|
-
instances = @cache.fetch(kind, {}).values
|
28
|
-
return instances unless selector
|
29
|
-
|
30
|
-
instances.select do |r|
|
31
|
-
labels = r.dig("metadata", "labels") || {}
|
32
|
-
labels >= selector
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def sync(resources)
|
37
|
-
clear_cache
|
38
|
-
|
39
|
-
if resources.count > LARGE_BATCH_THRESHOLD
|
40
|
-
dependencies = resources.map(&:class).uniq.flat_map do |c|
|
41
|
-
c::SYNC_DEPENDENCIES if c.const_defined?('SYNC_DEPENDENCIES')
|
42
|
-
end
|
43
|
-
kinds = (resources.map(&:kubectl_resource_type) + dependencies).compact.uniq
|
44
|
-
kinds.each { |kind| fetch_by_kind(kind) }
|
45
|
-
end
|
46
|
-
|
47
|
-
KubernetesDeploy::Concurrency.split_across_threads(resources) do |r|
|
48
|
-
r.sync(dup)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def kubectl
|
53
|
-
@kubectl ||= Kubectl.new(namespace: @namespace, context: @context, logger: @logger, log_failure_by_default: false)
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def clear_cache
|
59
|
-
@cache = {}
|
60
|
-
end
|
61
|
-
|
62
|
-
def request_instance(kind, iname, raise_if_not_found:)
|
63
|
-
raw_json, _err, st = kubectl.run("get", kind, iname, "-a", "--output=json",
|
64
|
-
raise_if_not_found: raise_if_not_found)
|
65
|
-
st.success? ? JSON.parse(raw_json) : {}
|
66
|
-
end
|
67
|
-
|
68
|
-
def fetch_by_kind(kind)
|
69
|
-
raw_json, _, st = kubectl.run("get", kind, "-a", "--output=json")
|
70
|
-
return unless st.success?
|
71
|
-
|
72
|
-
instances = {}
|
73
|
-
JSON.parse(raw_json)["items"].each do |resource|
|
74
|
-
resource_name = resource.dig("metadata", "name")
|
75
|
-
instances[resource_name] = resource
|
76
|
-
end
|
77
|
-
@cache[kind] = instances
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|