kontena-cli 1.2.0.pre1 → 1.2.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/kontena/callback.rb +2 -2
  4. data/lib/kontena/callbacks/master/01_clear_current_master_after_terminate.rb +1 -1
  5. data/lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb +6 -6
  6. data/lib/kontena/callbacks/master/deploy/55_create_initial_grid_after_deploy.rb +1 -1
  7. data/lib/kontena/callbacks/master/deploy/70_invite_self_after_deploy.rb +1 -1
  8. data/lib/kontena/callbacks/master/deploy/90_proptip_after_deploy.rb +1 -1
  9. data/lib/kontena/cli/apps/common.rb +6 -6
  10. data/lib/kontena/cli/apps/yaml/reader.rb +2 -2
  11. data/lib/kontena/cli/cloud/login_command.rb +4 -4
  12. data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
  13. data/lib/kontena/cli/common.rb +5 -5
  14. data/lib/kontena/cli/config.rb +8 -8
  15. data/lib/kontena/cli/containers/exec_command.rb +1 -1
  16. data/lib/kontena/cli/localhost_web_server.rb +3 -3
  17. data/lib/kontena/cli/master/{users → user}/invite_command.rb +5 -5
  18. data/lib/kontena/cli/master/{users → user}/list_command.rb +1 -1
  19. data/lib/kontena/cli/master/{users → user}/remove_command.rb +3 -4
  20. data/lib/kontena/cli/master/{users/roles → user/role}/add_command.rb +4 -4
  21. data/lib/kontena/cli/master/{users/roles → user/role}/remove_command.rb +3 -4
  22. data/lib/kontena/cli/master/{users → user}/role_command.rb +3 -5
  23. data/lib/kontena/cli/master/user_command.rb +11 -0
  24. data/lib/kontena/cli/master/users_command.rb +8 -5
  25. data/lib/kontena/cli/master_command.rb +2 -1
  26. data/lib/kontena/cli/nodes/show_command.rb +3 -1
  27. data/lib/kontena/cli/plugins/install_command.rb +4 -4
  28. data/lib/kontena/cli/plugins/uninstall_command.rb +3 -2
  29. data/lib/kontena/cli/services/services_helper.rb +31 -9
  30. data/lib/kontena/cli/spinner.rb +4 -8
  31. data/lib/kontena/cli/stacks/build_command.rb +3 -1
  32. data/lib/kontena/cli/stacks/common.rb +44 -37
  33. data/lib/kontena/cli/stacks/install_command.rb +2 -2
  34. data/lib/kontena/cli/stacks/upgrade_command.rb +3 -1
  35. data/lib/kontena/cli/stacks/validate_command.rb +12 -10
  36. data/lib/kontena/cli/stacks/yaml/opto/service_instances_resolver.rb +1 -0
  37. data/lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb +1 -0
  38. data/lib/kontena/cli/stacks/yaml/opto/vault_cert_prompt_resolver.rb +1 -0
  39. data/lib/kontena/cli/stacks/yaml/opto/vault_resolver.rb +4 -2
  40. data/lib/kontena/cli/stacks/yaml/opto/vault_setter.rb +4 -3
  41. data/lib/kontena/cli/stacks/yaml/reader.rb +30 -7
  42. data/lib/kontena/cli/stacks/yaml/validations.rb +10 -0
  43. data/lib/kontena/cli/stacks/yaml/validator_v3.rb +88 -8
  44. data/lib/kontena/client.rb +14 -12
  45. data/lib/kontena/command.rb +10 -13
  46. data/lib/kontena/errors.rb +36 -0
  47. data/lib/kontena/plugin_manager.rb +8 -10
  48. data/lib/kontena/stacks_cache.rb +1 -1
  49. data/lib/kontena_cli.rb +5 -5
  50. data/spec/fixtures/stack-with-volumes.yml +33 -0
  51. data/spec/kontena/cli/master/{users → user}/invite_command_spec.rb +3 -3
  52. data/spec/kontena/cli/master/{users → user}/remove_command_spec.rb +3 -3
  53. data/spec/kontena/cli/master/{users/roles → user/role}/add_command_spec.rb +3 -3
  54. data/spec/kontena/cli/master/{users/roles → user/role}/remove_command_spec.rb +3 -3
  55. data/spec/kontena/cli/stacks/build_command_spec.rb +2 -2
  56. data/spec/kontena/cli/stacks/install_command_spec.rb +3 -3
  57. data/spec/kontena/cli/stacks/upgrade_command_spec.rb +6 -6
  58. data/spec/kontena/cli/stacks/yaml/opto/service_link_resolver_spec.rb +5 -0
  59. data/spec/kontena/cli/stacks/yaml/opto/vault_cert_prompt_resolver_spec.rb +6 -0
  60. data/spec/kontena/cli/stacks/yaml/reader_spec.rb +4 -2
  61. data/spec/kontena/client_spec.rb +19 -1
  62. data/spec/spec_helper.rb +2 -0
  63. metadata +19 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f03d83329e4ddcebc48f226b38df3d4eb9b6f96f
