kontena-cli 1.4.3 → 1.5.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +7 -3
  3. data/Gemfile +7 -3
  4. data/README.md +1 -1
  5. data/VERSION +1 -1
  6. data/bin/kontena +1 -0
  7. data/kontena-cli.gemspec +5 -6
  8. data/lib/kontena/cli/browser_launcher.rb +61 -0
  9. data/lib/kontena/cli/certificate/authorize_command.rb +40 -16
  10. data/lib/kontena/cli/certificate/get_command.rb +1 -1
  11. data/lib/kontena/cli/cloud/login_command.rb +3 -4
  12. data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
  13. data/lib/kontena/cli/cloud/master/list_command.rb +1 -1
  14. data/lib/kontena/cli/cloud/master/remove_command.rb +1 -1
  15. data/lib/kontena/cli/cloud/master/update_command.rb +1 -1
  16. data/lib/kontena/cli/common.rb +2 -2
  17. data/lib/kontena/cli/etcd_command.rb +1 -1
  18. data/lib/kontena/cli/external_registries/add_command.rb +2 -2
  19. data/lib/kontena/cli/external_registries/remove_command.rb +1 -1
  20. data/lib/kontena/cli/grids/common.rb +14 -4
  21. data/lib/kontena/cli/grids/events_command.rb +2 -2
  22. data/lib/kontena/cli/grids/list_command.rb +1 -1
  23. data/lib/kontena/cli/grids/logs_command.rb +1 -1
  24. data/lib/kontena/cli/grids/remove_command.rb +12 -10
  25. data/lib/kontena/cli/grids/trusted_subnets/add_command.rb +1 -1
  26. data/lib/kontena/cli/grids/trusted_subnets/remove_command.rb +12 -10
  27. data/lib/kontena/cli/grids/use_command.rb +1 -1
  28. data/lib/kontena/cli/helpers/log_helper.rb +1 -1
  29. data/lib/kontena/cli/logout_command.rb +1 -1
  30. data/lib/kontena/cli/master/login_command.rb +2 -3
  31. data/lib/kontena/cli/master/logout_command.rb +2 -2
  32. data/lib/kontena/cli/master/token/common.rb +2 -1
  33. data/lib/kontena/cli/master/token/create_command.rb +5 -2
  34. data/lib/kontena/cli/master/token/current_command.rb +9 -4
  35. data/lib/kontena/cli/master/token/list_command.rb +1 -1
  36. data/lib/kontena/cli/master/token/show_command.rb +11 -1
  37. data/lib/kontena/cli/master/user/invite_command.rb +1 -1
  38. data/lib/kontena/cli/master_command.rb +0 -1
  39. data/lib/kontena/cli/nodes/create_command.rb +1 -1
  40. data/lib/kontena/cli/nodes/labels/remove_command.rb +17 -3
  41. data/lib/kontena/cli/nodes/remove_command.rb +12 -10
  42. data/lib/kontena/cli/nodes/reset_token_command.rb +1 -1
  43. data/lib/kontena/cli/nodes/update_command.rb +1 -1
  44. data/lib/kontena/cli/plugin_command.rb +2 -1
  45. data/lib/kontena/cli/plugins/install_command.rb +2 -2
  46. data/lib/kontena/cli/plugins/uninstall_command.rb +19 -10
  47. data/lib/kontena/cli/plugins/upgrade_command.rb +60 -0
  48. data/lib/kontena/cli/registry/create_command.rb +1 -1
  49. data/lib/kontena/cli/registry/remove_command.rb +2 -2
  50. data/lib/kontena/cli/services/containers_command.rb +1 -1
  51. data/lib/kontena/cli/services/create_command.rb +1 -1
  52. data/lib/kontena/cli/services/deploy_command.rb +1 -1
  53. data/lib/kontena/cli/services/envs/add_command.rb +1 -1
  54. data/lib/kontena/cli/services/envs/remove_command.rb +5 -3
  55. data/lib/kontena/cli/services/link_command.rb +1 -1
  56. data/lib/kontena/cli/services/logs_command.rb +1 -1
  57. data/lib/kontena/cli/services/monitor_command.rb +1 -1
  58. data/lib/kontena/cli/services/remove_command.rb +11 -9
  59. data/lib/kontena/cli/services/restart_command.rb +1 -1
  60. data/lib/kontena/cli/services/secrets/link_command.rb +1 -1
  61. data/lib/kontena/cli/services/services_helper.rb +6 -12
  62. data/lib/kontena/cli/services/start_command.rb +5 -3
  63. data/lib/kontena/cli/services/stop_command.rb +5 -3
  64. data/lib/kontena/cli/services/unlink_command.rb +1 -1
  65. data/lib/kontena/cli/services/update_command.rb +1 -1
  66. data/lib/kontena/cli/spinner.rb +10 -10
  67. data/lib/kontena/cli/stack_command.rb +1 -0
  68. data/lib/kontena/cli/stacks/build_command.rb +6 -6
  69. data/lib/kontena/cli/stacks/deploy_command.rb +12 -10
  70. data/lib/kontena/cli/stacks/inspect_command.rb +17 -0
  71. data/lib/kontena/cli/stacks/install_command.rb +15 -4
  72. data/lib/kontena/cli/stacks/list_command.rb +2 -3
  73. data/lib/kontena/cli/stacks/logs_command.rb +1 -1
  74. data/lib/kontena/cli/stacks/monitor_command.rb +2 -2
  75. data/lib/kontena/cli/stacks/remove_command.rb +28 -19
  76. data/lib/kontena/cli/stacks/restart_command.rb +5 -4
  77. data/lib/kontena/cli/stacks/stop_command.rb +6 -5
  78. data/lib/kontena/cli/stacks/upgrade_command.rb +84 -64
  79. data/lib/kontena/cli/stacks/yaml/reader.rb +9 -4
  80. data/lib/kontena/cli/vault/remove_command.rb +7 -5
  81. data/lib/kontena/cli/vault/update_command.rb +1 -1
  82. data/lib/kontena/cli/vault/write_command.rb +1 -1
  83. data/lib/kontena/cli/volumes/remove_command.rb +6 -4
  84. data/lib/kontena/cli/vpn/create_command.rb +1 -1
  85. data/lib/kontena/cli/vpn/remove_command.rb +1 -1
  86. data/lib/kontena/client.rb +23 -14
  87. data/lib/kontena/command.rb +2 -2
  88. data/lib/kontena/debug_instrumentor.rb +11 -2
  89. data/lib/kontena/plugin_manager/common.rb +5 -2
  90. data/lib/kontena/plugin_manager/installer.rb +34 -10
  91. data/lib/kontena/scripts/completer.rb +91 -43
  92. data/lib/kontena/{cli/stacks → stacks}/change_resolver.rb +38 -16
  93. data/lib/kontena/stacks/stack_data.rb +58 -0
  94. data/lib/kontena/stacks/stack_data_set.rb +51 -0
  95. data/lib/kontena_cli.rb +1 -0
  96. data/omnibus/Gemfile.lock +32 -22
  97. data/omnibus/config/projects/kontena.rb +2 -0
  98. data/omnibus/config/software/kontena-cli.rb +6 -4
  99. data/omnibus/package-scripts/kontena/postinstall +1 -1
  100. data/omnibus/wrappers/sh/kontena +1 -1
  101. data/spec/fixtures/kontena_v3_with_registry_extends.yml +20 -0
  102. data/spec/kontena/cli/certificates/authorize_command_spec.rb +81 -0
  103. data/spec/kontena/cli/cloud/login_command_spec.rb +4 -4
  104. data/spec/kontena/cli/common_spec.rb +8 -1
  105. data/spec/kontena/cli/grids/update_command_spec.rb +13 -0
  106. data/spec/kontena/cli/master/join_command_spec.rb +1 -4
  107. data/spec/kontena/cli/master/login_command_spec.rb +4 -4
  108. data/spec/kontena/cli/master/token/create_command_spec.rb +132 -0
  109. data/spec/kontena/cli/master/token/show_command_spec.rb +90 -0
  110. data/spec/kontena/cli/nodes/labels/remove_command_spec.rb +35 -5
  111. data/spec/kontena/cli/stacks/install_command_spec.rb +16 -6
  112. data/spec/kontena/cli/stacks/remove_command_spec.rb +23 -2
  113. data/spec/kontena/cli/stacks/validate_command_spec.rb +1 -1
  114. data/spec/kontena/cli/stacks/yaml/reader_spec.rb +33 -1
  115. data/spec/kontena/client_spec.rb +38 -1
  116. data/spec/kontena/stacks/change_resolver_spec.rb +44 -0
  117. data/spec/kontena/stacks/stack_data_set_spec.rb +59 -0
  118. metadata +36 -34
  119. data/lib/kontena/cli/master/users_command.rb +0 -13
