kuber_kit 0.3.9 → 0.4.2

This diff has not been reviewed by any users.
Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +35 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +1 -1
  5. data/TODO.md +2 -3
  6. data/example/configurations/review.rb +1 -0
  7. data/example/infrastructure/artifacts.rb +1 -1
  8. data/example/services/docker_app.rb +12 -0
  9. data/lib/kuber_kit.rb +6 -4
  10. data/lib/kuber_kit/actions/configuration_loader.rb +12 -19
  11. data/lib/kuber_kit/actions/env_file_reader.rb +1 -0
  12. data/lib/kuber_kit/actions/image_compiler.rb +10 -6
  13. data/lib/kuber_kit/actions/service_deployer.rb +24 -11
  14. data/lib/kuber_kit/actions/template_reader.rb +1 -0
  15. data/lib/kuber_kit/artifacts_sync/artifacts_updater.rb +3 -2
  16. data/lib/kuber_kit/cli.rb +49 -31
  17. data/lib/kuber_kit/container.rb +5 -1
  18. data/lib/kuber_kit/core/configuration.rb +26 -24
  19. data/lib/kuber_kit/core/configuration_definition.rb +17 -10
  20. data/lib/kuber_kit/core/configuration_factory.rb +10 -9
  21. data/lib/kuber_kit/core/configuration_store.rb +2 -2
  22. data/lib/kuber_kit/core/image_store.rb +2 -2
  23. data/lib/kuber_kit/core/service_store.rb +2 -2
  24. data/lib/kuber_kit/image_compiler/compiler.rb +3 -1
  25. data/lib/kuber_kit/image_compiler/image_builder.rb +9 -1
  26. data/lib/kuber_kit/service_deployer/strategies/docker.rb +23 -5
  27. data/lib/kuber_kit/service_deployer/strategies/docker_compose.rb +4 -4
  28. data/lib/kuber_kit/service_deployer/strategies/kubernetes.rb +3 -1
  29. data/lib/kuber_kit/shell/commands/docker_commands.rb +52 -11
  30. data/lib/kuber_kit/shell/commands/docker_compose_commands.rb +1 -1
  31. data/lib/kuber_kit/shell/local_shell.rb +6 -6
  32. data/lib/kuber_kit/shell/ssh_shell.rb +4 -4
  33. data/lib/kuber_kit/tools/logger_factory.rb +1 -1
  34. data/lib/kuber_kit/ui/api.rb +48 -0
  35. data/lib/kuber_kit/ui/debug.rb +31 -0
  36. data/lib/kuber_kit/ui/interactive.rb +15 -0
  37. data/lib/kuber_kit/ui/simple.rb +34 -5
  38. data/lib/kuber_kit/version.rb +1 -1
  39. metadata +10 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8321dfb87de00ef987aa2c826e5310fd721664135b90e194562a9c9f26ad044e
4
- data.tar.gz: dccbfdc6df8ed8bedd6e6d30ddfd576c42c1a12ec36aa465769a1fcc207d38af
3
+ metadata.gz: b6b58c988d13591ad950347cc3c2af370ab1604006d1ad0d04cf9cf43093ca36
4
+ data.tar.gz: 9b821db9a6f199ba10d9c8e509ba8f20eba2f91ecf400254f179d8e8099e2a82
5
5
  SHA512:
