kuber_kit 1.1.4 → 1.1.6

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -0
  3. data/README.md +2 -1
  4. data/kuber_kit.gemspec +3 -6
  5. data/lib/kuber_kit/actions/configuration_loader.rb +7 -1
  6. data/lib/kuber_kit/actions/kubectl_attacher.rb +7 -4
  7. data/lib/kuber_kit/actions/kubectl_logs.rb +7 -4
  8. data/lib/kuber_kit/actions/service_deployer.rb +33 -26
  9. data/lib/kuber_kit/actions/service_generator.rb +20 -0
  10. data/lib/kuber_kit/artifacts_sync/artifact_updater.rb +19 -9
  11. data/lib/kuber_kit/artifacts_sync/strategies/abstract.rb +9 -0
  12. data/lib/kuber_kit/artifacts_sync/strategies/git_updater.rb +46 -0
  13. data/lib/kuber_kit/artifacts_sync/strategies/null_updater.rb +12 -0
  14. data/lib/kuber_kit/cli.rb +29 -1
  15. data/lib/kuber_kit/configs.rb +3 -1
  16. data/lib/kuber_kit/container.rb +28 -4
  17. data/lib/kuber_kit/core/artifacts/abstract_artifact.rb +4 -0
  18. data/lib/kuber_kit/core/artifacts/git.rb +6 -1
  19. data/lib/kuber_kit/core/artifacts/local.rb +4 -0
  20. data/lib/kuber_kit/core/configuration.rb +10 -6
  21. data/lib/kuber_kit/core/configuration_definition.rb +30 -9
  22. data/lib/kuber_kit/core/configuration_factory.rb +3 -1
  23. data/lib/kuber_kit/core/context_helper/abstract_helper.rb +5 -0
  24. data/lib/kuber_kit/core/context_helper/base_helper.rb +1 -7
  25. data/lib/kuber_kit/core/context_helper/context_helper_factory.rb +3 -1
  26. data/lib/kuber_kit/core/context_helper/context_vars.rb +20 -4
  27. data/lib/kuber_kit/core/context_helper/local_context_helper.rb +14 -0
  28. data/lib/kuber_kit/core/context_helper/service_helper.rb +15 -1
  29. data/lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb +7 -0
  30. data/lib/kuber_kit/core/service.rb +8 -5
  31. data/lib/kuber_kit/core/service_definition.rb +16 -4
  32. data/lib/kuber_kit/core/service_factory.rb +2 -1
  33. data/lib/kuber_kit/defaults.rb +13 -4
  34. data/lib/kuber_kit/image_compiler/image_builder.rb +1 -1
  35. data/lib/kuber_kit/service_deployer/service_dependency_resolver.rb +1 -1
  36. data/lib/kuber_kit/service_deployer/strategies/helm.rb +41 -0
  37. data/lib/kuber_kit/service_deployer/strategies/kubernetes.rb +8 -2
  38. data/lib/kuber_kit/service_generator/action_handler.rb +16 -0
  39. data/lib/kuber_kit/service_generator/generator.rb +26 -0
  40. data/lib/kuber_kit/service_generator/strategies/abstract.rb +5 -0
  41. data/lib/kuber_kit/service_generator/strategies/helm.rb +33 -0
  42. data/lib/kuber_kit/service_generator/strategy_detector.rb +6 -0
  43. data/lib/kuber_kit/service_reader/reader.rb +2 -10
  44. data/lib/kuber_kit/shell/commands/docker_commands.rb +1 -1
  45. data/lib/kuber_kit/shell/commands/git_commands.rb +10 -0
  46. data/lib/kuber_kit/shell/commands/helm_commands.rb +42 -0
  47. data/lib/kuber_kit/shell/commands/kubectl_commands.rb +3 -2
  48. data/lib/kuber_kit/shell/local_shell.rb +1 -1
  49. data/lib/kuber_kit/shell_launcher/strategies/kubernetes.rb +1 -1
  50. data/lib/kuber_kit/template_reader/reader.rb +1 -0
  51. data/lib/kuber_kit/template_reader/renderer.rb +17 -0
  52. data/lib/kuber_kit/template_reader/strategies/artifact_file.rb +1 -0
  53. data/lib/kuber_kit/tools/logger_factory.rb +1 -1
  54. data/lib/kuber_kit/version.rb +1 -1
  55. data/lib/kuber_kit.rb +23 -3
  56. metadata +35 -10
  57. data/lib/kuber_kit/artifacts_sync/abstract_artifact_resolver.rb +0 -5
  58. data/lib/kuber_kit/artifacts_sync/git_artifact_resolver.rb +0 -31
  59. data/lib/kuber_kit/artifacts_sync/null_artifact_resolver.rb +0 -7
