kuber_kit 0.3.11 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a8482307f03712fa9621bd81744aa15292d0378a24316c907050ddb1c379981
4
- data.tar.gz: 28c6b0a83c41d0e221a62e0c45d034a6ecd28722ecb3e98a65471bcaf206372e
3
+ metadata.gz: 88b8c2ffe3973bc966b245ceba37047030243d88119fd672db31efb002c67f86
4
+ data.tar.gz: 5fafd218e63a669da3951b723f7167700704902006d4dd4fef13541e8ad1559b
5
5
  SHA512:
6
- metadata.gz: 9034b084c1eb1db7dd70ad33f067a19e093bdaaf040aa3b65473d5e823570e35480b0915d1b0274a40ffda74c218e7aaa24ee919935bc1424d579e7c7cbf3ec5
7
- data.tar.gz: 39bab8853fed26799be1b3b7e1f708be89c82e9082e70c05d5746fd99e11ab52f45a822bfcba572317c6a6128e7fbc823a7b9d9313379a93bc288bf9d7c80ba2
6
+ metadata.gz: a1c79c0056820500948580504c533be1ba2f9ceafe282802a0bbe44021a34196706c23eb97b05e6905efc26f565719fd9a1c668ec99afdbda642261ad6e8b6e1
7
+ data.tar.gz: 3e4e33cc19ff7917ee5210dcdecae40ed22cb29d93f884bdb27adf3ec8565d3397ee8715ed8e89e75ae0316a0cf9192075d5afd66ba55caf3fe4f060064c88b9
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kuber_kit (0.3.11)
4
+ kuber_kit (0.4.0)
5
5
  cli-ui
6
6
  contracts-lite
7
7
  dry-auto_inject
@@ -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?
@@ -5,7 +5,6 @@ class KuberKit::Actions::ConfigurationLoader
5
5
  "core.service_store",
6
6
  "core.configuration_store",
7
7
  "artifacts_sync.artifacts_updater",
8
- "tools.logger",
9
8
  "shell.local_shell",
10
9
  "ui",
11
10
  "configs"
@@ -20,18 +19,18 @@ class KuberKit::Actions::ConfigurationLoader
20
19
  configurations_path = options[:configurations_path] || File.join(root_path, configs.configurations_dirname)
21
20
  configuration_name = ENV["KUBER_KIT_CONFIGURATION"] || options[:configuration]
22
21
 
23
- logger.info "Launching kuber_kit with:"
24
- logger.info " Root path: #{root_path.to_s.yellow}"
25
- logger.info " Images path: #{images_path.to_s.yellow}"
26
- logger.info " Services path: #{services_path.to_s.yellow}"
27
- logger.info " Infrastructure path: #{infra_path.to_s.yellow}"
28
- logger.info " Configurations path: #{configurations_path.to_s.yellow}"
29
- 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}"
30
29
 
31
30
  ui.print_info("Logs", "See logs at: #{configs.log_file_path}")
32
31
 
33
32
  unless File.exists?(root_path)
34
- 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."
35
34
  end
36
35
 
37
36
  if Gem::Version.new(KuberKit::VERSION) < Gem::Version.new(configs.kuber_kit_min_version)
@@ -65,6 +64,7 @@ class KuberKit::Actions::ConfigurationLoader
65
64
  true
66
65
  rescue KuberKit::Error => e
67
66
  ui.print_error("Error", e.message)
67
+
68
68
  false
69
69
  end
70
70
 
@@ -97,6 +97,6 @@ class KuberKit::Actions::ConfigurationLoader
97
97
  require(path)
98
98
  end
99
99
  rescue KuberKit::Shell::AbstractShell::DirNotFoundError
100
- logger.warn("Directory with infrastructure not found: #{infra_path}")
100
+ ui.print_warning("ConfigurationLoader", "Directory with infrastructure not found: #{infra_path}")
101
101
  end
102
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,7 +4,6 @@ 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
  ]
