kuber_kit 0.3.1 → 0.3.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -6
  3. data/TODO.md +2 -2
  4. data/bin/{console → kit_console} +0 -0
  5. data/example/app_data/docker_compose.yml +6 -0
  6. data/example/configurations/review.rb +1 -1
  7. data/example/infrastructure/build_servers.rb +5 -5
  8. data/example/infrastructure/templates.rb +5 -0
  9. data/example/services/compose_app.rb +10 -0
  10. data/example/services/env_file.rb +1 -1
  11. data/lib/kuber_kit.rb +7 -1
  12. data/lib/kuber_kit/actions/kubectl_applier.rb +2 -2
  13. data/lib/kuber_kit/actions/kubectl_attacher.rb +9 -3
  14. data/lib/kuber_kit/actions/kubectl_console.rb +32 -0
  15. data/lib/kuber_kit/actions/kubectl_logs.rb +37 -0
  16. data/lib/kuber_kit/actions/service_deployer.rb +5 -4
  17. data/lib/kuber_kit/cli.rb +32 -6
  18. data/lib/kuber_kit/configs.rb +4 -3
  19. data/lib/kuber_kit/container.rb +10 -2
  20. data/lib/kuber_kit/core/configuration.rb +9 -7
  21. data/lib/kuber_kit/core/configuration_definition.rb +6 -6
  22. data/lib/kuber_kit/core/configuration_factory.rb +9 -9
  23. data/lib/kuber_kit/core/context_helper/base_helper.rb +7 -0
  24. data/lib/kuber_kit/core/image.rb +3 -1
  25. data/lib/kuber_kit/core/image_definition.rb +3 -1
  26. data/lib/kuber_kit/core/service.rb +4 -4
  27. data/lib/kuber_kit/core/service_definition.rb +3 -3
  28. data/lib/kuber_kit/core/service_factory.rb +6 -6
  29. data/lib/kuber_kit/service_deployer/deployer.rb +2 -2
  30. data/lib/kuber_kit/service_deployer/strategies/docker.rb +41 -0
  31. data/lib/kuber_kit/service_deployer/strategies/docker_compose.rb +15 -6
  32. data/lib/kuber_kit/service_deployer/strategies/kubernetes.rb +34 -7
  33. data/lib/kuber_kit/service_deployer/strategy_detector.rb +1 -1
  34. data/lib/kuber_kit/shell/commands/docker_commands.rb +33 -0
  35. data/lib/kuber_kit/shell/commands/kubectl_commands.rb +38 -15
  36. data/lib/kuber_kit/shell/local_shell.rb +5 -1
  37. data/lib/kuber_kit/ui/interactive.rb +7 -1
  38. data/lib/kuber_kit/ui/simple.rb +2 -1
  39. data/lib/kuber_kit/version.rb +1 -1
  40. metadata +10 -6
  41. data/lib/kuber_kit/service_deployer/strategies/kubernetes_runner.rb +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3088efcb997e3dda2dbcd85d584265b7a5eec03b20093265842e3396592ab35
4
- data.tar.gz: a52e92d808c31b2a0f654e8ba2eaa9cf46a0b7352855f7602e63fee7a09a1271
3
+ metadata.gz: 1a2b626e99cbab815d586f4ca2c05796f367f25058502ab7f7b801a0d5191c70
4
+ data.tar.gz: 281a2179e9e15d017c65d76c95e1ee863e370fa405ac80571747c2bebaca8e2c
5
5
  SHA512:
6
- metadata.gz: 5ab6df03558b78d0d146cd6d77224f048564ae8d84c9c6d18d2b9abddb6d6cd8c1e8306549bad16c254fd5632b83c2cfceb690518216251efc4008983aa31f86
7
- data.tar.gz: 1a2837bfa4334e33fa3c7aee7274516c297e9df0b92adf0fd7f021576c3682af2b48f9336c80b849bf1c5655a88f4d3cf43a42f6669140f5875e99a6710b5a5e
6
+ metadata.gz: c755057ec72e897bce215977d2fef6e2b5bd2e72ae6b7bf6bd58774605bed91d22a73dda41a68783ea36e4c1a375eff432db6764ff1295baae243a0a2ca8a7e4
7
+ data.tar.gz: fbb4da6342592b1f5506911787f763f567804aa71fc975a76650e7b8e04137f10be5062e1bafa7ef89ec8bc1c0d86d53d73b9771cb2a90edc6debd7666c1212d
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kuber_kit (0.3.1)
4
+ kuber_kit (0.3.6)
5
5
  cli-ui
6
6
  contracts-lite
7
7
  dry-auto_inject
@@ -19,16 +19,14 @@ GEM
19
19
  docile (1.3.2)
20
20
  dry-auto_inject (0.7.0)
21
21
  dry-container (>= 0.3.4)
22
- dry-configurable (0.11.6)
22
+ dry-configurable (0.12.0)
23
23
  concurrent-ruby (~> 1.0)
24
- dry-core (~> 0.4, >= 0.4.7)
25
- dry-equalizer (~> 0.2)
24
+ dry-core (~> 0.5, >= 0.5.0)
26
25
  dry-container (0.7.2)
27
26
  concurrent-ruby (~> 1.0)
28
27
  dry-configurable (~> 0.1, >= 0.1.3)
29
- dry-core (0.4.10)
28
+ dry-core (0.5.0)
30
29
  concurrent-ruby (~> 1.0)
31
- dry-equalizer (0.3.0)
32
30
  method_source (1.0.0)
33
31
  net-ssh (6.1.0)
34
32
  pry (0.13.1)
data/TODO.md CHANGED
@@ -1,8 +1,8 @@
1
+ - https://ttytoolkit.org/
2
+ - kit status should show the list of services and their status, with ability to select & view logs
1
3
  - list services and require confirmation before deployment
2
- - kit attach should list available deployments/pods, and ask for specific container if it has multiple containers
3
4
  - add kit logs support, should work similar to kit attach
4
5
  - allow deploying only services enabled for specific configuration
5
6
  - find a way to always deploy some service, e.g. for migrations and env_files