4
- data.tar.gz: 451423d5bc02c8c01a18170cbb665a455d26a3d2
3
+ metadata.gz: fc1d241dbb42a8927a437e28fee00aba525bea78
4
+ data.tar.gz: f12240579934c0bad6f3d441c2744f0f5e9a5f8d
5
5
  SHA512:
6
- metadata.gz: 24c1bd893acbaf99a21795710024e0673e79e0685f83f3478f6a708568c2f12f440f6caa463068406a22de4f232de2e6120017ca64334e8fc7dd7977932df3a1
7
- data.tar.gz: c56ff810d3d4809d2c9d8c3c705389a0c801baf407290e89ec8ee718f3ef04b2d87112122eb379c498032da63994ee0b3f58cb609f24f45105ceeaca994819bf
6
+ metadata.gz: 5137972ce9856d048eb8e972f8e20bea52c75a014e04f12a2d34290e870830c2d321fd8a2f264243f65aa12ab8446e3b6b2d1fe8cca5b8b036db947789e4d96b
7
+ data.tar.gz: 064fbf5dc12b11581a36b83ccd96fc961a23fdc5decb1995c1dd15cc8d2793ade68c060eb05dc87e38da4ff1d5f2f3332ac397c01333d0e057729fa06deb4ae1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0.pre1
1
+ 1.2.0.pre2
@@ -9,7 +9,7 @@ class Kontena::Callback
9
9
  # Register callback for command types it is supposed to run with.
10
10
  def self.matches_commands(*commands)
11
11
  cmd_types = {}
12
-
12
+
13
13
  commands.each do |cmd|
14
14
  cmd_class, cmd_type = cmd.split(' ', 2)
15
15
 
@@ -44,7 +44,7 @@ class Kontena::Callback
44
44
  if klass.instance_methods.include?(state)
45
45
  cb = klass.new(obj)
46
46
  if cb.send(state).kind_of?(FalseClass)
47
- ENV["DEBUG"] && STDERR.puts("Execution aborted by #{klass}")
47
+ ENV["DEBUG"] && $stderr.puts("Execution aborted by #{klass}")
48
48
  exit 1
49
49
  end
50
50
  end
@@ -10,7 +10,7 @@ module Kontena
10
10
  return unless command.exit_code == 0
11
11
  return unless config.current_master
12
12
 
13
- ENV["DEBUG"] && STDERR.puts("Removing current master from config")
13
+ ENV["DEBUG"] && $stderr.puts("Removing current master from config")
14
14
  config.servers.delete_at(config.find_server_index(config.current_master.name))
15
15
  config.current_server = nil
16
16
  config.write
@@ -8,8 +8,8 @@ module Kontena
8
8
  matches_commands 'master create'
9
9
 