@@ -0,0 +1,60 @@
1
+ require 'kontena/plugin_manager'
2
+ require_relative 'common'
3
+
4
+ module Kontena::Cli::Plugins
5
+ class UpgradeCommand < Kontena::Command
6
+ include Kontena::Cli::Common
7
+ include Common
8
+ include Kontena::PluginManager::Common
9
+
10
+ option '--pre', :flag, 'Include pre-release versions'
11
+ option '--silent', :flag, 'Less verbose output'
12
+
13
+ def running_verbose?
14
+ !silent?
15
+ end
16
+
17
+ def cleanup(*plugins)
18
+ return if plugins.empty?
19
+ vspinner "Running cleanup" do
20
+ plugins.each do |name|
21
+ Kontena::PluginManager::Cleaner.new(name).cleanup
22
+ end
23
+ end
24
+ end
25
+
26
+ def installer(name, version: nil)
27
+ Kontena::PluginManager::Installer.new(name, pre: pre?, version: version)
28
+ end
29
+
30
+ def upgrade(name, from, to)
31
+ vspinner "Upgrading #{pastel.cyan(name)} from #{pastel.cyan(from)} to #{pastel.cyan(to)}" do
32
+ installer(name, version: to).install
33
+ end
34
+ sputs "Upgraded #{name} from #{from} to #{to}" if silent?
35
+ end
36
+
37
+ def execute
38
+ upgradable = {}
39
+
40
+ vspinner "Checking for upgrades" do
41
+ plugins.each do |plugin|
42
+ short = short_name(plugin.name)
43
+ available_upgrade = installer(short).available_upgrade
44
+ unless available_upgrade.nil?
45
+ upgradable[short] = { from: plugin.version.to_s, to: available_upgrade }
46
+ end
47
+ end
48
+ end
49
+
50
+ if upgradable.empty?
51
+ vputs "Nothing upgraded"
52
+ else
53
+ upgradable.each do |name, data|
54
+ upgrade(name, data[:from], data[:to])
55
+ end
56
+ cleanup(upgradable.keys)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -111,7 +111,7 @@ module Kontena::Cli::Registry
111
111
 