6
- - add ability to set container health checks
7
7
  - template should be able to set default attributes
8
8
  - template should be able to depend on image?
File without changes
@@ -0,0 +1,6 @@
1
+ version: "3.3"
2
+ services:
3
+ <%= service_name %>:
4
+ container_name: <%= service_name %>
5
+ hostname: <%= service_name %>
6
+ image: <%= image_url(attribute(:image_name, default: service_name.to_sym)) %>
@@ -2,4 +2,4 @@ KuberKit
2
2
  .define_configuration(:review)
3
3
  .use_registry(:review_default, as: :default)
4
4
  .use_artifact(:kuber_kit_repo, as: :kuber_kit_repo)
5
- .use_build_server(:remote_bs)
5
+ #.use_build_server(:remote_bs)
@@ -1,8 +1,8 @@
1
1
  ENV['SSH_TEST_HOST'] ||= "indocker.artstn.ninja"
2
2
  ENV['SSH_TEST_USER'] ||= "kuber_kit"
3
3
 
4
- KuberKit.add_build_server(
5
- KuberKit::Core::BuildServers::BuildServer
6
- .new(:remote_bs)
7
- .setup(host: ENV['SSH_TEST_HOST'], user: ENV['SSH_TEST_USER'], port: 22)
8
- )
4
+ # KuberKit.add_build_server(
5
+ # KuberKit::Core::BuildServers::BuildServer
6
+ # .new(:remote_bs)
7
+ # .setup(host: ENV['SSH_TEST_HOST'], user: ENV['SSH_TEST_USER'], port: 22)
8
+ # )
@@ -6,4 +6,9 @@ KuberKit.add_template(
6
6
  KuberKit.add_template(
7
7
  KuberKit::Core::Templates::ArtifactFile
8
8
  .new(:env_file, artifact_name: :kuber_kit_example_data, file_path: "env_file.yml")
9
+ )
10
+
11
+ KuberKit.add_template(
12
+ KuberKit::Core::Templates::ArtifactFile
13
+ .new(:docker_compose, artifact_name: :kuber_kit_example_data, file_path: "docker_compose.yml")
9
14
  )
@@ -0,0 +1,10 @@
1
+ KuberKit
2
+ .define_service(:compose_app)
3
+ .template(:docker_compose)
4
+ .images(:ruby_app)
5
+ .tags(:compose)
6
+ .deployer_strategy(:docker_compose)
7
+ .attributes(
8
+ image_name: :ruby_app,
9
+ deployer_interactive: true
10
+ )
@@ -3,5 +3,5 @@ KuberKit
3
3
  .template(:env_file)
4
4
  .tags("env_file")
5
5
  .attributes(
6
- deployment_restart_enabled: false
6
+ deployer_restart_enabled: false
7
7
  )
@@ -146,9 +146,9 @@ module KuberKit
146
146
 
147
147
  module Strategies
148
148
  autoload :Abstract, 'service_deployer/strategies/abstract'
149
+ autoload :Docker, 'service_deployer/strategies/docker'
149
150
  autoload :DockerCompose, 'service_deployer/strategies/docker_compose'
150
151
  autoload :Kubernetes, 'service_deployer/strategies/kubernetes'
151
- autoload :KubernetesRunner, 'service_deployer/strategies/kubernetes_runner'
152
152
  end
153
153
  end
154
154
 
@@ -166,6 +166,8 @@ module KuberKit
166
166
  autoload :ConfigurationLoader, 'actions/configuration_loader'
167
167
  autoload :KubectlApplier, 'actions/kubectl_applier'
168
168
  autoload :KubectlAttacher, 'actions/kubectl_attacher'
169
+ autoload :KubectlConsole, 'actions/kubectl_console'
170
+ autoload :KubectlLogs, 'actions/kubectl_logs'
169
171
  end
170
172
 
171
173
  module Extensions
@@ -211,6 +213,10 @@ module KuberKit
211
213
  !!@debug_mode
212
214
  end
213
215
 
216
+ def deprecation_warnings_disabled?
217
+ Container["configs"].deprecation_warnings_disabled
218
+ end
219
+
214
220
  def current_configuration
215
221
  if @configuration_name.nil?
216
222
  raise "Please set configuration name before calling current_configuration"
@@ -8,9 +8,9 @@ class KuberKit::Actions::KubectlApplier
8
8
  Contract String, Hash => Any
9
9
  def call(file_path, options)
10
10
  kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
11
- deploy_namespace = KuberKit.current_configuration.deploy_namespace
11
+ deployer_namespace = KuberKit.current_configuration.deployer_namespace
12
12
  ui.create_task("Applying file: #{file_path}") do |task|
13
- kubectl_commands.apply_file(local_shell, file_path, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
13
+ kubectl_commands.apply_file(local_shell, file_path, kubeconfig_path: kubeconfig_path, namespace: deployer_namespace)
14
14
  task.update_title("Applied file: #{file_path}")
15
15
  end
16
16
 
@@ -5,16 +5,22 @@ class KuberKit::Actions::KubectlAttacher
5
5
  "ui"
6
6
  ]
7
7
 
8
- Contract String, Hash => Any
8
+ Contract Maybe[String], Hash => Any
9
9
  def call(pod_name, options)
10
10
  kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
11
- deploy_namespace = KuberKit.current_configuration.deploy_namespace
11
+ deployer_namespace = KuberKit.current_configuration.deployer_namespace
12
+
13
+ if !pod_name
14
+ resources = kubectl_commands.get_resources(local_shell, "deployments", jsonpath: ".items[*].metadata.name")
15
+ options = resources.split(" ").map{|d| "deploy/#{d}" }
16
+ pod_name = ui.prompt("Please select deployment to attach", options)
17
+ end
12
18
 
13
19
  kubectl_commands.exec(
14
20
  local_shell, pod_name, "bash", args: "-it",
15
21
  kubeconfig_path: kubeconfig_path,
16
22
  interactive: true,
17
- namespace: deploy_namespace
23
+ namespace: deployer_namespace
18
24
  )
19
25
 
20
26
  true
@@ -0,0 +1,32 @@
1
+ class KuberKit::Actions::KubectlConsole
2
+ include KuberKit::Import[
3
+ "shell.kubectl_commands",
4
+ "shell.local_shell",
5
+ "ui"
6
+ ]
7
+
8
+ Contract Maybe[String], Hash => Any
9
+ def call(pod_name, options)
10
+ kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
11
+ deployer_namespace = KuberKit.current_configuration.deployer_namespace
12
+
13
+ if !pod_name
14
+ resources = kubectl_commands.get_resources(local_shell, "deployments", jsonpath: ".items[*].metadata.name")
15
+ options = resources.split(" ").map{|d| "deploy/#{d}" }
16
+ pod_name = ui.prompt("Please select deployment to attach", options)
17
+ end
18
+
19
+ kubectl_commands.exec(
20
+ local_shell, pod_name, "bin/console", args: "-it",
21
+ kubeconfig_path: kubeconfig_path,
22
+ interactive: true,
23
+ namespace: deployer_namespace
24
+ )
25
+
26
+ true
27
+ rescue KuberKit::Error => e
28
+ ui.print_error("Error", e.message)
29
+
30
+ false
31
+ end
32
+ end
@@ -0,0 +1,37 @@
1
+ class KuberKit::Actions::KubectlLogs
2
+ include KuberKit::Import[
3
+ "shell.kubectl_commands",
4
+ "shell.local_shell",
5
+ "ui"
6
+ ]
7
+
8
+ Contract Maybe[String], Hash => Any
9
+ def call(pod_name, options)
10
+ kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
11
+ deployer_namespace = KuberKit.current_configuration.deployer_namespace
12
+
13
+ if !pod_name
14
+ deployments = kubectl_commands.get_resources(local_shell, "deployments", jsonpath: ".items[*].metadata.name")
15
+ deploy_options = deployments.split(" ").map{|d| "deploy/#{d}" }
16
+ pod_name = ui.prompt("Please select deployment to attach", deploy_options)
17
+ end
18
+
19
+ args = ""
20
+ if options[:follow]
21
+ args = "-f"
22
+ end
23
+
24
+ kubectl_commands.logs(
25
+ local_shell, pod_name,
26
+ args: args,
27
+ kubeconfig_path: kubeconfig_path,
28
+ namespace: deployer_namespace
29
+ )
30
+
31
+ true
32
+ rescue KuberKit::Error => e
33
+ ui.print_error("Error", e.message)
34
+
35
+ false
36
+ end
37
+ end
@@ -10,10 +10,11 @@ class KuberKit::Actions::ServiceDeployer
10
10
  ]