6
- metadata.gz: cde945512a525f1ef577f540ae3919bc602d442fb44eb14505fe2a4761ad1c15061f9bab1540b9b8de2592cf4d4f4f7396bfe451499af45cd6198659ad7cfaeb
7
- data.tar.gz: cca667290f77ff94934ce302666655d1bdefc414f074915c8a6d091590786b20ff2aa26a04c02f9d07b5e3c88f2e48439c3cbe71add7d374ea255deda753e125
6
+ metadata.gz: 911c9304545c3182c42d8dab5dcdb52208b59479318cf8324d8b0654a3315865c73fa10f430fbe16618a1deae5fabeb45a783fa6e3430e2da86777d06689987e
7
+ data.tar.gz: bf884a9e9f0cbbc35b88069d532baa021e973ad425c0bd9b2236aac12736448c53d99798da8abbcab1bf284484de5ac850bbee5e2cf0d7d8004326ceb836271c
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Rspec
9
+
10
+ on:
11
+ push:
12
+ branches: [ main ]
13
+ pull_request:
14
+ branches: [ main ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.5', '2.7']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rspec spec/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kuber_kit (0.3.9)
4
+ kuber_kit (0.4.2)
5
5
  cli-ui
6
6
  contracts-lite
7
7
  dry-auto_inject
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # KuberKit
2
2
 
3
- [![Codeship Status for ArtStation/kuber_kit](https://app.codeship.com/projects/1286f0a6-3f90-4c1b-b426-721ed8a6571b/status?branch=master)](https://app.codeship.com/projects/417264)
3
+ [![Rspec](https://github.com/ArtStation/kuber_kit/workflows/Rspec/badge.svg)](https://github.com/ArtStation/kuber_kit/actions?query=workflow%3ARspec)
4
4
 
5
5
  Solution for building & deploying applications on Kubernetes, written in Ruby.
6
6
 
data/TODO.md CHANGED
@@ -1,8 +1,7 @@
1
1
  - https://ttytoolkit.org/
2
2
  - kit status should show the list of services and their status, with ability to select & view logs
3
- - list services and require confirmation before deployment
4
- - add kit logs support, should work similar to kit attach
5
3
  - allow deploying only services enabled for specific configuration
6
4
  - find a way to always deploy some service, e.g. for migrations and env_files
7
5
  - template should be able to set default attributes
8
- - template should be able to depend on image?
6
+ - template should be able to depend on image?
7
+ - cleanup image builds older than some date
@@ -2,4 +2,5 @@ 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
+ .deployer_require_confirimation
5
6
  #.use_build_server(:remote_bs)
@@ -9,5 +9,5 @@ KuberKit.add_artifact(
9
9
  KuberKit.add_artifact(
10
10
  KuberKit::Core::Artifacts::Git
11
11
  .new(:kuber_kit_repo)
12
- .setup(remote_url: "git@github.com:ArtStation/kuber_kit.git")
12
+ .setup(remote_url: "git@github.com:ArtStation/kuber_kit.git", branch: "main")
13
13
  )
@@ -0,0 +1,12 @@
1
+ KuberKit
2
+ .define_service(:docker_app)
3
+ .images(:ruby_app)
4
+ .deployer_strategy(:docker)
5
+ .attributes(
6
+ deployer: {
7
+ detached: true,
8
+ image_name: :ruby_app,
9
+ container_name: "test_docker_app",
10
+ delete_if_exists: true
11
+ }
12
+ )
@@ -177,6 +177,8 @@ module KuberKit
177
177
  module UI
178
178
  autoload :Interactive, 'ui/interactive'
179
179
  autoload :Simple, 'ui/simple'
180
+ autoload :Debug, 'ui/debug'
181
+ autoload :Api, 'ui/api'
180
182
  end
181
183
 
182
184
  autoload :CLI, 'cli'
@@ -205,12 +207,12 @@ module KuberKit
205
207
  @current_configuration = nil
206
208
  end
207
209
 
208
- def set_debug_mode(value)
209
- @debug_mode = value
210
+ def set_ui_mode(value)
211
+ @ui_mode = value
210
212
  end
211
213
 
212
- def debug_mode?
213
- !!@debug_mode
214
+ def ui_mode
215
+ @ui_mode
214
216
  end
215
217
 
216
218
  def deprecation_warnings_disabled?
@@ -1,13 +1,10 @@
1
1
  class KuberKit::Actions::ConfigurationLoader
2
- APP_CONFIG_FILENAME = "config.rb".freeze
3
-
4
2
  include KuberKit::Import[
5
3
  "core.registry_store",
6
4
  "core.image_store",
7
5
  "core.service_store",
8
6
  "core.configuration_store",
9
7
  "artifacts_sync.artifacts_updater",
10
- "tools.logger",
11
8
  "shell.local_shell",
12
9
  "ui",
13
10
  "configs"
@@ -16,29 +13,24 @@ class KuberKit::Actions::ConfigurationLoader
16
13
  Contract Hash => Any
17
14
  def call(options)
18
15
  root_path = options[:path] || File.join(Dir.pwd, configs.kuber_kit_dirname)
19
-
20
- # require config file first, in case if other dirs are overriden in config
21
- config_file_path = File.join(root_path, APP_CONFIG_FILENAME)
22
- if File.exists?(config_file_path)
23
- require config_file_path
24
- end
25
-
26
16
  images_path = options[:images_path] || File.join(root_path, configs.images_dirname)
27
17
  services_path = options[:services_path] || File.join(root_path, configs.services_dirname)
28
18
  infra_path = options[:infra_path] || File.join(root_path, configs.infra_dirname)
29
19
  configurations_path = options[:configurations_path] || File.join(root_path, configs.configurations_dirname)
30
20
  configuration_name = ENV["KUBER_KIT_CONFIGURATION"] || options[:configuration]
31
21
 
32
- logger.info "Launching kuber_kit with:"
33
- logger.info " Root path: #{root_path.to_s.yellow}"
34
- logger.info " Images path: #{images_path.to_s.yellow}"
35
- logger.info " Services path: #{services_path.to_s.yellow}"
36
- logger.info " Infrastructure path: #{infra_path.to_s.yellow}"
37
- logger.info " Configurations path: #{configurations_path.to_s.yellow}"
38
- logger.info " Configuration name: #{configuration_name.to_s.yellow}"
22
+ ui.print_debug "ConfigurationLoader", "Launching kuber_kit with:"
23
+ ui.print_debug "ConfigurationLoader", " Root path: #{root_path.to_s.yellow}"
24
+ ui.print_debug "ConfigurationLoader", " Images path: #{images_path.to_s.yellow}"
25
+ ui.print_debug "ConfigurationLoader", " Services path: #{services_path.to_s.yellow}"
26
+ ui.print_debug "ConfigurationLoader", " Infrastructure path: #{infra_path.to_s.yellow}"
27
+ ui.print_debug "ConfigurationLoader", " Configurations path: #{configurations_path.to_s.yellow}"
28
+ ui.print_debug "ConfigurationLoader", " Configuration name: #{configuration_name.to_s.yellow}"
29
+
30
+ ui.print_info("Logs", "See logs at: #{configs.log_file_path}")
39
31
 
40
32
  unless File.exists?(root_path)
41
- ui.print_warning "WARNING", "KuberKit root path #{root_path} doesn't exist. You may want to pass it --path parameter."
33
+ ui.print_warning "ConfigurationLoader", "KuberKit root path #{root_path} doesn't exist. You may want to pass it --path parameter."
42
34
  end
43
35
 
44
36
  if Gem::Version.new(KuberKit::VERSION) < Gem::Version.new(configs.kuber_kit_min_version)
@@ -72,6 +64,7 @@ class KuberKit::Actions::ConfigurationLoader
72
64
  true
73
65
  rescue KuberKit::Error => e
74
66
  ui.print_error("Error", e.message)
67
+
75
68
  false
76
69
  end
77
70
 
@@ -104,6 +97,6 @@ class KuberKit::Actions::ConfigurationLoader
104
97
  require(path)
105
98
  end
106
99
  rescue KuberKit::Shell::AbstractShell::DirNotFoundError
107
- logger.warn("Directory with infrastructure not found: #{infra_path}")
100
+ ui.print_warning("ConfigurationLoader", "Directory with infrastructure not found: #{infra_path}")
108
101
  end
109
102
  end
@@ -15,6 +15,7 @@ class KuberKit::Actions::EnvFileReader
15
15
  true
16
16
  rescue KuberKit::Error => e
17
17
  ui.print_error("Error", e.message)
18
+
18
19
  false
19
20
  end
20
21
  end
@@ -3,7 +3,6 @@ class KuberKit::Actions::ImageCompiler
3
3
  "image_compiler.image_dependency_resolver",
4
4
  "image_compiler.build_server_pool_factory",
5
5
  "shell.local_shell",
6
- "tools.logger",
7
6
  "ui",
8
7
  image_compiler: "image_compiler.action_handler",
9
8
  ]
@@ -13,14 +12,17 @@ class KuberKit::Actions::ImageCompiler
13
12
  build_id = generate_build_id
14
13
  build_server_pool = build_server_pool_factory.create()
15
14
 
15
+ compiled_images = []
16
+ compilation_result = {}
16
17
  image_dependency_resolver.each_with_deps(image_names) do |dep_image_names|
17
18
  result = compile_simultaneously(dep_image_names, build_id, build_server_pool)
18
- abort unless result
19
+ compiled_images += dep_image_names
20
+ compilation_result = compilation_result.merge(result)
19
21
  end
20
22
 
21
23
  build_server_pool.disconnect_all
22
24
 
23
- true
25
+ { images: compiled_images, compilation: compilation_result }
24
26
  rescue KuberKit::Error => e
25
27
  ui.print_error("Error", e.message)
26
28
 
@@ -30,20 +32,22 @@ class KuberKit::Actions::ImageCompiler
30
32
  private
31
33
  def compile_simultaneously(image_names, build_id, build_server_pool)
32
34
  task_group = ui.create_task_group
35
+ compiler_result = {}
33
36
  image_names.map do |image_name|
34
37
 
35
- logger.info("Started compiling: #{image_name.to_s.green}")
38
+ ui.print_debug("ImageCompiler", "Started compiling: #{image_name.to_s.green}")
36
39
  task_group.add("Compiling #{image_name.to_s.yellow}") do |task|
37
40
  shell = build_server_pool.get_shell
38
41
 
39
- image_compiler.call(shell, image_name, build_id)
42
+ compiler_result[image_name] = image_compiler.call(shell, image_name, build_id)
40
43
 
41
44
  task.update_title("Compiled #{image_name.to_s.green}")
42
- logger.info("Finished compiling: #{image_name.to_s.green}")
45
+ ui.print_debug("ImageCompiler", "Finished compiling: #{image_name}")
43
46
  end
44
47
 
45
48
  end
46
49
  task_group.wait
50
+ compiler_result
47
51
  end
48
52
 
49
53
  def generate_build_id
@@ -4,17 +4,17 @@ class KuberKit::Actions::ServiceDeployer
4
4
  "service_deployer.service_list_resolver",
5
5
  "core.service_store",
6
6
  "shell.local_shell",
7
- "tools.logger",
8
7
  "ui",
9
8
  service_deployer: "service_deployer.action_handler",
10
9
  ]
11
10
 
12
11
  Contract KeywordArgs[
13
- services: Maybe[ArrayOf[String]],
14
- tags: Maybe[ArrayOf[String]],
15
- skip_compile: Maybe[Bool],
12
+ services: Maybe[ArrayOf[String]],
13
+ tags: Maybe[ArrayOf[String]],
14
+ skip_compile: Maybe[Bool],
15
+ require_confirmation: Maybe[Bool],
16
16
  ] => Any
17
- def call(services:, tags:, skip_compile: false)
17
+ def call(services:, tags:, skip_compile: false, require_confirmation: false)
18
18
  if services.empty? && tags.empty?
19
19
  services, tags = show_tags_selection
20
20
  end
@@ -25,7 +25,16 @@ class KuberKit::Actions::ServiceDeployer
25
25
  )
26
26
 
27
27
  unless service_names.any?
28
- ui.print_warning "WARNING", "No service found with given options, nothing will be deployed."
28
+ ui.print_warning "ServiceDeployer", "No service found with given options, nothing will be deployed."
29
+ return false
30
+ end
31
+
32
+ services_list = service_names.map(&:to_s).map(&:yellow).join(", ")
33
+ ui.print_info "ServiceDeployer", "The following services will be deployed: #{services_list}"
34
+
35
+ if require_confirmation
36
+ result = ui.prompt("Please confirm to continue deployment", ["confirm".green, "cancel".red])
37
+ return false unless result == "confirm".green
29
38
  end
30
39
 
31
40
  services = service_names.map do |service_name|
@@ -35,9 +44,9 @@ class KuberKit::Actions::ServiceDeployer
35
44
  images_names = services.map(&:images).flatten.uniq
36
45
 
37
46
  compile_images(images_names) unless skip_compile
38
- deploy_services(service_names)
47
+ deployment_result = deploy_services(service_names)
39
48
 
40
- true
49
+ { services: service_names, deployment: deployment_result }
41
50
  rescue KuberKit::Error => e
42
51
  ui.print_error("Error", e.message)
43
52
 
@@ -47,18 +56,22 @@ class KuberKit::Actions::ServiceDeployer
47
56
  def deploy_services(service_names)
48
57
  task_group = ui.create_task_group
49
58
 
59
+ deployer_result = {}
60
+
50
61
  service_names.each do |service_name|
51
62
 
52
- logger.info("Started deploying: #{service_name.to_s.green}")
63
+ ui.print_debug("ServiceDeployer", "Started deploying: #{service_name.to_s.green}")
53
64
  task_group.add("Deploying #{service_name.to_s.yellow}") do |task|
54
- service_deployer.call(local_shell, service_name.to_sym)
65
+ deployer_result[service_name] = service_deployer.call(local_shell, service_name.to_sym)
55
66
 
56
67
  task.update_title("Deployed #{service_name.to_s.green}")
57
- logger.info("Finished deploying: #{service_name.to_s.green}")
68
+ ui.print_debug("ServiceDeployer", "Finished deploying: #{service_name.to_s.green}")
58
69
  end
59
70
  end
60
71
 
61
72
  task_group.wait
73
+
74
+ deployer_result
62
75
  end
63
76
 
64
77
  def compile_images(images_names)
@@ -14,6 +14,7 @@ class KuberKit::Actions::TemplateReader
14
14
  true
15
15
  rescue KuberKit::Error => e
16
16
  ui.print_error("Error", e.message)
17
+
17
18
  false
18
19
  end
19
20
  end
@@ -4,7 +4,8 @@ class KuberKit::ArtifactsSync::ArtifactsUpdater
4
4
  include KuberKit::Import[
5
5
  "artifacts_sync.git_artifact_resolver",
6
6
  "artifacts_sync.null_artifact_resolver",
7
- "tools.logger"
7
+
8
+ "ui"
8
9
  ]
9
10
 
10
11
  def use_resolver(artifact_resolver, artifact_class:)
@@ -23,7 +24,7 @@ class KuberKit::ArtifactsSync::ArtifactsUpdater
23
24
  artifacts.each do |artifact|
24
25
  resolver = @@resolvers[artifact.class]
25
26
 
26
- logger.info "Updating artifact #{artifact.name.to_s.green}"
27
+ ui.print_debug "ArtifactUpdater", "Updating artifact #{artifact.name.to_s.green}"
27
28
 
28
29
  raise ResolverNotFoundError, "Can't find resolver for artifact #{artifact}" if resolver.nil?
29
30
 
@@ -1,16 +1,19 @@
1
1
  require 'thor'
2
2
 
3
3
  class KuberKit::CLI < Thor
4
+ APP_CONFIG_FILENAME = "config.rb".freeze
5
+
4
6
  class_option :path, :type => :string
5
7
  class_option :images_path, :type => :string
6
8
  class_option :infra_path, :type => :string
7
9
  class_option :configurations_path, :type => :string
10
+ class_option :ui, :type => :string, :desc => "UI mode (interactive|debug|simple)"
8
11
  class_option :debug, :type => :boolean, aliases: ["-d"]
9
12
  class_option :configuration, :type => :string, aliases: ["-C"]
10
13
 
11
14
  desc "compile IMAGE_NAMES", "Compile image with IMAGE_NAMES (comma-separated)"
12
15
  def compile(image_names_str)
13
- KuberKit.set_debug_mode(options[:debug])
16
+ setup(options)
14
17
 
15
18
  image_names = image_names_str.split(",").map(&:strip).map(&:to_sym)
16
19
 
@@ -18,48 +21,43 @@ class KuberKit::CLI < Thor
18
21
  result = KuberKit::Container['actions.image_compiler'].call(image_names, options)
19
22
  end
20
23
 
21
- logger = KuberKit::Container['tools.logger']
22
24
  if result
23
- logger.info("---------------------------")
24
- logger.info("Image compilation finished!")
25
- logger.info("---------------------------")
25
+ print_result("Image compilation finished!", result: result)
26
26
  else
27
- logger.info("-------------------------".red)
28
- logger.info("Image compilation failed!".red)
29
- logger.info("-------------------------".red)
27
+ exit 1
30
28
  end
31
29
  end
32
30
 
33
31
  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"]
36
- method_option :skip_compile, :type => :boolean, aliases: ["-B"]
32
+ method_option :services, :type => :array, aliases: ["-s"]
33
+ method_option :tags, :type => :array, aliases: ["-t"]
34
+ method_option :skip_compile, :type => :boolean, aliases: ["-B"]
35
+ method_option :require_confirmation, :type => :boolean, aliases: ["-r"]
37
36
  def deploy
38
- KuberKit.set_debug_mode(options[:debug])
37
+ setup(options)
39
38
 
40
39
  if KuberKit::Container['actions.configuration_loader'].call(options)
40
+ require_confirmation = options[:require_confirmation] ||
41
+ KuberKit.current_configuration.deployer_require_confirimation ||
42
+ false
41
43
  result = KuberKit::Container['actions.service_deployer'].call(
42
- services: options[:services] || [],
43
- tags: options[:tags] || [],
44
- skip_compile: options[:skip_compile] || false
44
+ services: options[:services] || [],
45
+ tags: options[:tags] || [],
46
+ skip_compile: options[:skip_compile] || false,
47
+ require_confirmation: require_confirmation
45
48
  )
46
49
  end
47
50
 
48
- logger = KuberKit::Container['tools.logger']
49
51
  if result
50
- logger.info("---------------------------")
51
- logger.info("Service deployment finished!")
52
- logger.info("---------------------------")
52
+ print_result("Service deployment finished!", result: result)
53
53
  else
54
- logger.info("-------------------------".red)
55
- logger.info("Service deployment failed!".red)
56
- logger.info("-------------------------".red)
54
+ exit 1
57
55
  end
58
56
  end
59
57
 
60
58
  desc "env ENV_FILE_NAME", "Return content of Env File ENV_FILE_NAME"
61
59
  def env(env_file_name)
62
- KuberKit.set_debug_mode(options[:debug])
60
+ setup(options)
63
61
 
64
62
  if KuberKit::Container['actions.configuration_loader'].call(options)
65
63
  KuberKit::Container['actions.env_file_reader'].call(env_file_name.to_sym, options)
@@ -68,7 +66,7 @@ class KuberKit::CLI < Thor
68
66
 
69
67
  desc "template TEMPLATE_NAME", "Return content of Template TEMPLATE_NAME"
70
68
  def template(template_name)
71
- KuberKit.set_debug_mode(options[:debug])
69
+ setup(options)
72
70
 
73
71
  if KuberKit::Container['actions.configuration_loader'].call(options)
74
72
  KuberKit::Container['actions.template_reader'].call(template_name.to_sym, options)
@@ -77,7 +75,7 @@ class KuberKit::CLI < Thor
77
75
 
78
76
  desc "service SERVICE_NAME", "Return content of Service SERVICE_NAME"
79
77
  def service(service_name)
80
- KuberKit.set_debug_mode(options[:debug])
78
+ setup(options)
81
79
 
82
80
  if KuberKit::Container['actions.configuration_loader'].call(options)
83
81
  KuberKit::Container['actions.service_reader'].call(service_name.to_sym, options)
@@ -86,7 +84,7 @@ class KuberKit::CLI < Thor
86
84
 
87
85
  desc "apply FILE_PATH", "Apply FILE_PATH with kubectl"
88
86
  def apply(file_path)
89
- KuberKit.set_debug_mode(options[:debug])
87
+ setup(options)
90
88
 
91
89
  if KuberKit::Container['actions.configuration_loader'].call(options)
92
90
  KuberKit::Container['actions.kubectl_applier'].call(File.expand_path(file_path), options)
@@ -95,26 +93,26 @@ class KuberKit::CLI < Thor
95
93
 
96
94
  desc "attach POD_NAME", "Attach to POD_NAME using kubectl"
97
95
  def attach(pod_name = nil)
98
- KuberKit.set_debug_mode(options[:debug])
96
+ setup(options)
99
97
 
100
98
  if KuberKit::Container['actions.configuration_loader'].call(options)
101
99
  KuberKit::Container['actions.kubectl_attacher'].call(pod_name, options)
102
100
  end
103
101
  end
104
102
 
105
- desc "launch console in POD_NAME", "Attach to POD_NAME using kubectl & launch bin/console"
103
+ desc "console POD_NAME", "Attach to POD_NAME using kubectl & launch bin/console"
106
104
  def console(pod_name = nil)
107
- KuberKit.set_debug_mode(options[:debug])
105
+ setup(options)
108
106
 
109
107
  if KuberKit::Container['actions.configuration_loader'].call(options)
110
108
  KuberKit::Container['actions.kubectl_console'].call(pod_name, options)
111
109
  end
112
110
  end
113
111
 
114
- desc "show logs for POD_NAME", "Show logs for POD_NAME using kubectl"
112
+ desc "logs POD_NAME", "Show logs for POD_NAME using kubectl"
115
113
  method_option :follow, :type => :boolean, aliases: ["-f"]
116
114
  def logs(pod_name = nil)
117
- KuberKit.set_debug_mode(options[:debug])
115
+ setup(options)
118
116
 
119
117
  if KuberKit::Container['actions.configuration_loader'].call(options)
120
118
  KuberKit::Container['actions.kubectl_logs'].call(pod_name, options)
@@ -129,4 +127,24 @@ class KuberKit::CLI < Thor
129
127
  def self.exit_on_failure?
130
128
  true
131
129
  end
130
+
131
+ private
132
+ def setup(options)
133
+ if options[:debug]
134
+ KuberKit.set_ui_mode(:debug)
135
+ elsif options[:ui]
136
+ KuberKit.set_ui_mode(options[:ui].to_sym)
137
+ end
138
+
139
+ # We should load config before loading any bean, to make sure that bean won't be built with default config
140
+ root_path = options[:path] || File.join(Dir.pwd, KuberKit::Container['configs'].kuber_kit_dirname)
141
+ config_file_path = File.join(root_path, APP_CONFIG_FILENAME)
142
+ if File.exists?(config_file_path)
143
+ require config_file_path
144
+ end
145
+ end
146
+
147
+ def print_result(message, data = {})
148
+ KuberKit::Container['ui'].print_result(message, data)
149
+ end
132
150
  end