112
112
  client(token).post("grids/#{current_grid}/stacks", data)
113
113
  deployment = client(token).post("stacks/#{current_grid}/registry/deploy", {})
114
- spinner "Deploying #{data[:name].colorize(:cyan)} stack " do
114
+ spinner "Deploying #{pastel.cyan(data[:name])} stack " do
115
115
  wait_for_deploy_to_finish(deployment)
116
116
  end
117
117
  puts "\n"
@@ -11,9 +11,9 @@ module Kontena::Cli::Registry
11
11
  name = 'registry'
12
12
 
13
13
  registry = client(token).get("stacks/#{current_grid}/#{name}") rescue nil
14
- exit_with_error("Stack #{name.colorize(:cyan)} does not exist") if registry.nil?
14
+ exit_with_error("Stack #{pastel.cyan(name)} does not exist") if registry.nil?
15
15
 
16
- spinner "Removing #{name.colorize(:cyan)} stack " do
16
+ spinner "Removing #{pastel.cyan(name)} stack " do
17
17
  client(token).delete("stacks/#{current_grid}/#{name}")
18
18
  end
19
19
  end
@@ -28,7 +28,7 @@ module Kontena::Cli::Services
28
28
  puts " ip: #{container['ip_address']}"
29
29
  puts " public ip: #{container['node']['public_ip']}"
30
30
  if container['status'] == 'unknown'
31
- puts " status: #{container['status'].colorize(:yellow)}"
31
+ puts " status: #{pastel.yellow(container['status'])}"
32
32
  else
33
33
  puts " status: #{container['status']}"
34
34
  end
@@ -58,7 +58,7 @@ module Kontena::Cli::Services
58
58
  stateful: stateful?