@@ -0,0 +1,42 @@
1
+ class KuberKit::Shell::Commands::HelmCommands
2
+ Contract KuberKit::Shell::AbstractShell, Or[String, ArrayOf[String]], KeywordArgs[
3
+ kubeconfig_path: Maybe[Or[
4
+ String, KuberKit::Core::ArtifactPath
5
+ ]],
6
+ namespace: Maybe[Or[Symbol, String]],
7
+ interactive: Optional[Bool],
8
+ ] => Any
9
+ def helm_run(shell, command_list, kubeconfig_path: nil, namespace: nil, interactive: false)
10
+ command_parts = []
11
+
12
+ if kubeconfig_path.is_a?(KuberKit::Core::ArtifactPath)
13
+ kubeconfig_path = artifact_path_resolver.call(kubeconfig_path)
14
+ end
15
+
16
+ if kubeconfig_path
17
+ command_parts << "KUBECONFIG=#{kubeconfig_path}"
18
+ end
19
+
20
+ command_parts << "helm"
21
+
22
+ if namespace
23
+ command_parts << "-n #{namespace}"
24
+ end
25
+
26
+ command_parts += Array(command_list).compact
27
+
28
+ if interactive
29
+ shell.interactive!(command_parts.join(" "))
30
+ else
31
+ shell.exec!(command_parts.join(" "))
32
+ end
33
+ end
34
+
35
+ def install(shell, release_name, chart_path, kubeconfig_path: nil, namespace: nil)
36
+ helm_run(shell, "install #{release_name} #{chart_path}", kubeconfig_path: kubeconfig_path, namespace: namespace)
37
+ end
38
+
39
+ def upgrade(shell, release_name, chart_path, kubeconfig_path: nil, namespace: nil)
40
+ helm_run(shell, "upgrade #{release_name} #{chart_path} --install", kubeconfig_path: kubeconfig_path, namespace: namespace)
41
+ end
42
+ end
@@ -39,8 +39,9 @@ class KuberKit::Shell::Commands::KubectlCommands
39
39
  end
40
40
  end
41
41
 
42
- def apply_file(shell, file_path, kubeconfig_path: nil, namespace: nil)
43
- kubectl_run(shell, "apply -f #{file_path}", kubeconfig_path: kubeconfig_path, namespace: namespace)
42
+ def apply_file(shell, file_path, kubeconfig_path: nil, namespace: nil, apply_command: nil)
43
+ apply_command ||= "apply"
44
+ kubectl_run(shell, "#{apply_command} -f #{file_path}", kubeconfig_path: kubeconfig_path, namespace: namespace)
44
45
  end
45
46
 
46
47
  def exec(shell, pod_name, command, args: nil, kubeconfig_path: nil, interactive: false, namespace: nil, entrypoint: nil)
@@ -138,7 +138,7 @@ class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
138
138
  def ensure_directory_exists(file_path)
139
139
  dir_path = File.dirname(file_path)
140
140
 
141
- unless Dir.exists?(dir_path)
141
+ unless Dir.exist?(dir_path)
142
142
  FileUtils.mkdir_p(dir_path)
143
143
  end
144
144
  end
@@ -26,6 +26,6 @@ class KuberKit::ShellLauncher::Strategies::Kubernetes < KuberKit::ShellLauncher:
26
26
  env_vars << "KUBER_KIT_CONFIGURATION=#{KuberKit.current_configuration.name}"
27
27
  end
28
28
 
29
- shell.replace!(env: ["KUBECONFIG=#{kubeconfig_path}", "KUBER_KIT_SHELL_CONFIGURATION=#{KuberKit.current_configuration.name}"])
29
+ shell.replace!(env: env_vars)
30
30
  end
31
31
  end
@@ -11,6 +11,7 @@ class KuberKit::TemplateReader::Reader
11
11
  @@readers[template_class] = template_reader
12
12
  end
13
13
 
14
+ Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Templates::AbstractTemplate => String
14
15
  def read(shell, template)
15
16
  reader = @@readers[template.class]
