kuber_kit 0.3.9 → 0.4.2

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