59
59
  }
60
60
  data.merge!(parse_service_data_from_options)
61
- spinner "Creating #{name.colorize(:cyan)} service " do
61
+ spinner "Creating #{pastel.cyan(name)} service " do
62
62
  create_service(token, current_grid, data)
63
63
  end
64
64
  end
@@ -16,7 +16,7 @@ module Kontena::Cli::Services
16
16
  service_id = name
17
17
  data = {}
18
18
  data[:force] = true if force?
19
- spinner "Deploying service #{name.colorize(:cyan)} " do
19
+ spinner "Deploying service #{pastel.cyan(name)} " do
20
20
  deployment = deploy_service(token, name, data)
21
21
  wait_for_deploy_to_finish(token, deployment) if wait?
22
22
  end
@@ -13,7 +13,7 @@ module Kontena::Cli::Services::Envs
13
13
  require_api_url
14
14
  token = require_token
15
15
  data = {env: env}
16
- spinner "Adding env variable to #{name.colorize(:cyan)} service " do
16
+ spinner "Adding env variable to #{pastel.cyan(name)} service " do
17
17
  client(token).post("services/#{parse_service_id(name)}/envs", data)
18
18
  end
19
19
  end
@@ -7,13 +7,15 @@ module Kontena::Cli::Services::Envs
7
7
  include Kontena::Cli::Services::ServicesHelper
8
8
 
9
9
  parameter "NAME", "Service name"
10
- parameter "ENV", "Environment variable name"
10
+ parameter "ENV ...", "Environment variable name", attribute_name: :envs
11
11
 
12
12
  def execute
13
13
  require_api_url
14
14
  token = require_token
15
- spinner "Removing env variable #{env.colorize(:cyan)} from #{name.colorize(:cyan)} service " do
16
- client(token).delete("services/#{parse_service_id(name)}/envs/#{env}")
15
+ envs.each do |env|
16
+ spinner "Removing env variable #{pastel.cyan(env)} from #{pastel.cyan(name)} service " do
17
+ client(token).delete("services/#{parse_service_id(name)}/envs/#{env}")
18
+ end
17
19
  end
18
20
  end
19
21
  end
@@ -27,7 +27,7 @@ module Kontena::Cli::Services
27
27
  links << {name: target_service.to_s, alias: target.to_s}
28
28
  links.compact!
29
29
  data = {links: links}
30
- spinner "Linking #{name.colorize(:cyan)} to #{target.colorize(:cyan)} " do
30
+ spinner "Linking #{pastel.cyan(name)} to #{pastel.cyan(target)} " do
31
31
  update_service(token, name, data)
32
32
  end
33
33
  end
@@ -26,7 +26,7 @@ module Kontena::Cli::Services
26
26
  color = color_for_container(log['name'])
27
27
  instance_number = log['name'].match(/^.+-(\d+)$/)[1]
28
28
  name = instance_number.nil? ? log['name'] : instance_number
29
- prefix = "#{log['created_at']} [#{name}]:".colorize(color)
29
+ prefix = pastel.send(color, "#{log['created_at']} [#{name}]:")
30
30
  puts "#{prefix} #{log['data']}"
31
31
  end
32
32
  end
@@ -43,7 +43,7 @@ module Kontena::Cli::Services
43
43
  else
44
44
  color = :yellow
45
45
  end
46
- print "■".colorize(color)
46
+ print pastel.send(color, "■")
47
47
  end
48
48
  puts ''
49
49
  end
@@ -5,7 +5,7 @@ module Kontena::Cli::Services
5
5
  include Kontena::Cli::Common
6
6
  include ServicesHelper
7
7
 
8
- parameter "NAME", "Service name"
8
+ parameter "NAME ...", "Service name", attribute_name: :names
9
9
  option "--instance", "INSTANCE", "Remove only given instance"
10
10
  option "--force", :flag, "Force remove", default: false, attribute_name: :forced
11
11
 
@@ -15,17 +15,19 @@ module Kontena::Cli::Services
15
15
  requires_current_master_token
16
16
 
17
17
  def execute
18
- if instance
19
- remove_instance
20
- else
21
- remove
18
+ names.each do |name|
19
+ if instance
20
+ remove_instance(name)
21
+ else
22
+ remove(name)
23
+ end
22
24
  end