16
17
 
@@ -0,0 +1,17 @@
1
+ class KuberKit::TemplateReader::Renderer
2
+ include KuberKit::Import[
3
+ "core.template_store",
4
+ "preprocessing.text_preprocessor",
5
+ template_reader: "template_reader.reader"
6
+ ]
7
+
8
+
9
+ Contract KuberKit::Shell::AbstractShell, Symbol, KeywordArgs[
10
+ context_helper: KuberKit::Core::ContextHelper::AbstractHelper
11
+ ] => String
12
+ def call(shell, template_name, context_helper:)
13
+ template = template_store.get(template_name)
14
+ template_text = template_reader.read(shell, template)
15
+ text_preprocessor.compile(template_text, context_helper: context_helper)
16
+ end
17
+ end
@@ -3,6 +3,7 @@ class KuberKit::TemplateReader::Strategies::ArtifactFile < KuberKit::TemplateRea
3
3
  "core.artifact_store"
4
4
  ]
5
5
 
6
+ Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Templates::AbstractTemplate => String
6
7
  def read(shell, template)
7
8
  artifact = artifact_store.get(template.artifact_name)
8
9
 
@@ -45,7 +45,7 @@ class KuberKit::Tools::LoggerFactory
45
45
  private
46
46
  def prepare_log_file(file_path)
47
47
  dir_path = File.dirname(file_path)
48
- unless Dir.exists?(dir_path)
48
+ unless Dir.exist?(dir_path)
49
49
  FileUtils.mkdir_p(dir_path)
50
50
  end
51
51
  FileUtils.touch(file_path)
@@ -1,3 +1,3 @@
1
1
  module KuberKit
2
- VERSION = "1.1.4"
2
+ VERSION = "1.1.6"
3
3
  end
data/lib/kuber_kit.rb CHANGED
@@ -61,11 +61,13 @@ module KuberKit
61
61
  end
62
62
 
63
63
  module ContextHelper
64
+ autoload :AbstractHelper, 'core/context_helper/abstract_helper'
64
65
  autoload :BaseHelper, 'core/context_helper/base_helper'
65
66
  autoload :ImageHelper, 'core/context_helper/image_helper'
66
67
  autoload :ServiceHelper, 'core/context_helper/service_helper'
67
68
  autoload :ContextHelperFactory, 'core/context_helper/context_helper_factory'
68
69
  autoload :ContextVars, 'core/context_helper/context_vars'
70
+ autoload :LocalContextHelper, 'core/context_helper/local_context_helper'
69
71
  end
70
72
 
71
73
  module Registries
@@ -104,6 +106,7 @@ module KuberKit
104
106
  autoload :RsyncCommands, 'shell/commands/rsync_commands'
105
107
  autoload :KubectlCommands, 'shell/commands/kubectl_commands'
106
108
  autoload :SystemCommands, 'shell/commands/system_commands'
109
+ autoload :HelmCommands, 'shell/commands/helm_commands'
107
110
  end
108
111
  end
109
112
 
@@ -124,10 +127,13 @@ module KuberKit
124
127
  end
125
128
 
126
129
  module ArtifactsSync
127
- autoload :AbstractArtifactResolver, 'artifacts_sync/abstract_artifact_resolver'
128
130
  autoload :ArtifactUpdater, 'artifacts_sync/artifact_updater'
129
- autoload :GitArtifactResolver, 'artifacts_sync/git_artifact_resolver'
130
- autoload :NullArtifactResolver, 'artifacts_sync/null_artifact_resolver'
131
+
132
+ module Strategies
133
+ autoload :Abstract, 'artifacts_sync/strategies/abstract'
134
+ autoload :GitUpdater, 'artifacts_sync/strategies/git_updater'
135
+ autoload :NullUpdater, 'artifacts_sync/strategies/null_updater'
136
+ end
131
137
  end
132
138
 
133
139
  module EnvFileReader
@@ -146,6 +152,7 @@ module KuberKit
146
152
  module TemplateReader
147
153
  autoload :ActionHandler, 'template_reader/action_handler'
148
154
  autoload :Reader, 'template_reader/reader'
155
+ autoload :Renderer, 'template_reader/renderer'
149
156
 
150
157
  module Strategies
151
158
  autoload :Abstract, 'template_reader/strategies/abstract'
@@ -166,6 +173,18 @@ module KuberKit
166
173
  autoload :Docker, 'service_deployer/strategies/docker'