10
10
  def after
11
- ENV["DEBUG"] && STDERR.puts("Command result: #{command.result.inspect}")
12
- ENV["DEBUG"] && STDERR.puts("Command exit code: #{command.exit_code.inspect}")
11
+ ENV["DEBUG"] && $stderr.puts("Command result: #{command.result.inspect}")
12
+ ENV["DEBUG"] && $stderr.puts("Command exit code: #{command.exit_code.inspect}")
13
13
  return unless command.exit_code == 0
14
14
  return unless command.result.kind_of?(Hash)
15
15
  return unless command.result.has_key?(:public_ip)
@@ -35,11 +35,11 @@ module Kontena
35
35
 
36
36
  # Figure out if HTTPS works, if not, try HTTP
37
37
  begin
38
- ENV["DEBUG"] && STDERR.puts("Trying to request / from #{new_master.url}")
38
+ ENV["DEBUG"] && $stderr.puts("Trying to request / from #{new_master.url}")
39
39
  client = Kontena::Client.new(new_master.url, nil, ignore_ssl_errors: true)
40
40
  client.get('/')
41
- rescue
42
- ENV["DEBUG"] && STDERR.puts("HTTPS test failed: #{$!} #{$!.message}")
41
+ rescue => ex
42
+ ENV["DEBUG"] && $stderr.puts("HTTPS test failed: #{ex.class.name} #{ex.message}")
43
43
  unless retried
44
44
  new_master.url = "http://#{command.result[:public_ip]}"
45
45
  retried = true
@@ -51,7 +51,7 @@ module Kontena
51
51
  require 'shellwords'
52
52
  cmd = "master login --no-login-info --skip-grid-auto-select --verbose --name #{command.result[:name].shellescape} --code #{command.result[:code].shellescape} #{new_master.url.shellescape}"
53
53
  Retriable.retriable do
54
- ENV["DEBUG"] && STDERR.puts("Running: #{cmd}")
54
+ ENV["DEBUG"] && $stderr.puts("Running: #{cmd}")
55
55
  Kontena.run(cmd)
56
56
  end
57
57
  end
@@ -12,7 +12,7 @@ module Kontena
12
12
  return unless config.current_master.name == command.result[:name]
13
13
 
14
14
  cmd = "grid create --silent test"
15
- ENV["DEBUG"] && STDERR.puts("Running: #{cmd}")
15
+ ENV["DEBUG"] && $stderr.puts("Running: #{cmd}")
16
16
  Retriable.retriable do
17
17
  Kontena.run(cmd)
18
18
  end
@@ -39,7 +39,7 @@ module Kontena
39
39
  end
40
40
 
41
41
  return nil unless invite_response
42
- ENV["DEBUG"] && STDERR.puts("Got invite code: #{invite_response['invite_code']}")
42
+ ENV["DEBUG"] && $stderr.puts("Got invite code: #{invite_response['invite_code']}")
43
43
 
44
44
  role_status = nil
45
45
 
@@ -22,7 +22,7 @@ module Kontena
22
22
  puts
23
23
  end
24
24
  puts " To invite more users you can use:"
25
- puts " #{Kontena.pastel.green.on_black(" kontena master users invite email_address@example.com ")}"
25
+ puts " #{Kontena.pastel.green.on_black(" kontena master user invite email_address@example.com ")}"
26
26
  puts
27
27
  puts " The users can then join the master by using the invite code: "
28
28
  puts " #{Kontena.pastel.green.on_black(" kontena master join #{current_master.url} <invite_code> ")}"
@@ -108,15 +108,15 @@ module Kontena::Cli::Apps
108
108
  def display_notifications(messages, color = :yellow)
109
109
  messages.each do |files|
110
110
  files.each do |file, services|
111
- STDERR.puts "#{file}:".colorize(color)
111
+ $stderr.puts "#{file}:".colorize(color)
112
112
  services.each do |service|