23
25
  end
24
26
 
25
- def remove
27
+ def remove(name)
26
28
  confirm_command(name) unless forced?
27
29
 
28
- spinner "Removing service #{name.colorize(:cyan)} " do
30
+ spinner "Removing service #{pastel.cyan(name)} " do
29
31
  client.delete("services/#{parse_service_id(name)}")
30
32
  removed = false
31
33
  until removed == true
@@ -43,14 +45,14 @@ module Kontena::Cli::Services
43
45
  end
44
46
  end
45
47
 
46
- def remove_instance
48
+ def remove_instance(name)
47
49
  instance_name = "#{name}/#{instance}"
48
50
  confirm_command("#{name}/#{instance}") unless forced?
49
51
  service_instance = client.get("services/#{parse_service_id(name)}/instances")['instances'].find{ |i|
50
52
  i['instance_number'] == instance.to_i
51
53
  }
52
54
  exit_with_error("Instance not found") unless service_instance
53
- spinner "Removing service instance #{instance_name.colorize(:cyan)} " do
55
+ spinner "Removing service instance #{pastel.cyan(instance_name)} " do
54
56
  client.delete("services/#{parse_service_id(name)}/instances/#{service_instance['id']}")
55
57
  end
56
58
  end
@@ -11,7 +11,7 @@ module Kontena::Cli::Services
11
11
  def execute
12
12
  require_api_url
13
13
  token = require_token
14
- spinner "Sending restart signal to service #{name.colorize(:cyan)} " do
14
+ spinner "Sending restart signal to service #{pastel.cyan(name)} " do
15
15
  restart_service(token, name)
16
16
  end
17
17
  end
@@ -12,7 +12,7 @@ module Kontena::Cli::Services::Secrets
12
12
  def execute
13
13
  require_api_url
14
14
  token = require_token
15
- spinner "Linking #{secret.colorize(:cyan)} from Vault to #{name.colorize(:cyan)} " do
15
+ spinner "Linking #{pastel.cyan(secret)} from Vault to #{pastel.cyan(name)} " do
16
16
  result = client(token).get("services/#{parse_service_id(name)}")
17
17
  secrets = result['secrets']
18
18
  secrets << parse_secrets([secret])[0]
@@ -264,7 +264,7 @@ module Kontena
264
264
  puts " health: #{container.dig('health_status', 'status')} (#{health_time.to_i}s ago)"
265
265
  end
266
266
  if container['status'] == 'unknown'
267
- puts " status: #{container['status'].colorize(:yellow)}"
267
+ puts " status: #{pastel.yellow(container['status'])}"
268
268
  else
269
269
  puts " status: #{container['status']}"
270
270
  end
@@ -547,18 +547,12 @@ module Kontena
547
547
  # @param [Symbol] health
548
548
  # @return [String]
549
549
  def health_status_icon(health)
550
- if health == :unhealthy
551
- icon = '⊗'.freeze
552
- icon.colorize(:red)
553
- elsif health == :partial
554
- icon = '⊙'.freeze
555
- icon.colorize(:yellow)
556
- elsif health == :healthy
557
- icon = '⊛'.freeze
558
- icon.colorize(:green)
550
+ case health
551
+ when :unhealthy then pastel.red('⊗')
552
+ when :partial then pastel.yellow('⊙')
553
+ when :healthy then pastel.green('⊛')
559
554
  else
560
- icon = '⊝'.freeze
561
- icon.colorize(:dim)
555
+ pastel.dim('⊝')
562
556
  end
563
557
  end
564
558
 
@@ -6,13 +6,15 @@ module Kontena::Cli::Services
6
6
  include Kontena::Cli::GridOptions
7
7
  include ServicesHelper
8
8
 
9
- parameter "NAME", "Service name"
9
+ parameter "NAME ...", "Service name", attribute_name: :names
10
10
 
11
11
  def execute
12
12
  require_api_url
13
13
  token = require_token
14
- spinner "Sending start signal to #{name.colorize(:cyan)} service " do
15
- start_service(token, name)
14
+ names.each do |name|
15
+ spinner "Sending start signal to #{pastel.cyan(name)} service " do
16
+ start_service(token, name)
17
+ end
16
18
  end