167
174
  autoload :DockerCompose, 'service_deployer/strategies/docker_compose'
168
175
  autoload :Kubernetes, 'service_deployer/strategies/kubernetes'
176
+ autoload :Helm, 'service_deployer/strategies/helm'
177
+ end
178
+ end
179
+
180
+ module ServiceGenerator
181
+ autoload :ActionHandler, 'service_generator/action_handler'
182
+ autoload :StrategyDetector, 'service_generator/strategy_detector'
183
+ autoload :Generator, 'service_generator/generator'
184
+
185
+ module Strategies
186
+ autoload :Abstract, 'service_generator/strategies/abstract'
187
+ autoload :Helm, 'service_generator/strategies/helm'
169
188
  end
170
189
  end
171
190
 
@@ -192,6 +211,7 @@ module KuberKit
192
211
  autoload :ServiceReader, 'actions/service_reader'
193
212
  autoload :ServiceDeployer, 'actions/service_deployer'
194
213
  autoload :ServiceChecker, 'actions/service_checker'
214
+ autoload :ServiceGenerator, 'actions/service_generator'
195
215
  autoload :ConfigurationLoader, 'actions/configuration_loader'
196
216
  autoload :KubectlApplier, 'actions/kubectl_applier'
197
217
  autoload :KubectlAttacher, 'actions/kubectl_attacher'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuber_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iskander Khaziev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-17 00:00:00.000000000 Z
11
+ date: 2023-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: contracts
@@ -96,6 +96,20 @@ dependencies:
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: cli-ui
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.1.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.1.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: net-ssh
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: net-ssh
126
+ name: tty-prompt
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -123,7 +137,7 @@ dependencies:
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: tty-prompt
140
+ name: ed25519
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
@@ -259,13 +273,14 @@ files:
259
273
  - lib/kuber_kit/actions/kubectl_logs.rb
260
274
  - lib/kuber_kit/actions/service_checker.rb
261
275
  - lib/kuber_kit/actions/service_deployer.rb
276
+ - lib/kuber_kit/actions/service_generator.rb
262
277
  - lib/kuber_kit/actions/service_reader.rb
263
278
  - lib/kuber_kit/actions/shell_launcher.rb
264
279
  - lib/kuber_kit/actions/template_reader.rb
265
- - lib/kuber_kit/artifacts_sync/abstract_artifact_resolver.rb
266
280
  - lib/kuber_kit/artifacts_sync/artifact_updater.rb
267
- - lib/kuber_kit/artifacts_sync/git_artifact_resolver.rb
268
- - lib/kuber_kit/artifacts_sync/null_artifact_resolver.rb
281
+ - lib/kuber_kit/artifacts_sync/strategies/abstract.rb
282
+ - lib/kuber_kit/artifacts_sync/strategies/git_updater.rb
283
+ - lib/kuber_kit/artifacts_sync/strategies/null_updater.rb
269
284
  - lib/kuber_kit/cli.rb
270
285
  - lib/kuber_kit/configs.rb
271
286
  - lib/kuber_kit/container.rb
@@ -283,10 +298,12 @@ files:
283
298
  - lib/kuber_kit/core/configuration_definition_factory.rb
284
299
  - lib/kuber_kit/core/configuration_factory.rb
285
300
  - lib/kuber_kit/core/configuration_store.rb
301
+ - lib/kuber_kit/core/context_helper/abstract_helper.rb
286
302
  - lib/kuber_kit/core/context_helper/base_helper.rb
287
303
  - lib/kuber_kit/core/context_helper/context_helper_factory.rb
288
304
  - lib/kuber_kit/core/context_helper/context_vars.rb
289
305
  - lib/kuber_kit/core/context_helper/image_helper.rb
306
+ - lib/kuber_kit/core/context_helper/local_context_helper.rb
290
307
  - lib/kuber_kit/core/context_helper/service_helper.rb
291
308
  - lib/kuber_kit/core/dependencies/abstract_dependency_resolver.rb
292
309
  - lib/kuber_kit/core/env_files/abstract_env_file.rb
@@ -343,8 +360,14 @@ files:
343
360
  - lib/kuber_kit/service_deployer/strategies/abstract.rb
344
361
  - lib/kuber_kit/service_deployer/strategies/docker.rb
345
362
  - lib/kuber_kit/service_deployer/strategies/docker_compose.rb