113
113
  service.each do |name, errors|
114
- STDERR.puts " #{name}:".colorize(color)
114
+ $stderr.puts " #{name}:".colorize(color)
115
115
  if errors.is_a?(String)
116
- STDERR.puts " - #{errors}".colorize(color)
116
+ $stderr.puts " - #{errors}".colorize(color)
117
117
  else
118
118
  errors.each do |key, error|
119
- STDERR.puts " - #{key}: #{error.to_json}".colorize(color)
119
+ $stderr.puts " - #{key}: #{error.to_json}".colorize(color)
120
120
  end
121
121
  end
122
122
  end
@@ -126,12 +126,12 @@ module Kontena::Cli::Apps
126
126
  end
127
127
 
128
128
  def hint_on_validation_notifications(errors)
129
- STDERR.puts "YAML contains the following unsupported options and they were rejected:".colorize(:yellow)
129
+ $stderr.puts "YAML contains the following unsupported options and they were rejected:".colorize(:yellow)
130
130
  display_notifications(errors)
131
131
  end
132
132
 
133
133
  def abort_on_validation_errors(errors)
134
- STDERR.puts "YAML validation failed! Aborting.".colorize(:red)
134
+ $stderr.puts "YAML validation failed! Aborting.".colorize(:red)
135
135
  display_notifications(errors, :red)
136
136
  abort
137
137
  end
@@ -53,8 +53,8 @@ module Kontena::Cli::Apps
53
53
  replace_dollar_dollars(content)
54
54
  begin
55
55
  @yaml = ::YAML.safe_load(content)
56
- rescue Psych::SyntaxError => e
57
- raise "Error while parsing #{file}".colorize(:red)+ " "+e.message
56
+ rescue Psych::SyntaxError => ex
57
+ raise ex.class, "Error while parsing #{file} : #{ex.message}"
58
58
  end
59
59
  end
60
60
 
@@ -52,10 +52,10 @@ module Kontena::Cli::Cloud
52
52
 
53
53
  def web_flow
54
54
  if Kontena.browserless? && !force?
55
- STDERR.puts "Your current environment does not seem to support opening a local graphical WWW browser."
56
- STDERR.puts
57
- STDERR.puts "You can perorm a login on another computer, copy the token and use it with 'kontena cloud login --token <token>'."
58
- STDERR.puts "There will be an easier way to log in from a browserless environment soon."
55
+ $stderr.puts "Your current environment does not seem to support opening a local graphical WWW browser."
56
+ $stderr.puts
57
+ $stderr.puts "You can perorm a login on another computer, copy the token and use it with 'kontena cloud login --token <token>'."
58
+ $stderr.puts "There will be an easier way to log in from a browserless environment soon."
59
59
  exit_with_error 'Unable to launch a web browser'
60
60
  end
61
61
 
@@ -84,7 +84,7 @@ module Kontena::Cli::Cloud::Master
84
84
  puts " Cloud than the one they currently have as their username in the"
85
85
  puts " master will not be able to authenticate before an administrator"
86
86
  puts " of the Kontena Master creates an invitation code for them"
87
- puts " (kontena master users invite old@email.example.com)"
87
+ puts " (kontena master user invite old@email.example.com)"
88
88
  exit_with_error "Aborted" unless prompt.yes?("Proceed?")
89
89
  end
90
90
 
@@ -12,7 +12,7 @@ module Kontena
12
12
 
13
13
  def logger
14
14
  return @logger if @logger
15
- @logger = Logger.new(ENV["DEBUG"] ? STDERR : STDOUT)
15
+ @logger = Logger.new(ENV["DEBUG"] ? $stderr : $stdout)
16
16
  @logger.level = ENV["DEBUG"].nil? ? Logger::INFO : Logger::DEBUG
17
17
  @logger.progname = 'COMMON'
18
18
  @logger
@@ -131,8 +131,8 @@ module Kontena
131
131
  client = Kontena::Client.new(server.url, server.token)