17
19
  end
18
20
  end
@@ -6,13 +6,15 @@ module Kontena::Cli::Services
6
6
  include Kontena::Cli::GridOptions
7
7
  include ServicesHelper
8
8
 
9
- parameter "NAME", "Service name"
9
+ parameter "NAME ...", "Service name", attribute_name: :names
10
10
 
11
11
  def execute
12
12
  require_api_url
13
13
  token = require_token
14
- spinner "Sending stop signal to #{name.colorize(:cyan)} service " do
15
- stop_service(token, name)
14
+ names.each do |name|
15
+ spinner "Sending stop signal to #{pastel.cyan(name)} service " do
16
+ stop_service(token, name)
17
+ end
16
18
  end
17
19
  end
18
20
  end
@@ -22,7 +22,7 @@ module Kontena::Cli::Services
22
22
  end
23
23
  links.delete_if { |l| l['id'] == target_id }
24
24
  data = {links: links}
25
- spinner "Unlinking #{name.colorize(:cyan)} from #{target.colorize(:cyan)} " do
25
+ spinner "Unlinking #{pastel.cyan(name)} from #{pastel.cyan(target)} " do
26
26
  update_service(token, name, data)
27
27
  end
28
28
  end
@@ -50,7 +50,7 @@ module Kontena::Cli::Services
50
50
  token = require_token
51
51
 
52
52
  data = parse_service_data_from_options
53
- spinner "Updating #{name.colorize(:cyan)} service " do
53
+ spinner "Updating #{pastel.cyan(name)} service " do
54
54
  update_service(token, name, data)
55
55
  end
56
56
  end
@@ -47,7 +47,7 @@ module Kontena
47
47
 
48
48
  def self.spin_no_tty(msg, &block)
49
49
  unless block_given?
50
- Kernel.puts "\r [" + "done".colorize(:green) + "] #{msg}"
50
+ Kernel.puts "\r [" + Kontena.pastel.green("done") + "] #{msg}"
51
51
  return
52
52
  end
53
53
 
@@ -80,7 +80,7 @@ module Kontena
80
80
  return spin_no_tty(msg, &block) unless $stdout.tty?
81
81
 
82
82
  unless block_given?
83
- Kernel.puts "\r [" + "done".colorize(:green) + "] #{msg}"
83
+ Kernel.puts "\r [" + Kontena.pastel.green("done") + "] #{msg}"
84
84
  return
85
85
  end
86
86
 
@@ -89,7 +89,7 @@ module Kontena
89
89
  Thread.main['spinners'].each do |thread|
90
90
  thread['pause'] = true
91
91
  end
92
- Kernel.puts "\r [#{'....'.colorize(:yellow)}] #{Thread.main['spinners'].last['msg']}"
92
+ Kernel.puts "\r [#{Kontena.pastel.yellow('....')}] #{Thread.main['spinners'].last['msg']}"
93
93
  end
94
94
 
95
95
  Thread.main['spinner_msgs'] = []
@@ -139,27 +139,27 @@ module Kontena
139
139
  spin_thread.kill
140
140
  case spin_status.result
141
141
  when :warn
142
- Kernel.puts "\r [" + "warn".colorize(:yellow) + "] #{msg} "
142
+ Kernel.puts "\r [" + Kontena.pastel.yellow("warn") + "] #{msg} "
143
143
  when :fail
144
- Kernel.puts "\r [" + "fail".colorize(:red) + "] #{msg} "
144
+ Kernel.puts "\r [" + Kontena.pastel.red("fail") + "] #{msg} "
145
145
  else
146
- Kernel.puts "\r [" + "done".colorize(:green) + "] #{msg} "
146
+ Kernel.puts "\r [" + Kontena.pastel.green("done") + "] #{msg} "
147
147
  end
148
148
  rescue SystemExit => ex
149
149
  spin_thread.kill
150
150
  if ex.status == 0
151
- Kernel.puts "\r [" + "done".colorize(:green) + "] #{msg} "
151
+ Kernel.puts "\r [" + Kontena.pastel.green("done") + "] #{msg} "
152
152
  else
153
- Kernel.puts "\r [" + "fail".colorize(:red) + "] #{msg} "
153
+ Kernel.puts "\r [" + Kontena.pastel.red("fail") + "] #{msg} "
154
154
  end
