kubernetes-deploy 0.22.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
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