132
132
  logger.debug "Trying to invalidate refresh token on #{server.name}"
133
133
  client.refresh_token
134
- rescue
135
- logger.debug "Refreshing failed: #{$!} : #{$!.message}"
134
+ rescue => ex
135
+ logger.debug "Refreshing failed: #{ex.class.name} : #{ex.message}"
136
136
  end
137
137
 
138
138
  def require_current_master
@@ -289,7 +289,7 @@ module Kontena
289
289
  msg = "Press any key to continue or ctrl-c to cancel.. (Automatically continuing in ? seconds)"
290
290
 
291
291
  reader_thread = Thread.new do
292
- Thread.main['any_key.char'] = STDIN.getch
292
+ Thread.main['any_key.char'] = $stdin.getch
293
293
  end
294
294
 
295
295
  countdown_thread = Thread.new do
@@ -316,7 +316,7 @@ module Kontena
316
316
  return any_key_to_continue_with_timeout(timeout) if timeout
317
317
  msg = "Press any key to continue or ctrl-c to cancel.. "
318
318
  print pastel.bright_cyan("#{msg}")
319
- char = STDIN.getch
319
+ char = $stdin.getch
320
320
  print "\r#{' ' * msg.length}\r"
321
321
  if char == "\u0003"
322
322
  error "Canceled"
@@ -22,11 +22,11 @@ module Kontena
22
22
  self
23
23
  end
24
24
 
25
- class TokenExpiredError < StandardError; end
25
+ TokenExpiredError = Class.new(StandardError)
26
26
 
27
27
  def initialize
28
28
  super
29
- @logger = Logger.new(ENV["DEBUG"] ? STDERR : STDOUT)
29
+ @logger = Logger.new(ENV["DEBUG"] ? $stderr : $stdout)
30
30
  @logger.level = ENV["DEBUG"].nil? ? Logger::INFO : Logger::DEBUG
31
31
  @logger.progname = 'CONFIG'
32
32
  load_settings_from_env || load_settings_from_config_file
@@ -41,7 +41,7 @@ module Kontena
41
41
  return nil unless ENV['KONTENA_URL']
42
42
  logger.debug 'Loading configuration from ENV'