@@ -25,7 +24,7 @@ class KuberKit::Actions::ServiceDeployer
25
24
  )
26
25
 
27
26
  unless service_names.any?
28
- ui.print_warning "WARNING", "No service found with given options, nothing will be deployed."
27
+ ui.print_warning "ServiceDeployer", "No service found with given options, nothing will be deployed."
29
28
  end
30
29
 
31
30
  services = service_names.map do |service_name|
@@ -35,9 +34,9 @@ class KuberKit::Actions::ServiceDeployer
35
34
  images_names = services.map(&:images).flatten.uniq
36
35
 
37
36
  compile_images(images_names) unless skip_compile
38
- deploy_services(service_names)
37
+ deployment_result = deploy_services(service_names)
39
38
 
40
- true
39
+ { services: service_names, deployment: deployment_result }
41
40
  rescue KuberKit::Error => e
42
41
  ui.print_error("Error", e.message)
43
42
 
@@ -47,18 +46,22 @@ class KuberKit::Actions::ServiceDeployer
47
46
  def deploy_services(service_names)
48
47
  task_group = ui.create_task_group
49
48
 
49
+ deployer_result = {}
50
+
50
51
  service_names.each do |service_name|
51
52
 
52
- logger.info("Started deploying: #{service_name.to_s.green}")
53
+ ui.print_debug("ServiceDeployer", "Started deploying: #{service_name.to_s.green}")
53
54
  task_group.add("Deploying #{service_name.to_s.yellow}") do |task|
54
- service_deployer.call(local_shell, service_name.to_sym)
55
+ deployer_result[service_name] = service_deployer.call(local_shell, service_name.to_sym)
55
56
 
56
57
  task.update_title("Deployed #{service_name.to_s.green}")
57
- logger.info("Finished deploying: #{service_name.to_s.green}")
58
+ ui.print_debug("ServiceDeployer", "Finished deploying: #{service_name.to_s.green}")
58
59
  end
59
60
  end
60
61
 
61
62
  task_group.wait
63
+
64
+ deployer_result
62
65
  end
63
66
 
64
67
  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
 
@@ -7,6 +7,7 @@ class KuberKit::CLI < Thor
7
7
  class_option :images_path, :type => :string
8
8
  class_option :infra_path, :type => :string
9
9
  class_option :configurations_path, :type => :string
10
+ class_option :ui, :type => :string, :desc => "UI mode (interactive|debug|simple)"
10
11
  class_option :debug, :type => :boolean, aliases: ["-d"]
11
12
  class_option :configuration, :type => :string, aliases: ["-C"]
12
13
 
@@ -20,15 +21,10 @@ class KuberKit::CLI < Thor
20
21
  result = KuberKit::Container['actions.image_compiler'].call(image_names, options)
21
22
  end
22
23
 
23
- logger = KuberKit::Container['tools.logger']
24
24
  if result
25
- logger.info("---------------------------")
26
- logger.info("Image compilation finished!")
27
- logger.info("---------------------------")
25
+ print_result("Image compilation finished!", result: result)
28
26
  else
29
- logger.info("-------------------------".red)
30
- logger.info("Image compilation failed!".red)
31
- logger.info("-------------------------".red)
27
+ exit 1
32
28
  end
33
29
  end
34
30
 
@@ -47,15 +43,10 @@ class KuberKit::CLI < Thor
47
43
  )
48
44
  end
49
45
 
50
- logger = KuberKit::Container['tools.logger']
51
46
  if result
52
- logger.info("---------------------------")
53
- logger.info("Service deployment finished!")
54
- logger.info("---------------------------")
47
+ print_result("Service deployment finished!", result: result)
55
48
  else
56
- logger.info("-------------------------".red)
57
- logger.info("Service deployment failed!".red)
58
- logger.info("-------------------------".red)
49
+ exit 1
59
50
  end
60
51
  end
61
52
 
@@ -134,7 +125,11 @@ class KuberKit::CLI < Thor
134
125
 
135
126
  private