11
11
 
12
12
  Contract KeywordArgs[
13
- services: Maybe[ArrayOf[String]],
14
- tags: Maybe[ArrayOf[String]],
13
+ services: Maybe[ArrayOf[String]],
14
+ tags: Maybe[ArrayOf[String]],
15
+ skip_compile: Maybe[Bool],
15
16
  ] => Any
16
- def call(services:, tags:)
17
+ def call(services:, tags:, skip_compile: false)
17
18
  if services.empty? && tags.empty?
18
19
  services, tags = show_tags_selection
19
20
  end
@@ -33,7 +34,7 @@ class KuberKit::Actions::ServiceDeployer
33
34
 
34
35
  images_names = services.map(&:images).flatten.uniq
35
36
 
36
- compile_images(images_names)
37
+ compile_images(images_names) unless skip_compile
37
38
  deploy_services(service_names)
38
39
 
39
40
  true
@@ -31,15 +31,17 @@ class KuberKit::CLI < Thor
31
31
  end
32
32
 
33
33
  desc "deploy CONTEXT_NAME", "Deploy CONTEXT_NAME with kubectl"
34
- method_option :services, :type => :array, aliases: ["-s"]
35
- method_option :tags, :type => :array, aliases: ["-t"]
34
+ method_option :services, :type => :array, aliases: ["-s"]
35
+ method_option :tags, :type => :array, aliases: ["-t"]
36
+ method_option :skip_compile, :type => :boolean, aliases: ["-B"]
36
37
  def deploy
37
38
  KuberKit.set_debug_mode(options[:debug])
38
39
 
39
40
  if KuberKit::Container['actions.configuration_loader'].call(options)
40
41
  result = KuberKit::Container['actions.service_deployer'].call(
41
- services: options[:services] || [],
42
- tags: options[:tags] || []
42
+ services: options[:services] || [],
43
+ tags: options[:tags] || [],
44
+ skip_compile: options[:skip_compile] || false
43
45
  )
44
46
  end
45
47
 
@@ -91,8 +93,8 @@ class KuberKit::CLI < Thor
91
93
  end
92
94
  end
93
95
 
94
- desc "attach POD_NAME", "Attach to POD_NAME with kubectl"
95
- def attach(pod_name)
96
+ desc "attach POD_NAME", "Attach to POD_NAME using kubectl"
97
+ def attach(pod_name = nil)
96
98
  KuberKit.set_debug_mode(options[:debug])
97
99
 
98
100
  if KuberKit::Container['actions.configuration_loader'].call(options)
@@ -100,6 +102,30 @@ class KuberKit::CLI < Thor
100
102
  end
101
103
  end
102
104
 
105
+ desc "launch console in POD_NAME", "Attach to POD_NAME using kubectl & launch bin/console"
106
+ def console(pod_name = nil)
107
+ KuberKit.set_debug_mode(options[:debug])
108
+
109
+ if KuberKit::Container['actions.configuration_loader'].call(options)
110
+ KuberKit::Container['actions.kubectl_console'].call(pod_name, options)
111
+ end
112
+ end
113
+
114
+ desc "show logs for POD_NAME", "Show logs for POD_NAME using kubectl"
115
+ method_option :follow, :type => :boolean, aliases: ["-f"]
116
+ def logs(pod_name = nil)
117
+ KuberKit.set_debug_mode(options[:debug])
118
+
119
+ if KuberKit::Container['actions.configuration_loader'].call(options)
120
+ KuberKit::Container['actions.kubectl_logs'].call(pod_name, options)
121
+ end
122
+ end
123
+
124
+ desc "version", "Print current version"
125
+ def version
126
+ puts KuberKit::VERSION
127
+ end
128
+
103
129
  def self.exit_on_failure?
