kuber_kit 0.3.1 → 0.3.6

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