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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/kontena/callback.rb +2 -2
- data/lib/kontena/callbacks/master/01_clear_current_master_after_terminate.rb +1 -1
- data/lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb +6 -6
- data/lib/kontena/callbacks/master/deploy/55_create_initial_grid_after_deploy.rb +1 -1
- data/lib/kontena/callbacks/master/deploy/70_invite_self_after_deploy.rb +1 -1
- data/lib/kontena/callbacks/master/deploy/90_proptip_after_deploy.rb +1 -1
- data/lib/kontena/cli/apps/common.rb +6 -6
- data/lib/kontena/cli/apps/yaml/reader.rb +2 -2
- data/lib/kontena/cli/cloud/login_command.rb +4 -4
- data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
- data/lib/kontena/cli/common.rb +5 -5
- data/lib/kontena/cli/config.rb +8 -8
- data/lib/kontena/cli/containers/exec_command.rb +1 -1
- data/lib/kontena/cli/localhost_web_server.rb +3 -3
- data/lib/kontena/cli/master/{users → user}/invite_command.rb +5 -5
- data/lib/kontena/cli/master/{users → user}/list_command.rb +1 -1
- data/lib/kontena/cli/master/{users → user}/remove_command.rb +3 -4
- data/lib/kontena/cli/master/{users/roles → user/role}/add_command.rb +4 -4
- data/lib/kontena/cli/master/{users/roles → user/role}/remove_command.rb +3 -4
- data/lib/kontena/cli/master/{users → user}/role_command.rb +3 -5
- data/lib/kontena/cli/master/user_command.rb +11 -0
- data/lib/kontena/cli/master/users_command.rb +8 -5
- data/lib/kontena/cli/master_command.rb +2 -1
- data/lib/kontena/cli/nodes/show_command.rb +3 -1
- data/lib/kontena/cli/plugins/install_command.rb +4 -4
- data/lib/kontena/cli/plugins/uninstall_command.rb +3 -2
- data/lib/kontena/cli/services/services_helper.rb +31 -9
- data/lib/kontena/cli/spinner.rb +4 -8
- data/lib/kontena/cli/stacks/build_command.rb +3 -1
- data/lib/kontena/cli/stacks/common.rb +44 -37
- data/lib/kontena/cli/stacks/install_command.rb +2 -2
- data/lib/kontena/cli/stacks/upgrade_command.rb +3 -1
- data/lib/kontena/cli/stacks/validate_command.rb +12 -10
- data/lib/kontena/cli/stacks/yaml/opto/service_instances_resolver.rb +1 -0
- data/lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb +1 -0
- data/lib/kontena/cli/stacks/yaml/opto/vault_cert_prompt_resolver.rb +1 -0
- data/lib/kontena/cli/stacks/yaml/opto/vault_resolver.rb +4 -2
- data/lib/kontena/cli/stacks/yaml/opto/vault_setter.rb +4 -3
- data/lib/kontena/cli/stacks/yaml/reader.rb +30 -7
- data/lib/kontena/cli/stacks/yaml/validations.rb +10 -0
- data/lib/kontena/cli/stacks/yaml/validator_v3.rb +88 -8
- data/lib/kontena/client.rb +14 -12
- data/lib/kontena/command.rb +10 -13
- data/lib/kontena/errors.rb +36 -0
- data/lib/kontena/plugin_manager.rb +8 -10
- data/lib/kontena/stacks_cache.rb +1 -1
- data/lib/kontena_cli.rb +5 -5
- data/spec/fixtures/stack-with-volumes.yml +33 -0
- data/spec/kontena/cli/master/{users → user}/invite_command_spec.rb +3 -3
- data/spec/kontena/cli/master/{users → user}/remove_command_spec.rb +3 -3
- data/spec/kontena/cli/master/{users/roles → user/role}/add_command_spec.rb +3 -3
- data/spec/kontena/cli/master/{users/roles → user/role}/remove_command_spec.rb +3 -3
- data/spec/kontena/cli/stacks/build_command_spec.rb +2 -2
- data/spec/kontena/cli/stacks/install_command_spec.rb +3 -3
- data/spec/kontena/cli/stacks/upgrade_command_spec.rb +6 -6
- data/spec/kontena/cli/stacks/yaml/opto/service_link_resolver_spec.rb +5 -0
- data/spec/kontena/cli/stacks/yaml/opto/vault_cert_prompt_resolver_spec.rb +6 -0
- data/spec/kontena/cli/stacks/yaml/reader_spec.rb +4 -2
- data/spec/kontena/client_spec.rb +19 -1
- data/spec/spec_helper.rb +2 -0
- metadata +19 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc1d241dbb42a8927a437e28fee00aba525bea78
|
4
|
+
data.tar.gz: f12240579934c0bad6f3d441c2744f0f5e9a5f8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5137972ce9856d048eb8e972f8e20bea52c75a014e04f12a2d34290e870830c2d321fd8a2f264243f65aa12ab8446e3b6b2d1fe8cca5b8b036db947789e4d96b
|
7
|
+
data.tar.gz: 064fbf5dc12b11581a36b83ccd96fc961a23fdc5decb1995c1dd15cc8d2793ade68c060eb05dc87e38da4ff1d5f2f3332ac397c01333d0e057729fa06deb4ae1
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.0.
|
1
|
+
1.2.0.pre2
|
data/lib/kontena/callback.rb
CHANGED
@@ -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"] &&
|
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"] &&
|
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"] &&
|
12
|
-
ENV["DEBUG"] &&
|
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"] &&
|
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"] &&
|
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"] &&
|
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"] &&
|
15
|
+
ENV["DEBUG"] && $stderr.puts("Running: #{cmd}")
|
16
16
|
Retriable.retriable do
|
17
17
|
Kontena.run(cmd)
|
18
18
|
end
|
@@ -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
|
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
|
-
|
111
|
+
$stderr.puts "#{file}:".colorize(color)
|
112
112
|
services.each do |service|
|
113
113
|
service.each do |name, errors|
|
114
|
-
|
114
|
+
$stderr.puts " #{name}:".colorize(color)
|
115
115
|
if errors.is_a?(String)
|
116
|
-
|
116
|
+
$stderr.puts " - #{errors}".colorize(color)
|
117
117
|
else
|
118
118
|
errors.each do |key, error|
|
119
|
-
|
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
|
-
|
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
|
-
|
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 =>
|
57
|
-
raise "Error while parsing #{file}
|
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
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
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
|
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
|
|
data/lib/kontena/cli/common.rb
CHANGED
@@ -12,7 +12,7 @@ module Kontena
|
|
12
12
|
|
13
13
|
def logger
|
14
14
|
return @logger if @logger
|
15
|
-
@logger = Logger.new(ENV["DEBUG"] ?
|
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: #{
|
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'] =
|
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 =
|
319
|
+
char = $stdin.getch
|
320
320
|
print "\r#{' ' * msg.length}\r"
|
321
321
|
if char == "\u0003"
|
322
322
|
error "Canceled"
|
data/lib/kontena/cli/config.rb
CHANGED
@@ -22,11 +22,11 @@ module Kontena
|
|
22
22
|
self
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
TokenExpiredError = Class.new(StandardError)
|
26
26
|
|
27
27
|
def initialize
|
28
28
|
super
|
29
|
-
@logger = Logger.new(ENV["DEBUG"] ?
|
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
|
-
|
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"] &&
|
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"] &&
|
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"] &&
|
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 '
|
2
|
+
require_relative 'role/add_command'
|
3
3
|
|
4
|
-
module Kontena::Cli::Master::
|
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
|
-
|
46
|
-
ENV["DEBUG"] &&
|
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::
|
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 =>
|
19
|
-
|
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::
|
4
|
-
module
|
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 =>
|
23
|
-
abort "Failed to add role #{role} to #{email} : #{
|
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::
|
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 =>
|
22
|
-
puts "Failed to remove role #{role} from #{email}"
|
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::
|
2
|
-
|
3
|
-
|
1
|
+
module Kontena::Cli::Master::User
|
4
2
|
class RoleCommand < Kontena::Command
|
5
|
-
subcommand "add", "Add role to user", load_subcommand('master/
|
6
|
-
subcommand ["remove", "rm"], "Remove role from user", load_subcommand('master/
|
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
|
+
|