104
130
  true
105
131
  end
@@ -4,8 +4,8 @@ class KuberKit::Configs
4
4
  AVAILABLE_CONFIGS = [
5
5
  :image_dockerfile_name, :image_build_context_dir, :image_tag, :docker_ignore_list, :image_compile_dir,
6
6
  :kuber_kit_dirname, :kuber_kit_min_version, :images_dirname, :services_dirname, :infra_dirname, :configurations_dirname,
7
- :artifact_clone_dir, :service_config_dir, :deploy_strategy, :compile_simultaneous_limit,
8
- :additional_images_paths
7
+ :artifact_clone_dir, :service_config_dir, :deployer_strategy, :compile_simultaneous_limit,
8
+ :additional_images_paths, :deprecation_warnings_disabled
9
9
  ]
10
10
  DOCKER_IGNORE_LIST = [
11
11
  'Dockerfile',
@@ -47,9 +47,10 @@ class KuberKit::Configs
47
47
  set :configurations_dirname, "configurations"
48
48
  set :artifact_clone_dir, "/tmp/kuber_kit/artifacts"
49
49
  set :service_config_dir, "/tmp/kuber_kit/services"
50
- set :deploy_strategy, :kubernetes
50
+ set :deployer_strategy, :kubernetes
51
51
  set :compile_simultaneous_limit, 5
52
52
  set :additional_images_paths, []
53
+ set :deprecation_warnings_disabled, false
53
54
  end
54
55
 
55
56
  def items
@@ -33,6 +33,14 @@ class KuberKit::Container
33
33
  KuberKit::Actions::KubectlAttacher.new
34
34
  end
35
35
 
36
+ register "actions.kubectl_console" do
37
+ KuberKit::Actions::KubectlConsole.new
38
+ end
39
+
40
+ register "actions.kubectl_logs" do
41
+ KuberKit::Actions::KubectlLogs.new
42
+ end
43
+
36
44
  register "configs" do
37
45
  KuberKit::Configs.new
38
46
  end
@@ -233,8 +241,8 @@ class KuberKit::Container
233
241
  KuberKit::ServiceDeployer::Strategies::Kubernetes.new
234
242
  end
235
243
 
236
- register "service_deployer.strategies.kubernetes_runner" do
237
- KuberKit::ServiceDeployer::Strategies::KubernetesRunner.new
244
+ register "service_deployer.strategies.docker" do
245
+ KuberKit::ServiceDeployer::Strategies::Docker.new
238
246
  end
239
247
 
240
248
  register "service_deployer.strategies.docker_compose" do
@@ -1,6 +1,6 @@
1
1
  class KuberKit::Core::Configuration
2
2
  attr_reader :name, :artifacts, :registries, :env_files, :templates, :kubeconfig_path,
3
- :deploy_strategy, :deploy_namespace, :services_attributes, :build_servers,
3
+ :deployer_strategy, :deployer_namespace, :services_attributes, :build_servers,
4
4
  :global_build_vars
5
5
 
6
6
  Contract KeywordArgs[
@@ -10,14 +10,14 @@ class KuberKit::Core::Configuration
10
10
  env_files: Hash,
11
11
  templates: Hash,
12
12
  kubeconfig_path: Maybe[String],
13
- deploy_strategy: Symbol,
14
- deploy_namespace: Maybe[Symbol],
13
+ deployer_strategy: Symbol,
14
+ deployer_namespace: Maybe[Symbol],
15
15
  services_attributes: HashOf[Symbol => Hash],
16
16
  build_servers: ArrayOf[KuberKit::Core::BuildServers::AbstractBuildServer],
17
17
  global_build_vars: HashOf[Symbol => Any],
18
18
  ] => Any
19
19
  def initialize(name:, artifacts:, registries:, env_files:, templates:, kubeconfig_path:,
20
- deploy_strategy:, deploy_namespace:, services_attributes:, build_servers:,
20
+ deployer_strategy:, deployer_namespace:, services_attributes:, build_servers:,
21
21
  global_build_vars:)
22
22
  @name = name
23
23
  @artifacts = artifacts
@@ -25,8 +25,8 @@ class KuberKit::Core::Configuration
25
25
  @env_files = env_files
26
26
  @templates = templates
27
27
  @kubeconfig_path = kubeconfig_path
28
- @deploy_strategy = deploy_strategy
29
- @deploy_namespace = deploy_namespace
28
+ @deployer_strategy = deployer_strategy
29
+ @deployer_namespace = deployer_namespace
30
30
  @build_servers = build_servers
31
31
  @services_attributes = services_attributes
32
32
  @global_build_vars = global_build_vars
@@ -37,7 +37,9 @@ class KuberKit::Core::Configuration
37
37
  end
38
38
 
39
39
  def global_build_args
40
- puts "WARNING: global_build_args is deprecated, please use global_build_vars instead"
40
+ unless KuberKit.deprecation_warnings_disabled?
41
+ puts "DEPRECATION: global_build_args is deprecated, please use global_build_vars instead"
42
+ end
41
43
  global_build_vars
42
44
  end
43
45
  end
@@ -23,8 +23,8 @@ class KuberKit::Core::ConfigurationDefinition
23
23
  env_files: @env_files,
24
24
  templates: @templates,
25
25
  kubeconfig_path: @kubeconfig_path,
26
- deploy_strategy: @deploy_strategy,
27
- deploy_namespace: @deploy_namespace,
26
+ deployer_strategy: @deployer_strategy,
27
+ deployer_namespace: @deployer_namespace,
28
28
  enabled_services: @enabled_services,
29
29
  build_servers: @build_servers,
30
30
  services_attributes: @services_attributes,
@@ -82,14 +82,14 @@ class KuberKit::Core::ConfigurationDefinition
82
82
  self
83
83
  end
84
84
 
85
- def deploy_namespace(namespace)
86
- @deploy_namespace = namespace
85
+ def deployer_namespace(namespace)
86
+ @deployer_namespace = namespace
87
87
 
88
88
  self
89
89
  end
90
90
 
91
- def deploy_strategy(path)
92
- @deploy_strategy = path
91
+ def deployer_strategy(path)
92
+ @deployer_strategy = path
93
93
 
94
94
  self
95
95
  end
@@ -20,15 +20,15 @@ class KuberKit::Core::ConfigurationFactory
20
20
  build_servers = fetch_build_servers(configuration_attrs.build_servers)
21
21
 
22
22
  KuberKit::Core::Configuration.new(
23
- name: configuration_attrs.name,
24
- artifacts: artifacts,
25
- registries: registries,
26
- env_files: env_files,
27
- templates: templates,
28
- kubeconfig_path: configuration_attrs.kubeconfig_path,
29
- deploy_strategy: configuration_attrs.deploy_strategy || configs.deploy_strategy,
30
- deploy_namespace: configuration_attrs.deploy_namespace,
31
- build_servers: build_servers,
23
+ name: configuration_attrs.name,
24
+ artifacts: artifacts,
25
+ registries: registries,
26
+ env_files: env_files,
27
+ templates: templates,
28
+ kubeconfig_path: configuration_attrs.kubeconfig_path,
29
+ deployer_strategy: configuration_attrs.deployer_strategy || configs.deployer_strategy,
30
+ deployer_namespace: configuration_attrs.deployer_namespace,
31
+ build_servers: build_servers,
32
32
  services_attributes: configuration_attrs.services_attributes,
33
33
  global_build_vars: configuration_attrs.global_build_vars || {},
34
34
  )
@@ -33,6 +33,13 @@ class KuberKit::Core::ContextHelper::BaseHelper
33
33
  KuberKit.global_build_vars
34
34
  end
35
35
 
36
+ def global_build_args
37
+ unless KuberKit.deprecation_warnings_disabled?
38
+ puts "DEPRECATION: global_build_args is deprecated, please use global_build_vars instead"
39
+ end
40
+ global_build_vars
41
+ end
42
+
36
43
  def get_binding
37
44
  binding
38
45
  end
@@ -33,7 +33,9 @@ class KuberKit::Core::Image
33
33
  end
34
34
 
35
35
  def build_args
36
- puts "WARNING: build_args is deprecated, please use build_vars instead"
36
+ unless KuberKit.deprecation_warnings_disabled?
37
+ puts "WARNING: build_args is deprecated, please use build_vars instead"
38
+ end
37
39
  build_vars
38
40
  end
39
41
  end
@@ -44,7 +44,9 @@ class KuberKit::Core::ImageDefinition
44
44
  end
45
45
 
46
46
  def build_args(value = nil, &block)
47
- puts "WARNING: build_args is deprecated, please use build_vars instead"
47
+ unless KuberKit.deprecation_warnings_disabled?
48
+ puts "WARNING: build_args is deprecated, please use build_vars instead"
49
+ end
48
50
  build_vars(value, *block)
49
51
  end
50
52
 
@@ -1,7 +1,7 @@
1
1
  class KuberKit::Core::Service
2
2
  AttributeNotSet = Class.new(Indocker::Error)
3
3
 
4
- attr_reader :name, :template_name, :tags, :images, :attributes, :deploy_strategy
4
+ attr_reader :name, :template_name, :tags, :images, :attributes, :deployer_strategy
5
5
 
6
6
  Contract KeywordArgs[
7
7
  name: Symbol,
@@ -9,15 +9,15 @@ class KuberKit::Core::Service
9
9
  tags: ArrayOf[Symbol],
10
10
  images: ArrayOf[Symbol],
11
11
  attributes: HashOf[Symbol => Any],
12
- deploy_strategy: Maybe[Symbol]
12
+ deployer_strategy: Maybe[Symbol]
13
13
  ] => Any
14
- def initialize(name:, template_name:, tags:, images:, attributes:, deploy_strategy:)
14
+ def initialize(name:, template_name:, tags:, images:, attributes:, deployer_strategy:)
15
15
  @name = name
16
16
  @template_name = template_name
17
17
  @tags = tags
18
18
  @images = images
19
19
  @attributes = attributes
20
- @deploy_strategy = deploy_strategy
20
+ @deployer_strategy = deployer_strategy
21
21
  end
22
22
 
23
23
  def uri
@@ -13,7 +13,7 @@ class KuberKit::Core::ServiceDefinition
13
13
  tags: Array(get_value(@tags)).map(&:to_sym),
14
14
  images: Array(get_value(@images)).map(&:to_sym),
15
15
  attributes: get_value(@attributes),
16
- deploy_strategy: get_value(@deploy_strategy),
16
+ deployer_strategy: get_value(@deployer_strategy),
17
17
  )