155
155
  status = ex.status
156
156
  rescue SpinAbort
157
157
  spin_thread.kill
158
- Kernel.puts "\r [" + "fail".colorize(:red) + "] #{msg} "
158
+ Kernel.puts "\r [" + Kontena.pastel.red("fail") + "] #{msg} "
159
159
  Kontena.logger.debug { "Spin aborted through fail!" }
160
160
  rescue Exception => ex
161
161
  spin_thread.kill
162
- Kernel.puts "\r [" + "fail".colorize(:red) + "] #{msg} "
162
+ Kernel.puts "\r [" + Kontena.pastel.red("fail") + "] #{msg} "
163
163
  Kontena.logger.error(ex)
164
164
  raise ex
165
165
  ensure
@@ -3,6 +3,7 @@ class Kontena::Cli::StackCommand < Kontena::Command
3
3
  subcommand ["ls", "list"], "List installed stacks in a grid", load_subcommand('stacks/list_command')
4
4
  subcommand ["remove","rm"], "Remove a deployed stack from a grid", load_subcommand('stacks/remove_command')
5
5
  subcommand "show", "Show details about a stack in a grid", load_subcommand('stacks/show_command')
6
+ subcommand "inspect", "Inspect a stack in a grid", load_subcommand('stacks/inspect_command')
6
7
  subcommand "upgrade", "Upgrade a stack in a grid", load_subcommand('stacks/upgrade_command')
7
8
  subcommand ["start", "deploy"], "Deploy an installed stack in a grid", load_subcommand('stacks/deploy_command')
8
9
  subcommand "logs", "Show logs from services in a stack", load_subcommand('stacks/logs_command')
@@ -35,7 +35,7 @@ module Kontena::Cli::Stacks
35
35
  end
36
36
 
37
37
  if services.none?{ |service| service['build'] }
38
- abort 'Not found any service with a build option'.colorize(:red)
38
+ abort pastel.red('Not found any service with a build option')
39
39
  end
40
40
  build_docker_images(services)
41
41
  push_docker_images(services) unless no_push?
@@ -49,10 +49,10 @@ module Kontena::Cli::Stacks
49
49
  abort("'#{service['image']}' is not valid Docker image name") unless valid_image_name?(service['image'])
50
50
  abort("'#{service['build']['context']}' does not have #{dockerfile}") unless dockerfile_exist?(service['build']['context'], dockerfile)
51
51
  if service['hooks'] && service['hooks']['pre_build']
52
- puts "Running pre_build hook".colorize(:cyan)
52
+ puts pastel.cyan("Running pre_build hook")
53
53
  run_pre_build_hook(service['hooks']['pre_build'])
54
54
  end
55
- puts "Building image #{service['image'].colorize(:cyan)}"
55
+ puts "Building image #{pastel.cyan(service['image'])}"
56
56
  build_docker_image(service)
57
57
  end
58
58
  end
@@ -62,7 +62,7 @@ module Kontena::Cli::Stacks
62
62
  def push_docker_images(services)
63
63
  services.each do |service|
64
64
  if service['build']
65
- puts "Pushing image #{service['image'].colorize(:cyan)}"
65
+ puts "Pushing image #{pastel.cyan(service['image'])}"
66
66
  push_docker_image(service['image'])
67
67
  end
68
68
  end
@@ -85,7 +85,7 @@ module Kontena::Cli::Stacks
85
85
  end
86
86
  cmd << build_context
87
87
  ret = system(*cmd.flatten)
88
- raise ("Failed to build image #{service['image'].colorize(:cyan)}") unless ret
88
+ raise ("Failed to build image #{pastel.cyan(service['image'])}") unless ret
89
89
  ret
90
90
  end
91
91
 
@@ -95,7 +95,7 @@ module Kontena::Cli::Stacks
95
95
  cmd = ['docker', 'push', image]
96
96
  cmd.unshift('sudo') if sudo?
97
97
  ret = system(*cmd)
98
- raise ("Failed to push image #{image.colorize(:cyan)}") unless ret
98
+ raise ("Failed to push image #{pastel.cyan(image)}") unless ret
99
99
  ret
100
100
  end
101
101