136
127
  def setup(options)
137
- KuberKit.set_debug_mode(options[:debug])
128
+ if options[:debug]
129
+ KuberKit.set_ui_mode(:debug)
130
+ elsif options[:ui]
131
+ KuberKit.set_ui_mode(options[:ui].to_sym)
132
+ end
138
133
 
139
134
  # We should load config before loading any bean, to make sure that bean won't be built with default config
140
135
  root_path = options[:path] || File.join(Dir.pwd, KuberKit::Container['configs'].kuber_kit_dirname)
@@ -143,4 +138,8 @@ class KuberKit::CLI < Thor
143
138
  require config_file_path
144
139
  end
145
140
  end
141
+
142
+ def print_result(message, data = {})
143
+ KuberKit::Container['ui'].print_result(message, data)
144
+ end
146
145
  end
@@ -258,8 +258,12 @@ class KuberKit::Container
258
258
  end
259
259
 
260
260
  register "ui" do
261
- if KuberKit.debug_mode?
261
+ if KuberKit.ui_mode == :debug
262
+ KuberKit::UI::Debug.new
263
+ elsif KuberKit.ui_mode == :simple
262
264
  KuberKit::UI::Simple.new
265
+ elsif KuberKit.ui_mode == :api
266
+ KuberKit::UI::Api.new
263
267
  else
264
268
  KuberKit::UI::Interactive.new
265
269
  end
@@ -3,7 +3,7 @@ class KuberKit::Core::ConfigurationStore
3
3
  "core.configuration_factory",
4
4
  "core.configuration_definition_factory",
5
5
  "shell.local_shell",
6
- "tools.logger"
6
+ "ui"
7
7
  ]
8
8
 
9
9
  def define(configuration_name)
@@ -33,7 +33,7 @@ class KuberKit::Core::ConfigurationStore
33
33
  load_definition(path)
34
34
  end
35
35
  rescue KuberKit::Shell::AbstractShell::DirNotFoundError
36
- logger.warn("Directory with configurations not found: #{dir_path}")
36
+ ui.print_warning("ConfigurationStore", "Directory with configurations not found: #{dir_path}")
37
37
  []
38
38
  end
39
39
 
@@ -3,7 +3,7 @@ class KuberKit::Core::ImageStore
3
3
  "core.image_factory",
4
4
  "core.image_definition_factory",
5
5
  "shell.local_shell",
6
- "tools.logger"
6
+ "ui"
7
7
  ]
8
8
 
9
9
  def define(image_name, image_dir = nil)
@@ -33,7 +33,7 @@ class KuberKit::Core::ImageStore
33
33
  load_definition(path)
34
34
  end
35
35
  rescue KuberKit::Shell::AbstractShell::DirNotFoundError
36
- logger.warn("Directory with images not found: #{dir_path}")
36
+ ui.print_warning("ImageStore", "Directory with images not found: #{dir_path}")
37
37
  []
38
38
  end
39
39
 
@@ -3,7 +3,7 @@ class KuberKit::Core::ServiceStore
3
3
  "core.service_factory",
4
4
  "core.service_definition_factory",
5
5
  "shell.local_shell",
6
- "tools.logger"
6
+ "ui",
7
7
  ]
8
8
 
9
9
  def define(service_name)
@@ -33,7 +33,7 @@ class KuberKit::Core::ServiceStore
33
33
  load_definition(path)
34
34
  end
35
35
  rescue KuberKit::Shell::AbstractShell::DirNotFoundError
36
- logger.warn("Directory with services not found: #{dir_path}")
36
+ ui.print_warning("ServiceStore", "Directory with services not found: #{dir_path}")
37
37
  []
38
38
  end
39
39
 
@@ -12,7 +12,9 @@ class KuberKit::ImageCompiler::Compiler
12
12
  context_helper = context_helper_factory.build_image_context(shell, image)
13
13
  image_build_dir_creator.create(shell, image, image_build_dir, context_helper: context_helper)
14
14
 