18
18
  end
19
19
 
@@ -41,8 +41,8 @@ class KuberKit::Core::ServiceDefinition
41
41
  self
42
42
  end
43
43
 
44
- def deploy_strategy(value = nil, &block)
45
- @deploy_strategy = block_given? ? block : value
44
+ def deployer_strategy(value = nil, &block)
45
+ @deployer_strategy = block_given? ? block : value
46
46
 
47
47
  self
48
48
  end
@@ -12,12 +12,12 @@ class KuberKit::Core::ServiceFactory
12
12
  attributes = (service_attrs.attributes || {}).merge(configuration_attributes)
13
13
 
14
14
  KuberKit::Core::Service.new(
15
- name: service_attrs.name,
16
- template_name: service_attrs.template_name,
17
- tags: service_attrs.tags,
18
- images: service_attrs.images,
19
- attributes: attributes,
20
- deploy_strategy: service_attrs.deploy_strategy,
15
+ name: service_attrs.name,
16
+ template_name: service_attrs.template_name,
17
+ tags: service_attrs.tags,
18
+ images: service_attrs.images,
19
+ attributes: attributes,
20
+ deployer_strategy: service_attrs.deployer_strategy,
21
21
  )
22
22
  end
23
23
  end
@@ -4,7 +4,7 @@ class KuberKit::ServiceDeployer::Deployer
4
4
  include KuberKit::Import[
5
5
  "core.service_store",
6
6
  "service_deployer.strategies.kubernetes",
7
- "service_deployer.strategies.kubernetes_runner",
7
+ "service_deployer.strategies.docker",
8
8
  "service_deployer.strategies.docker_compose"
9
9
  ]