43
43
  servers << Server.new(
44
- url: ENV['KONTENA_URL'],
44
+ url: ENV['KONTENA_URL'],
45
45
  name: 'default',
46
46
  token: Token.new(access_token: ENV['KONTENA_TOKEN'], parent_type: :master, parent_name: 'default'),
47
47
  grid: ENV['KONTENA_GRID'],
@@ -172,7 +172,7 @@ module Kontena
172
172
  logger.debug "Migrating from legacy style configuration"
173
173
  {
174
174
  'current_server' => 'default',
175
- 'servers' => [
175
+ 'servers' => [
176
176
  settings['server'].merge(
177
177
  'name' => 'default',
178
178
  'account' => 'kontena'
@@ -303,7 +303,7 @@ module Kontena
303
303
  def require_current_master_token
304
304
  require_current_master
305
305
  token = current_master.token
306
- if token && token.access_token
306
+ if token && token.access_token
307
307
  return token unless token.expired?
308
308
  raise TokenExpiredError, "The access token has expired and needs to be refreshed."
309
309
  end
@@ -364,7 +364,7 @@ module Kontena
364
364
  raise ArgumentError, "You have not selected a grid. Use: kontena grid"
365
365
  end
366
366
 
367
- # Name of the currently selected grid. Can override using
367
+ # Name of the currently selected grid. Can override using
368
368
  # KONTENA_GRID environment variable.
369
369
  #
370
370
  # @return [String, NilClass]
@@ -433,7 +433,7 @@ module Kontena
433
433
  JSON.pretty_generate(to_hash)
434
434
  end
435
435
 
436
- # Write the current configuration to config file.
436
+ # Write the current configuration to config file.
437
437
  # Does nothing if using settings from environment variables.
438
438
  def write
439
439
  return nil if ENV['KONTENA_URL']
@@ -518,7 +518,7 @@ module Kontena
518
518
  def account
519
519
  return @account if @account
520
520
  return config.find_account('master') unless parent
521
- @account =
521
+ @account =
522
522
  case parent_type
523
523
  when :master then config.find_account(parent.account)
524
524
  when :account then parent
@@ -16,7 +16,7 @@ module Kontena::Cli::Containers
16
16
  result = client(token).post("containers/#{current_grid}/#{container_id}/exec", payload)
17
17
 
18
18
  puts result[0].join(" ") unless result[0].size == 0
19
- STDERR.puts result[1].join(" ") unless result[1].size == 0
19
+ $stderr.puts result[1].join(" ") unless result[1].size == 0
20
20
  exit result[2]
21
21
  end
22
22
  end
@@ -39,7 +39,7 @@ module Kontena
39
39
  #
40
40
  # @return [Hash] query_params
41
41
  def serve_one
42
- ENV["DEBUG"] && STDERR.puts("Waiting for connection on port #{port}..")
42
+ ENV["DEBUG"] && $stderr.puts("Waiting for connection on port #{port}..")
43
43
  socket = server.accept
44
44
 
45
45
  content = socket.recvfrom(2048).first.split(/(?:\r)?\n/)
@@ -56,7 +56,7 @@ module Kontena
56
56
 
57
57
  body = content.join("\n")
58
58
 
59
- ENV["DEBUG"] && STDERR.puts("Got request: \"#{request.inspect}\n Headers: #{headers.inspect}\n Body: #{body}\"")
59
+ ENV["DEBUG"] && $stderr.puts("Got request: \"#{request.inspect}\n Headers: #{headers.inspect}\n Body: #{body}\"")
60
60
 
61
61
  get_request = request[/GET (\/cb.+?) HTTP/, 1]
62
62
  if get_request
@@ -82,7 +82,7 @@ module Kontena
82
82
  socket.close
83
83
  server.close
84
84
  uri = URI.parse("http://localhost#{get_request}")
85
- ENV["DEBUG"] && STDERR.puts(" * Parsing params: \"#{uri.query}\"")
85
+ ENV["DEBUG"] && $stderr.puts(" * Parsing params: \"#{uri.query}\"")
86
86
  params = {}
87
87
  URI.decode_www_form(uri.query).each do |key, value|
88
88
  if value.to_s == ''
@@ -1,7 +1,7 @@
1
1
  require_relative '../../common'
2
- require_relative 'roles/add_command'
2
+ require_relative 'role/add_command'
3
3
 
4
- module Kontena::Cli::Master::Users
4
+ module Kontena::Cli::Master::User
5
5
  class InviteCommand < Kontena::Command
6
6
  include Kontena::Cli::Common
7
7
 
@@ -41,9 +41,9 @@ module Kontena::Cli::Master::Users
41
41
  roles.each do |role|
42
42
  Kontena.run("master users role add #{role.shellescape} #{email.shellescape}")
43
43
  end
44
- rescue
45
- STDERR.puts "Failed to invite #{email}".colorize(:red)
46
- ENV["DEBUG"] && STDERR.puts("#{$!} - #{$!.message} -- #{$!.backtrace}")
44
+ rescue => ex
45
+ $stderr.puts pastel.red("Failed to invite #{email}")
46
+ ENV["DEBUG"] && $stderr.puts("#{ex} : #{ex.message}\n#{ex.backtrace.join("\n ")}")
47
47
  end
48
48
  end
49
49
  end
@@ -1,6 +1,6 @@
1
1
  require_relative '../../common'
2
2
 
3
- module Kontena::Cli::Master::Users
3
+ module Kontena::Cli::Master::User
4
4
  class ListCommand < Kontena::Command
5
5
  include Kontena::Cli::Common
6
6
 
@@ -1,6 +1,6 @@
1
1
  require_relative '../../common'
2
2
 
3
- module Kontena::Cli::Master::Users
3
+ module Kontena::Cli::Master::User
4
4
  class RemoveCommand < Kontena::Command
5
5
  include Kontena::Cli::Common
6
6
 
@@ -15,9 +15,8 @@ module Kontena::Cli::Master::Users
15
15
  email_list.each do |email|
16
16
  begin
17
17
  client(token).delete("users/#{email}")
18
- rescue => exc
19
- STDERR.puts "Failed to remove user #{email}".colorize(:red)
20
- STDERR.puts exc.message
18
+ rescue => ex
19
+ $stderr.puts pastel.red("Failed to remove user #{email} : #{ex.message}")
21
20
  end
22
21
  end
23
22
  end
@@ -1,7 +1,7 @@
1
1
  require_relative '../../../common'
2
2
 
3
- module Kontena::Cli::Master::Users
4
- module Roles
3
+ module Kontena::Cli::Master::User
4
+ module Role
5
5
  class AddCommand < Kontena::Command
6
6
  include Kontena::Cli::Common
7
7
 
@@ -19,8 +19,8 @@ module Kontena::Cli::Master::Users
19
19
  begin
20
20
  response = client(token).post("users/#{email}/roles", data)
21
21
  puts "Added role #{role} to #{email}" unless running_silent?
22
- rescue => exc
23
- abort "Failed to add role #{role} to #{email} : #{exc.message}".colorize(:red)
22
+ rescue => ex
23
+ abort pastel.red("Failed to add role #{role} to #{email} : #{ex.message}")
24
24
  end
25
25
  end
26
26
  end
@@ -1,6 +1,6 @@
1
1
  require_relative '../../../common'
2
2
 
3
- module Kontena::Cli::Master::Users::Roles
3
+ module Kontena::Cli::Master::User::Role
4
4
  class RemoveCommand < Kontena::Command
5
5
  include Kontena::Cli::Common
6
6
 
@@ -18,9 +18,8 @@ module Kontena::Cli::Master::Users::Roles
18
18
  begin
19
19
  response = client(token).delete("users/#{email}/roles/#{role}")
20
20
  puts "Removed role #{role} from #{email}" if response
21
- rescue => exc
22
- puts "Failed to remove role #{role} from #{email}".colorize(:red)
23
- puts exc.message
21
+ rescue => ex
22
+ $stderr.puts pastel.red("Failed to remove role #{role} from #{email} : #{ex.message}")
24
23
  end
25
24
  end
26
25
  end
@@ -1,8 +1,6 @@
1
- module Kontena::Cli::Master::Users
2
-
3
-
1
+ module Kontena::Cli::Master::User
4
2
  class RoleCommand < Kontena::Command
5
- subcommand "add", "Add role to user", load_subcommand('master/users/roles/add_command')
6
- subcommand ["remove", "rm"], "Remove role from user", load_subcommand('master/users/roles/remove_command')
3
+ subcommand "add", "Add role to user", load_subcommand('master/user/role/add_command')
4
+ subcommand ["remove", "rm"], "Remove role from user", load_subcommand('master/user/role/remove_command')
7
5
  end
8
6
  end
@@ -0,0 +1,11 @@
1
+ require 'kontena/cli/master/user_command'
2
+
3
+ module Kontena::Cli::Master
4
+ class UserCommand < Kontena::Command
5
+ subcommand "invite", "Invite user to Kontena Master", load_subcommand('master/user/invite_command')
6
+ subcommand ["remove", "rm"], "Remove user from Kontena Master", load_subcommand('master/user/remove_command')
7
+ subcommand ["list", "ls"], "List users", load_subcommand('master/user/list_command')
8
+ subcommand "role", "User role specific commands", load_subcommand('master/user/role_command')
9
+ end
10
+ end
11
+