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.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +8 -0
  3. data/CHANGELOG.md +16 -0
  4. data/README.md +32 -0
  5. data/exe/kubernetes-deploy +2 -15
  6. data/exe/kubernetes-render +32 -0
  7. data/kubernetes-deploy.gemspec +5 -3
  8. data/lib/kubernetes-deploy.rb +5 -3
  9. data/lib/kubernetes-deploy/cluster_resource_discovery.rb +34 -0
  10. data/lib/kubernetes-deploy/container_logs.rb +25 -13
  11. data/lib/kubernetes-deploy/deploy_task.rb +68 -50
  12. data/lib/kubernetes-deploy/errors.rb +1 -0
  13. data/lib/kubernetes-deploy/formatted_logger.rb +16 -2
  14. data/lib/kubernetes-deploy/kubeclient_builder/google_friendly_config.rb +4 -6
  15. data/lib/kubernetes-deploy/kubectl.rb +20 -9
  16. data/lib/kubernetes-deploy/kubernetes_resource.rb +5 -6
  17. data/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb +3 -4
  18. data/lib/kubernetes-deploy/kubernetes_resource/daemon_set.rb +4 -5
  19. data/lib/kubernetes-deploy/kubernetes_resource/deployment.rb +7 -8
  20. data/lib/kubernetes-deploy/kubernetes_resource/memcached.rb +4 -5
  21. data/lib/kubernetes-deploy/kubernetes_resource/pod.rb +7 -5
  22. data/lib/kubernetes-deploy/kubernetes_resource/pod_set_base.rb +12 -6
  23. data/lib/kubernetes-deploy/kubernetes_resource/redis.rb +5 -6
  24. data/lib/kubernetes-deploy/kubernetes_resource/replica_set.rb +23 -5
  25. data/lib/kubernetes-deploy/kubernetes_resource/role.rb +22 -0
  26. data/lib/kubernetes-deploy/kubernetes_resource/service.rb +8 -4
  27. data/lib/kubernetes-deploy/kubernetes_resource/stateful_set.rb +2 -3
  28. data/lib/kubernetes-deploy/oj.rb +4 -0
  29. data/lib/kubernetes-deploy/options_helper.rb +27 -0
  30. data/lib/kubernetes-deploy/remote_logs.rb +10 -4
  31. data/lib/kubernetes-deploy/render_task.rb +119 -0
  32. data/lib/kubernetes-deploy/renderer.rb +1 -1
  33. data/lib/kubernetes-deploy/resource_cache.rb +64 -0
  34. data/lib/kubernetes-deploy/resource_watcher.rb +27 -6
  35. data/lib/kubernetes-deploy/restart_task.rb +5 -6
  36. data/lib/kubernetes-deploy/runner_task.rb +6 -10
  37. data/lib/kubernetes-deploy/statsd.rb +60 -7
  38. data/lib/kubernetes-deploy/template_discovery.rb +15 -0
  39. data/lib/kubernetes-deploy/version.rb +1 -1
  40. data/pull_request_template.md +8 -0
  41. metadata +47 -5
  42. data/lib/kubernetes-deploy/resource_discovery.rb +0 -19
  43. 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
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module KubernetesDeploy
3
- VERSION = "0.22.0"
3
+ VERSION = "0.23.0"
4
4
  end
@@ -0,0 +1,8 @@
1
+ **What are you trying to accomplish with this PR?**
2
+ ...
3
+
4
+ **How is this accomplished?**
5
+ ...
6
+
7
+ **What could go wrong?**
8
+ ...
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.22.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-11-14 00:00:00.000000000 Z
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/resource_discovery.rb
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/sync_mediator.rb
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.14
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