10
10
 
@@ -39,7 +39,7 @@ class KuberKit::ServiceDeployer::Deployer
39
39
  private
40
40
  def add_default_strategies
41
41
  register_strategy(:kubernetes, kubernetes)
42
- register_strategy(:kubernetes_runner, kubernetes_runner)
42
+ register_strategy(:docker, docker)
43
43
  register_strategy(:docker_compose, docker_compose)
44
44
  end
45
45
  end
@@ -0,0 +1,41 @@
1
+ class KuberKit::ServiceDeployer::Strategies::Docker < KuberKit::ServiceDeployer::Strategies::Abstract
2
+ include KuberKit::Import[
3
+ "shell.docker_commands",
4
+ "core.image_store",
5
+ "configs",
6
+ ]
7
+
8
+ STRATEGY_OPTIONS = [
9
+ :container_name,
10
+ :image_name,
11
+ :docker_run_args,
12
+ :docker_run_command,
13
+ :delete_if_exists
14
+ ]
15
+
16
+ Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Service => Any
17
+ def deploy(shell, service)
18
+ strategy_options = service.attribute(:deployer, default: {})
19
+ unknown_options = strategy_options.keys.map(&:to_sym) - STRATEGY_OPTIONS
20
+ if unknown_options.any?
21
+ raise KuberKit::Error, "Unknow options for deploy strategy: #{unknown_options}. Available options: #{STRATEGY_OPTIONS}"
22
+ end
23
+
24
+ container_name = strategy_options.fetch(:container_name, service.uri)
25
+ docker_run_args = strategy_options.fetch(:docker_run_args, nil)
26
+ docker_run_command = strategy_options.fetch(:docker_run_command, nil)
27
+
28
+ image_name = strategy_options.fetch(:image_name, nil)
29
+ if image_name.nil?
30
+ raise KuberKit::Error, "image_name is mandatory attribute for this deploy strategy"
31
+ end
32
+ image = image_store.get_image(image_name.to_sym)
33
+
34
+ delete_enabled = strategy_options.fetch(:delete_if_exists, false)
35
+ if delete_enabled && docker_commands.container_exists?(shell, container_name)
36
+ docker_commands.delete_container(shell, container_name)
37
+ end
38
+
39
+ docker_commands.run(shell, image.remote_registry_url, run_args: docker_run_args, run_command: docker_run_command)
40
+ end
41
+ end
@@ -5,20 +5,29 @@ class KuberKit::ServiceDeployer::Strategies::DockerCompose < KuberKit::ServiceDe
5
5
  "configs",
6
6
  ]
7
7
 
8
+ STRATEGY_OPTIONS = [
9
+ :service_name,
10
+ :command_name
11
+ ]
12
+
8
13
  Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Service => Any
9
14
  def deploy(shell, service)
10
15
  service_config = reader.read(shell, service)
11
16
  config_path = "#{configs.service_config_dir}/#{service.name}.yml"
12
17
  shell.write(config_path, service_config)
13
18
 
14
- deployment_service_name = service.attribute(:deployment_service_name, default: service.name.to_s)
15
- deployment_command_name = service.attribute(:deployment_command_name, default: "bash")
16
- deployment_interactive = service.attribute(:deployment_interactive, default: false)
19
+ strategy_options = service.attribute(:deployer, default: {})
20
+ unknown_options = strategy_options.keys.map(&:to_sym) - STRATEGY_OPTIONS
21
+ if unknown_options.any?
22
+ raise KuberKit::Error, "Unknow options for deploy strategy: #{unknown_options}. Available options: #{STRATEGY_OPTIONS}"
23
+ end
24
+
25
+ service_name = strategy_options.fetch(:service_name, service.name.to_s)
26
+ command_name = strategy_options.fetch(:command_name, "bash")
17
27
 
18
28
  docker_compose_commands.run(shell, config_path,
19
- service: deployment_service_name,
20
- command: deployment_command_name,
21
- interactive: deployment_interactive
29
+ service: service_name,
30
+ command: command_name,
22
31
  )
23
32
  end
24
33
  end
@@ -5,21 +5,48 @@ class KuberKit::ServiceDeployer::Strategies::Kubernetes < KuberKit::ServiceDeplo
5
5
  "configs",
6
6
  ]
7
7
 
8
+ STRATEGY_OPTIONS = [
9
+ :resource_type,
10
+ :resource_name,
11
+ :delete_if_exists,
12
+ :restart_if_exists
13
+ ]
14
+
8
15
  Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Service => Any
9
16
  def deploy(shell, service)
10
17
  service_config = reader.read(shell, service)
11
18
  config_path = "#{configs.service_config_dir}/#{service.name}.yml"
12
19
  shell.write(config_path, service_config)
13
20
 
14
- kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
15
- deploy_namespace = KuberKit.current_configuration.deploy_namespace
21
+ kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
22
+ namespace = KuberKit.current_configuration.deployer_namespace
23
+
24
+ strategy_options = service.attribute(:deployer, default: {})
25
+ unknown_options = strategy_options.keys.map(&:to_sym) - STRATEGY_OPTIONS
26
+ if unknown_options.any?
27
+ raise KuberKit::Error, "Unknow options for deploy strategy: #{unknown_options}. Available options: #{STRATEGY_OPTIONS}"
28
+ end
29
+
30
+ resource_type = strategy_options.fetch(:resource_type, "deployment")
31
+ resource_name = strategy_options.fetch(:resource_name, service.uri)
32
+
33
+ resource_exists = kubectl_commands.resource_exists?(
34
+ shell, resource_type, resource_name, kubeconfig_path: kubeconfig_path, namespace: namespace
35
+ )
36
+
37
+ delete_enabled = strategy_options.fetch(:delete_if_exists, false)
38
+ if delete_enabled && resource_exists
39
+ kubectl_commands.delete_resource(shell, resource_type, resource_name, kubeconfig_path: kubeconfig_path, namespace: namespace)
40
+ end
16
41
 