15
- image_builder.build(shell, image, image_build_dir, context_helper: context_helper)
15
+ result = image_builder.build(shell, image, image_build_dir, context_helper: context_helper)
16
16
  image_build_dir_creator.cleanup(shell, image_build_dir)
17
+
18
+ result
17
19
  end
18
20
  end
@@ -10,7 +10,13 @@ class KuberKit::ImageCompiler::ImageBuilder
10
10
  def build(shell, image, build_dir, context_helper: nil)
11
11
  image.before_build_callback.call(context_helper, build_dir) if image.before_build_callback
12
12
 
13
- docker_commands.build(shell, build_dir, ["-t=#{image.registry_url}"])
13
+ build_options = ["-t=#{image.registry_url}"]
14
+ # use quite option for api mode ui, so it will only return built image id
15
+ if KuberKit.ui_mode == :api
16
+ build_options << "-q"
17
+ end
18
+
19
+ build_result = docker_commands.build(shell, build_dir, build_options)
14
20
 
15
21
  version_tag = version_tag_builder.get_version
16
22
  docker_commands.tag(shell, image.registry_url, version_tag)
@@ -21,5 +27,7 @@ class KuberKit::ImageCompiler::ImageBuilder
21
27
  end
22
28
 
23
29
  image.after_build_callback.call(context_helper, build_dir) if image.after_build_callback
30
+
31
+ build_result
24
32
  end
25
33
  end
@@ -39,7 +39,7 @@ class KuberKit::ServiceDeployer::Strategies::Kubernetes < KuberKit::ServiceDeplo
39
39
  kubectl_commands.delete_resource(shell, resource_type, resource_name, kubeconfig_path: kubeconfig_path, namespace: namespace)
40
40
  end
41
41
 
42
- kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: namespace)
42
+ apply_result = kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: namespace)
43
43
 
44
44
  restart_enabled = strategy_options.fetch(:restart_if_exists, true)
45
45
  if restart_enabled && resource_exists
@@ -48,5 +48,7 @@ class KuberKit::ServiceDeployer::Strategies::Kubernetes < KuberKit::ServiceDeplo
48
48
  kubeconfig_path: kubeconfig_path, namespace: namespace
49
49
  )
50
50
  end
51
+
52
+ apply_result
51
53
  end
52
54
  end
@@ -3,7 +3,7 @@ class KuberKit::Shell::Commands::DockerCommands
3
3
  default_args = ["--rm=true"]
4
4
  args_list = (default_args + args).join(" ")
5
5
 