363
+ - lib/kuber_kit/service_deployer/strategies/helm.rb
346
364
  - lib/kuber_kit/service_deployer/strategies/kubernetes.rb
347
365
  - lib/kuber_kit/service_deployer/strategy_detector.rb
366
+ - lib/kuber_kit/service_generator/action_handler.rb
367
+ - lib/kuber_kit/service_generator/generator.rb
368
+ - lib/kuber_kit/service_generator/strategies/abstract.rb
369
+ - lib/kuber_kit/service_generator/strategies/helm.rb
370
+ - lib/kuber_kit/service_generator/strategy_detector.rb
348
371
  - lib/kuber_kit/service_reader/action_handler.rb
349
372
  - lib/kuber_kit/service_reader/reader.rb
350
373
  - lib/kuber_kit/shell/abstract_shell.rb
@@ -353,6 +376,7 @@ files:
353
376
  - lib/kuber_kit/shell/commands/docker_commands.rb
354
377
  - lib/kuber_kit/shell/commands/docker_compose_commands.rb
355
378
  - lib/kuber_kit/shell/commands/git_commands.rb
379
+ - lib/kuber_kit/shell/commands/helm_commands.rb
356
380
  - lib/kuber_kit/shell/commands/kubectl_commands.rb
357
381
  - lib/kuber_kit/shell/commands/rsync_commands.rb
358
382
  - lib/kuber_kit/shell/commands/system_commands.rb
@@ -365,6 +389,7 @@ files:
365
389
  - lib/kuber_kit/shell_launcher/strategies/kubernetes.rb
366
390
  - lib/kuber_kit/template_reader/action_handler.rb
367
391
  - lib/kuber_kit/template_reader/reader.rb
392
+ - lib/kuber_kit/template_reader/renderer.rb
368
393
  - lib/kuber_kit/template_reader/strategies/abstract.rb
369
394
  - lib/kuber_kit/template_reader/strategies/artifact_file.rb
370
395
  - lib/kuber_kit/tools/build_dir_cleaner.rb
@@ -382,7 +407,7 @@ homepage: https://github.com/ArtStation/kuber_kit
382
407
  licenses:
383
408
  - MIT
384
409
  metadata: {}
385
- post_install_message:
410
+ post_install_message:
386
411
  rdoc_options: []
387
412
  require_paths:
388
413
  - lib
@@ -398,7 +423,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
398
423
  version: '0'
399
424
  requirements: []
400
425
  rubygems_version: 3.1.6
401
- signing_key:
426
+ signing_key:
402
427
  specification_version: 4
403
428
  summary: Docker Containers Build & Deployment
404
429
  test_files: []
@@ -1,5 +0,0 @@
1
- class KuberKit::ArtifactsSync::AbstractArtifactResolver
2
- def resolve(shell, artifact)
3
- raise KuberKit::NotImplementedError, "must be implemented"
4
- end
5
- end
@@ -1,31 +0,0 @@
1
- class KuberKit::ArtifactsSync::GitArtifactResolver < KuberKit::ArtifactsSync::AbstractArtifactResolver
2
-
3
- include KuberKit::Import[
4
- "shell.git_commands",
5
- ]
6
-
7
- Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Artifacts::Git => Any
8
- def resolve(shell, artifact)
9
- already_cloned = artifact_already_cloned?(
10
- shell: shell,
11
- target_path: artifact.cloned_path,
12
- remote_url: artifact.remote_url,
13
- )
14
-
15
- if already_cloned
16
- git_commands.force_pull_repo(shell,
17
- path: artifact.cloned_path, branch: artifact.branch
18
- )
19
- else
20
- git_commands.download_repo(shell,
21
- remote_url: artifact.remote_url, path: artifact.cloned_path, branch: artifact.branch
22
- )
23
- end
24
- end
25
-
26
- private
27
- def artifact_already_cloned?(shell:, target_path:, remote_url:)
28
- target_remote_url = git_commands.get_remote_url(shell, target_path)
29
- target_remote_url == remote_url
30
- end
31
- end
@@ -1,7 +0,0 @@
1
- class KuberKit::ArtifactsSync::NullArtifactResolver < KuberKit::ArtifactsSync::AbstractArtifactResolver
2
-
3
- Contract KuberKit::Shell::AbstractShell, Any => Any
4
- def resolve(shell, artifact)
5
- return true
6
- end
7
- end