17
- kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
42
+ kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: namespace)
18
43
 
19
- deployment_restart_enabled = service.attribute(:deployment_restart_enabled, default: true)
20
- deployment_restart_name = service.attribute(:deployment_restart_name, default: service.uri)
21
- if deployment_restart_enabled
22
- kubectl_commands.rolling_restart(shell, deployment_restart_name, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
44
+ restart_enabled = strategy_options.fetch(:restart_if_exists, true)
45
+ if restart_enabled && resource_exists
46
+ kubectl_commands.rolling_restart(
47
+ shell, resource_type, resource_name,
48
+ kubeconfig_path: kubeconfig_path, namespace: namespace
49
+ )
23
50
  end
24
51
  end
25
52
  end
@@ -1,6 +1,6 @@
1
1
  class KuberKit::ServiceDeployer::StrategyDetector
2
2
  Contract KuberKit::Core::Service => Symbol
3
3
  def call(service)
4
- service.deploy_strategy || KuberKit.current_configuration.deploy_strategy
4
+ service.deployer_strategy || KuberKit.current_configuration.deployer_strategy
5
5
  end
6
6
  end
@@ -13,4 +13,37 @@ class KuberKit::Shell::Commands::DockerCommands
13
13
  def push(shell, tag_name)
14
14
  shell.exec!(%Q{docker push #{tag_name}})
15
15
  end
16
+
17
+ def run(shell, image_name, run_args: nil, run_command: nil)
18
+ command_parts = []
19
+ command_parts << "docker run"
20
+ command_parts << run_args if run_args
21
+ command_parts << image_name
22
+ command_parts << run_command if run_command
23
+
24
+ shell.exec!(command_parts.join(" "))
25
+ end
26
+
27
+ def container_exists?(shell, container_name)
28
+ result = get_container_id(shell, container_name)
29
+ result && result != ""
30
+ end
31
+
32
+ def delete_container(shell, container_name)
33
+ shell.exec!(%Q{docker rm -f #{container_name}})
34
+ end
35
+
36
+ def get_container_id(shell, container_name, only_healthy: false, status: "running")
37
+ command_parts = []
38
+ command_parts << "docker ps -a -q"
39
+
40
+ if only_healthy
41
+ command_parts << "--filter=\"health=healthy\""
42
+ end
43
+
44
+ command_parts << "--filter=\"status=#{status}\""
45
+ command_parts << "--filter=\"name=#{container_name}\""
46
+
47
+ shell.exec!(command_parts.join(" "))
48
+ end
16
49
  end
@@ -40,25 +40,56 @@ class KuberKit::Shell::Commands::KubectlCommands
40
40
  kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, interactive: interactive, namespace: namespace)
41
41
  end
42
42
 
43
+ def logs(shell, pod_name, args: nil, kubeconfig_path: nil, namespace: nil)
44
+ command_parts = []
45
+ command_parts << "logs"
46
+
47
+ if args
48
+ command_parts << args
49
+ end
50
+
51
+ command_parts << pod_name
52
+ kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, interactive: true, namespace: namespace)
53
+ end
54
+
55
+ def get_resources(shell, resource_type, field_selector: nil, jsonpath: ".items[*].metadata.name", kubeconfig_path: nil, namespace: nil)
56
+ command_parts = []
57
+ command_parts << "get #{resource_type}"
58
+
59
+ if field_selector
60
+ command_parts << "--field-selector=#{field_selector}"
61
+ end
62
+
63
+ if jsonpath
64
+ command_parts << "-o jsonpath='{#{jsonpath}}'"
65
+ end
66
+
67
+ kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, namespace: namespace)
68
+ end
69
+
43
70
  def resource_exists?(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
44
- result = find_resources(shell, resource_type, resource_name, kubeconfig_path: kubeconfig_path, namespace: namespace)
71
+ result = get_resources(shell, resource_type,
72
+ field_selector: "metadata.name=#{resource_name}", kubeconfig_path: kubeconfig_path, namespace: namespace
73
+ )
45
74
  result && result != ""
46
75
  end
47
76
 
48
- def find_resources(shell, resource_type, resource_name, jsonpath: ".items[*].metadata.name", kubeconfig_path: nil, namespace: nil)
49
- command = %Q{get #{resource_type} --field-selector=metadata.name=#{resource_name} -o jsonpath='{#{jsonpath}}'}
77
+ def delete_resource(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
78
+ command = %Q{delete #{resource_type} #{resource_name}}
50
79
 
51
80
  kubectl_run(shell, command, kubeconfig_path: kubeconfig_path, namespace: namespace)
52
81
  end
53
82
 
54
- def delete_resource(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
55
- command = %Q{delete #{resource_type} #{resource_name}}
83
+ def patch_resource(shell, resource_type, resource_name, specs, kubeconfig_path: nil, namespace: nil)
84
+ specs_json = JSON.dump(specs).gsub('"', '\"')
85
+
86
+ command = %Q{patch #{resource_type} #{resource_name} -p "#{specs_json}"}
56
87
 
57
88
  kubectl_run(shell, command, kubeconfig_path: kubeconfig_path, namespace: namespace)
58
89
  end
59
90
 
60
- def rolling_restart(shell, deployment_name, kubeconfig_path: nil, namespace: nil)
61
- patch_deployment(shell, deployment_name, {
91
+ def rolling_restart(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
92
+ patch_resource(shell, resource_type, resource_name, {
62
93
  spec: {
63
94
  template: {
64
95
  metadata: {
@@ -70,12 +101,4 @@ class KuberKit::Shell::Commands::KubectlCommands
70
101
  }
71
102
  }, kubeconfig_path: kubeconfig_path, namespace: namespace)
72
103
  end
73
-
74
- def patch_deployment(shell, deployment_name, specs, kubeconfig_path: nil, namespace: nil)
75
- specs_json = JSON.dump(specs).gsub('"', '\"')
76
-
77
- command = %Q{patch deployment #{deployment_name} -p "#{specs_json}"}
78
-
79
- kubectl_run(shell, command, kubeconfig_path: kubeconfig_path, namespace: namespace)
80
- end
81
104
  end
@@ -37,7 +37,11 @@ class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
37
37
  logger.info("Interactive: [#{command_number}]: #{command.to_s.cyan}")
38
38
  end
39
39
 
40
- system(command)
40
+ result = system(command)
41
+
42
+ if !$?.success?
43
+ raise ShellError, "Shell command failed: #{command}\r\n#{result}"
44
+ end
41
45
  end
42
46
 
43
47
  def sync(local_path, remote_path, exclude: nil, delete: true)
@@ -29,7 +29,13 @@ class KuberKit::UI::Interactive
29
29
  def prompt(text, options, &callback)
30
30
  CLI::UI::Prompt.ask(text) do |handler|
31
31
  options.each do |option|
32
- handler.option(option, &callback)
32
+ if callback
33
+ handler.option(option, &callback)
34
+ else
35
+ handler.option(option) do |selection|
36
+ selection
37
+ end
38
+ end
33
39
  end
34
40
  end
35
41
  end
@@ -71,7 +71,8 @@ class KuberKit::UI::Simple
71
71
  def prompt(text, options, &callback)
72
72
  print_info("Select", text)
73
73
  result = $stdin.gets.chomp
74
- callback.call(result)
74
+ callback.call(result) if callback
75
+ result
75
76
  end
76
77
 
77
78
  private
@@ -1,3 +1,3 @@
1
1
  module KuberKit
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.6"
3
3
  end
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: 0.3.1
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iskander Khaziev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-10 00:00:00.000000000 Z
11
+ date: 2021-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: contracts-lite
@@ -140,8 +140,8 @@ description: Docker Containers Build & Deployment
140
140
  email:
141
141
  - gvalmon@gmail.com
142
142
  executables:
143
- - console
144
143
  - kit
144
+ - kit_console
145
145
  extensions: []
146
146
  extra_rdoc_files: []
147
147
  files:
@@ -156,8 +156,9 @@ files:
156
156
  - README.md
157
157
  - Rakefile
158
158
  - TODO.md
159
- - bin/console
160
159
  - bin/kit
160
+ - bin/kit_console
161
+ - example/app_data/docker_compose.yml
161
162
  - example/app_data/env_file.yml
162
163
  - example/app_data/service.yml
163
164
  - example/app_data/test.env
@@ -180,6 +181,7 @@ files:
180
181
  - example/infrastructure/env_files.rb
181
182
  - example/infrastructure/registries.rb
182
183
  - example/infrastructure/templates.rb
184
+ - example/services/compose_app.rb
183
185
  - example/services/env_file.rb
184
186
  - example/services/ruby_app.rb
185
187
  - kuber_kit.gemspec
@@ -189,6 +191,8 @@ files:
189
191
  - lib/kuber_kit/actions/image_compiler.rb
190
192
  - lib/kuber_kit/actions/kubectl_applier.rb
191
193
  - lib/kuber_kit/actions/kubectl_attacher.rb
194
+ - lib/kuber_kit/actions/kubectl_console.rb
195
+ - lib/kuber_kit/actions/kubectl_logs.rb
192
196
  - lib/kuber_kit/actions/service_deployer.rb
193
197
  - lib/kuber_kit/actions/service_reader.rb
194
198
  - lib/kuber_kit/actions/template_reader.rb
@@ -258,9 +262,9 @@ files:
258
262
  - lib/kuber_kit/service_deployer/deployer.rb
259
263
  - lib/kuber_kit/service_deployer/service_list_resolver.rb
260
264
  - lib/kuber_kit/service_deployer/strategies/abstract.rb
265
+ - lib/kuber_kit/service_deployer/strategies/docker.rb
261
266
  - lib/kuber_kit/service_deployer/strategies/docker_compose.rb
262
267
  - lib/kuber_kit/service_deployer/strategies/kubernetes.rb
263
- - lib/kuber_kit/service_deployer/strategies/kubernetes_runner.rb
264
268
  - lib/kuber_kit/service_deployer/strategy_detector.rb
265
269
  - lib/kuber_kit/service_reader/action_handler.rb
266
270
  - lib/kuber_kit/service_reader/reader.rb
@@ -304,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
304
308
  - !ruby/object:Gem::Version
305
309
  version: '0'
306
310
  requirements: []
307
- rubygems_version: 3.0.8
311
+ rubygems_version: 3.0.9
308
312
  signing_key:
309
313
  specification_version: 4
310
314
  summary: Docker Containers Build & Deployment
@@ -1,35 +0,0 @@
1
- class KuberKit::ServiceDeployer::Strategies::KubernetesRunner < KuberKit::ServiceDeployer::Strategies::Abstract
2
- include KuberKit::Import[
3
- "service_reader.reader",
4
- "shell.kubectl_commands",
5
- "configs",
6
- ]
7
-
8
- Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Service => Any
9
- def deploy(shell, service)
10
- service_config = reader.read(shell, service)
11
- config_path = "#{configs.service_config_dir}/#{service.name}.yml"
12
- shell.write(config_path, service_config)
13
-
14
- kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
15
- deploy_namespace = KuberKit.current_configuration.deploy_namespace
16
-
17
- deployment_resource_name = service.attribute(:deployment_resource_name, default: service.uri)
18
- deployment_resource_type = service.attribute(:deployment_resource_type, default: "job")
19
-
20
- deployment_delete_enabled = service.attribute(:deployment_delete_enabled, default: true)
21
- if deployment_delete_enabled
22
- delete_resource_if_exists(shell, deployment_resource_type, deployment_resource_name, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
23
- end
24
-
25
- kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
26
- end
27
-
28
- private
29
- def delete_resource_if_exists(shell, resource_type, resource_name, kubeconfig_path:, namespace: )
30
- unless kubectl_commands.resource_exists?(shell, resource_type, resource_name, kubeconfig_path: kubeconfig_path, namespace: namespace)
31
- return false
32
- end
33
- kubectl_commands.delete_resource(shell, resource_type, resource_name, kubeconfig_path: kubeconfig_path, namespace: namespace)
34
- end
35
- end