6
- shell.exec!(%Q{docker build #{build_dir} #{args_list}})
6
+ shell.exec!(%Q{docker image build #{build_dir} #{args_list}})
7
7
  end
8
8
 
9
9
  def tag(shell, image_name, tag_name)
@@ -29,8 +29,8 @@ class KuberKit::Shell::Commands::DockerCommands
29
29
  end
30
30
  end
31
31
 
32
- def container_exists?(shell, container_name)
33
- result = get_container_id(shell, container_name)
32
+ def container_exists?(shell, container_name, status: nil)
33
+ result = get_container_id(shell, container_name, status: status)
34
34
  result && result != ""
35
35
  end
36
36
 
@@ -38,15 +38,16 @@ class KuberKit::Shell::Commands::DockerCommands
38
38
  shell.exec!(%Q{docker rm -f #{container_name}})
39
39
  end
40
40
 
41
- def get_container_id(shell, container_name, only_healthy: false, status: "running")
41
+ def get_container_id(shell, container_name, only_healthy: false, status: nil)
42
42
  command_parts = []
43
43
  command_parts << "docker ps -a -q"
44
44
 
45
45
  if only_healthy
46
46
  command_parts << "--filter=\"health=healthy\""
47
47
  end
48
-
49
- command_parts << "--filter=\"status=#{status}\""
48
+ if status
49
+ command_parts << "--filter=\"status=#{status}\""
50
+ end
50
51
  command_parts << "--filter=\"name=#{container_name}\""
51
52
 
52
53
  shell.exec!(command_parts.join(" "))
@@ -2,16 +2,16 @@ require 'fileutils'
2
2
 
3
3
  class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
4
4
  include KuberKit::Import[
5
- "tools.logger",
6
5
  "shell.command_counter",
7
6
  "shell.rsync_commands",
7
+ "ui",
8
8
  ]
9
9
 
10
10
  def exec!(command, log_command: true)
11
11
  command_number = command_counter.get_number.to_s.rjust(2, "0")
12
12
 
13
13
  if log_command
14
- logger.info("Execute: [#{command_number}]: #{command.to_s.cyan}")
14
+ ui.print_debug("LocalShell", "Execute: [#{command_number}]: #{command.to_s.cyan}")
15
15
  end
16
16
 
17
17
  result = nil
@@ -20,7 +20,7 @@ class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
20
20
  end
21
21
 
22
22
  if result && result != "" && log_command
23
- logger.info("Finished [#{command_number}] with result: \n#{result.grey}")
23
+ ui.print_debug("LocalShell", "Finished [#{command_number}] with result: \n ----\n#{result.grey}\n ----")
24
24
  end
25
25
 
26
26
  if $?.exitstatus != 0
@@ -34,7 +34,7 @@ class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
34
34
  command_number = command_counter.get_number.to_s.rjust(2, "0")
35
35
 
36
36
  if log_command
37
- logger.info("Interactive: [#{command_number}]: #{command.to_s.cyan}")
37
+ ui.print_debug("LocalShell", "Interactive: [#{command_number}]: #{command.to_s.cyan}")
38
38
  end
39
39
 
40
40
  result = system(command)
@@ -57,7 +57,7 @@ class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
57
57
 
58
58
  File.write(file_path, content)
59
59
 
60
- logger.info("Created file #{file_path.to_s.cyan}\r\n#{content.grey}")
60
+ ui.print_debug("LocalShell", "Created file #{file_path.to_s.cyan}\r\n ----\r\n#{content.grey}\r\n ----")
61
61
 
62
62
  true
63
63
  end
@@ -2,7 +2,7 @@ require 'tempfile'
2
2
 
3
3
  class KuberKit::Shell::SshShell < KuberKit::Shell::LocalShell
4
4
  include KuberKit::Import[
5
- "tools.logger",
5
+ "ui",
6
6
  "shell.command_counter",
7
7
  "shell.rsync_commands",
8
8
  "shell.local_shell"
@@ -24,13 +24,13 @@ class KuberKit::Shell::SshShell < KuberKit::Shell::LocalShell
24
24
  command_number = command_counter.get_number.to_s.rjust(2, "0")
25
25
 
26
26
  if log_command
27
- logger.info("#{ssh_session.host.green} > Execute: [#{command_number}]: #{command.to_s.cyan}")
27
+ ui.print_debug("SshShell", "#{ssh_session.host.green} > Execute: [#{command_number}]: #{command.to_s.cyan}")
28
28
  end
29
29
 
30
30
  result = ssh_session.exec!(command)
31
31
 
32
32
  if result && result != "" && log_command
33
- logger.info("#{ssh_session.host.green} > Finished [#{command_number}] with result: \n#{result.grey}")
33
+ ui.print_debug("SshShell", "#{ssh_session.host.green} > Finished [#{command_number}] with result: \n#{result.grey}")
34
34
  end
35
35
 
36
36
  result
@@ -62,7 +62,7 @@ class KuberKit::Shell::SshShell < KuberKit::Shell::LocalShell
62
62
  sync(file.path, file_path)
63
63
  end
64
64
 
65
- logger.info("Created file #{file_path.to_s.cyan}\r\n#{content.grey}")
65
+ ui.print_debug("SshShell", "Created file #{file_path.to_s.cyan}\r\n ----\r\n#{content.grey}\r\n ----")
66
66
 
67
67
  true
68
68
  end
@@ -26,7 +26,7 @@ class KuberKit::Tools::LoggerFactory
26
26
  severity_text = severity.to_s
27
27
  severity_text = severity_text.colorize(severity_color) if severity_color
28
28
 
29
- if level == Logger::INFO
29
+ if level == Logger::DEBUG
30
30
  "#{datetime.strftime("%Y/%m/%d %H:%M:%S").grey} #{msg}\n"
31
31
  else
32
32
  "#{datetime.strftime("%Y/%m/%d %H:%M:%S").grey} #{severity_text.downcase}: #{msg}\n"
@@ -0,0 +1,48 @@
1
+ require 'json'
2
+ class KuberKit::UI::Api < KuberKit::UI::Simple
3
+ class Task < KuberKit::UI::Simple::Task
4
+ def print_started
5
+ # do nothing, api formatter should only show result
6
+ end
7
+
8
+ def print_finished
9
+ # do nothing, api formatter should only show result
10
+ end
11
+ end
12
+
13
+ def create_task_group
14
+ TaskGroup.new(KuberKit::UI::Api::Task)
15
+ end
16
+
17
+ def create_task(title, &block)
18
+ task = KuberKit::UI::Api::Task.new(title, &block)
19
+ task.execute
20
+ task.wait
21
+ end
22
+
23
+ def print_info(title, text)
24
+ logger.debug(text)
25
+ end
26
+
27
+ def print_error(title, text)
28
+ logger.debug(text)
29
+ print_json({error: text})
30
+ end
31
+
32
+ def print_warning(title, text)
33
+ logger.debug(text)
34
+ end
35
+
36
+ def print_debug(title, text)
37
+ logger.debug(text)
38
+ end
39
+
40
+ def print_result(message, data = {})
41
+ print_json({message: message}.merge(data))
42
+ end
43
+
44
+ protected
45
+ def print_json(data)
46
+ puts JSON.generate(data)
47
+ end
48
+ end
@@ -0,0 +1,31 @@
1
+ class KuberKit::UI::Debug < KuberKit::UI::Simple
2
+ def print_info(title, text)
3
+ print_text(text, color: String::Colors::BLUE)
4
+ end
5
+
6
+ def print_error(title, text)
7
+ print_text(text, color: String::Colors::RED)
8
+ end
9
+
10
+ def print_warning(title, text)
11
+ print_text(text, color: String::Colors::YELLOW)
12
+ logger.debug(text)
13
+ end
14
+
15
+ def print_debug(title, text)
16
+ print_text(text, color: nil)
17
+ logger.debug(text)
18
+ end
19
+
20
+ def print_result(message, data = {})
21
+ print_debug("Result", "---------------------------")
22
+ print_debug("Result", message)
23
+ print_debug("Result", "---------------------------")
24
+ end
25
+
26
+ protected
27
+ def print_text(text, color: nil)
28
+ colorized_message = color ? text.colorize(color) : text
29
+ puts " #{Time.now.strftime("%H:%M:%S").grey} #{colorized_message}"
30
+ end
31
+ end
@@ -1,6 +1,10 @@
1
1
  require 'cli/ui'
2
2
 
3
3
  class KuberKit::UI::Interactive
4
+ include KuberKit::Import[
5
+ "tools.logger",
6
+ ]
7
+
4
8
  class TaskGroup < CLI::UI::SpinGroup
5
9
  end
6
10
 
@@ -24,6 +28,17 @@ class KuberKit::UI::Interactive
24
28
 
25
29
  def print_warning(title, text)
26
30
  print_in_frame(title, text, color: :yellow)
31
+ logger.debug(text)
32
+ end
33
+
34
+ def print_debug(title, text)
35
+ logger.debug(text)
36
+ end
37
+
38
+ def print_result(message, data = {})
39
+ print_debug("Result", "---------------------------")
40
+ print_debug("Result", message)
41
+ print_debug("Result", "---------------------------")
27
42
  end
28
43
 
29
44
  def prompt(text, options, &callback)
@@ -1,19 +1,33 @@
1
1
  class KuberKit::UI::Simple
2
+ include KuberKit::Import[
3
+ "tools.logger",
4
+ ]
5
+
2
6
  class Task
3
7
  def initialize(title, &callback)
4
8
  @title = title
5
9
  @callback = callback
6
10
  end
7
11
 
12
+ def print_started
13
+ puts "- #{@title}"
14
+ end
15
+
16
+ def print_finished
17
+ puts "- #{@title.grey}"
18
+ end
19
+
8
20
  def execute
9
21
  if @thread
10
22
  raise "Already started execution of task '#{title}'"
11
23
  end
12
24
 
13
25
  @thread = Thread.new do
14
- puts "Start task: #{@title.green}"
26
+ Thread.current.abort_on_exception = true
27
+ Thread.current.report_on_exception = false
28
+ print_started
15
29
  @callback.call(self)
16
- puts "Finish task: #{@title.green}"
30
+ print_finished
17
31
  end
18
32
  end
19
33
 
@@ -30,8 +44,12 @@ class KuberKit::UI::Simple
30
44
  end
31
45
 
32
46
  class TaskGroup
47
+ def initialize(task_class)
48
+ @task_class = task_class
49
+ end
50
+
33
51
  def add(task_title, &task_block)
34
- task = Task.new(task_title, &task_block)
52
+ task = @task_class.new(task_title, &task_block)
35
53
  task.execute
36
54
  add_task(task)
37
55
  end
@@ -47,7 +65,7 @@ class KuberKit::UI::Simple
47
65
  end
48
66
 
49
67
  def create_task_group
50
- TaskGroup.new
68
+ TaskGroup.new(KuberKit::UI::Simple::Task)
51
69
  end
52
70
 
53
71
  def create_task(title, &block)
@@ -66,6 +84,17 @@ class KuberKit::UI::Simple
66
84
 
67
85
  def print_warning(title, text)
68
86
  print_text(title, text, color: String::Colors::YELLOW)
87
+ logger.debug(text)
88
+ end
89
+
90
+ def print_debug(title, text)
91
+ logger.debug(text)
92
+ end
93
+
94
+ def print_result(message, data = {})
95
+ print_debug("Result", "---------------------------")
96
+ print_debug("Result", message)
97
+ print_debug("Result", "---------------------------")
69
98
  end
70
99
 
71
100
  def prompt(text, options, &callback)
@@ -75,7 +104,7 @@ class KuberKit::UI::Simple
75
104
  result
76
105
  end
77
106
 
78
- private
107
+ protected
79
108
  def print_text(title, text, color:)
80
109
  puts "#{title.colorize(color)}\r\n #{text.colorize(color)}"
81
110
  end
@@ -1,3 +1,3 @@
1
1
  module KuberKit
2
- VERSION = "0.3.11"
2
+ VERSION = "0.4.0"
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.11
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iskander Khaziev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-12 00:00:00.000000000 Z
11
+ date: 2021-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: contracts-lite
@@ -183,6 +183,7 @@ files:
183
183
  - example/infrastructure/registries.rb
184
184
  - example/infrastructure/templates.rb
185
185
  - example/services/compose_app.rb
186
+ - example/services/docker_app.rb
186
187
  - example/services/env_file.rb
187
188
  - example/services/ruby_app.rb
188
189
  - kuber_kit.gemspec
@@ -287,6 +288,8 @@ files:
287
288
  - lib/kuber_kit/tools/file_presence_checker.rb
288
289
  - lib/kuber_kit/tools/logger_factory.rb
289
290
  - lib/kuber_kit/ui.rb
291
+ - lib/kuber_kit/ui/api.rb
292
+ - lib/kuber_kit/ui/debug.rb
290
293
  - lib/kuber_kit/ui/interactive.rb
291
294
  - lib/kuber_kit/ui/simple.rb
292
295
  - lib/kuber_kit/version.rb