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.
- checksums.yaml +4 -4
- data/Dockerfile +7 -3
- data/Gemfile +7 -3
- data/README.md +1 -1
- data/VERSION +1 -1
- data/bin/kontena +1 -0
- data/kontena-cli.gemspec +5 -6
- data/lib/kontena/cli/browser_launcher.rb +61 -0
- data/lib/kontena/cli/certificate/authorize_command.rb +40 -16
- data/lib/kontena/cli/certificate/get_command.rb +1 -1
- data/lib/kontena/cli/cloud/login_command.rb +3 -4
- data/lib/kontena/cli/cloud/master/add_command.rb +1 -1
- data/lib/kontena/cli/cloud/master/list_command.rb +1 -1
- data/lib/kontena/cli/cloud/master/remove_command.rb +1 -1
- data/lib/kontena/cli/cloud/master/update_command.rb +1 -1
- data/lib/kontena/cli/common.rb +2 -2
- data/lib/kontena/cli/etcd_command.rb +1 -1
- data/lib/kontena/cli/external_registries/add_command.rb +2 -2
- data/lib/kontena/cli/external_registries/remove_command.rb +1 -1
- data/lib/kontena/cli/grids/common.rb +14 -4
- data/lib/kontena/cli/grids/events_command.rb +2 -2
- data/lib/kontena/cli/grids/list_command.rb +1 -1
- data/lib/kontena/cli/grids/logs_command.rb +1 -1
- data/lib/kontena/cli/grids/remove_command.rb +12 -10
- data/lib/kontena/cli/grids/trusted_subnets/add_command.rb +1 -1
- data/lib/kontena/cli/grids/trusted_subnets/remove_command.rb +12 -10
- data/lib/kontena/cli/grids/use_command.rb +1 -1
- data/lib/kontena/cli/helpers/log_helper.rb +1 -1
- data/lib/kontena/cli/logout_command.rb +1 -1
- data/lib/kontena/cli/master/login_command.rb +2 -3
- data/lib/kontena/cli/master/logout_command.rb +2 -2
- data/lib/kontena/cli/master/token/common.rb +2 -1
- data/lib/kontena/cli/master/token/create_command.rb +5 -2
- data/lib/kontena/cli/master/token/current_command.rb +9 -4
- data/lib/kontena/cli/master/token/list_command.rb +1 -1
- data/lib/kontena/cli/master/token/show_command.rb +11 -1
- data/lib/kontena/cli/master/user/invite_command.rb +1 -1
- data/lib/kontena/cli/master_command.rb +0 -1
- data/lib/kontena/cli/nodes/create_command.rb +1 -1
- data/lib/kontena/cli/nodes/labels/remove_command.rb +17 -3
- data/lib/kontena/cli/nodes/remove_command.rb +12 -10
- data/lib/kontena/cli/nodes/reset_token_command.rb +1 -1
- data/lib/kontena/cli/nodes/update_command.rb +1 -1
- data/lib/kontena/cli/plugin_command.rb +2 -1
- data/lib/kontena/cli/plugins/install_command.rb +2 -2
- data/lib/kontena/cli/plugins/uninstall_command.rb +19 -10
- data/lib/kontena/cli/plugins/upgrade_command.rb +60 -0
- data/lib/kontena/cli/registry/create_command.rb +1 -1
- data/lib/kontena/cli/registry/remove_command.rb +2 -2
- data/lib/kontena/cli/services/containers_command.rb +1 -1
- data/lib/kontena/cli/services/create_command.rb +1 -1
- data/lib/kontena/cli/services/deploy_command.rb +1 -1
- data/lib/kontena/cli/services/envs/add_command.rb +1 -1
- data/lib/kontena/cli/services/envs/remove_command.rb +5 -3
- data/lib/kontena/cli/services/link_command.rb +1 -1
- data/lib/kontena/cli/services/logs_command.rb +1 -1
- data/lib/kontena/cli/services/monitor_command.rb +1 -1
- data/lib/kontena/cli/services/remove_command.rb +11 -9
- data/lib/kontena/cli/services/restart_command.rb +1 -1
- data/lib/kontena/cli/services/secrets/link_command.rb +1 -1
- data/lib/kontena/cli/services/services_helper.rb +6 -12
- data/lib/kontena/cli/services/start_command.rb +5 -3
- data/lib/kontena/cli/services/stop_command.rb +5 -3
- data/lib/kontena/cli/services/unlink_command.rb +1 -1
- data/lib/kontena/cli/services/update_command.rb +1 -1
- data/lib/kontena/cli/spinner.rb +10 -10
- data/lib/kontena/cli/stack_command.rb +1 -0
- data/lib/kontena/cli/stacks/build_command.rb +6 -6
- data/lib/kontena/cli/stacks/deploy_command.rb +12 -10
- data/lib/kontena/cli/stacks/inspect_command.rb +17 -0
- data/lib/kontena/cli/stacks/install_command.rb +15 -4
- data/lib/kontena/cli/stacks/list_command.rb +2 -3
- data/lib/kontena/cli/stacks/logs_command.rb +1 -1
- data/lib/kontena/cli/stacks/monitor_command.rb +2 -2
- data/lib/kontena/cli/stacks/remove_command.rb +28 -19
- data/lib/kontena/cli/stacks/restart_command.rb +5 -4
- data/lib/kontena/cli/stacks/stop_command.rb +6 -5
- data/lib/kontena/cli/stacks/upgrade_command.rb +84 -64
- data/lib/kontena/cli/stacks/yaml/reader.rb +9 -4
- data/lib/kontena/cli/vault/remove_command.rb +7 -5
- data/lib/kontena/cli/vault/update_command.rb +1 -1
- data/lib/kontena/cli/vault/write_command.rb +1 -1
- data/lib/kontena/cli/volumes/remove_command.rb +6 -4
- data/lib/kontena/cli/vpn/create_command.rb +1 -1
- data/lib/kontena/cli/vpn/remove_command.rb +1 -1
- data/lib/kontena/client.rb +23 -14
- data/lib/kontena/command.rb +2 -2
- data/lib/kontena/debug_instrumentor.rb +11 -2
- data/lib/kontena/plugin_manager/common.rb +5 -2
- data/lib/kontena/plugin_manager/installer.rb +34 -10
- data/lib/kontena/scripts/completer.rb +91 -43
- data/lib/kontena/{cli/stacks → stacks}/change_resolver.rb +38 -16
- data/lib/kontena/stacks/stack_data.rb +58 -0
- data/lib/kontena/stacks/stack_data_set.rb +51 -0
- data/lib/kontena_cli.rb +1 -0
- data/omnibus/Gemfile.lock +32 -22
- data/omnibus/config/projects/kontena.rb +2 -0
- data/omnibus/config/software/kontena-cli.rb +6 -4
- data/omnibus/package-scripts/kontena/postinstall +1 -1
- data/omnibus/wrappers/sh/kontena +1 -1
- data/spec/fixtures/kontena_v3_with_registry_extends.yml +20 -0
- data/spec/kontena/cli/certificates/authorize_command_spec.rb +81 -0
- data/spec/kontena/cli/cloud/login_command_spec.rb +4 -4
- data/spec/kontena/cli/common_spec.rb +8 -1
- data/spec/kontena/cli/grids/update_command_spec.rb +13 -0
- data/spec/kontena/cli/master/join_command_spec.rb +1 -4
- data/spec/kontena/cli/master/login_command_spec.rb +4 -4
- data/spec/kontena/cli/master/token/create_command_spec.rb +132 -0
- data/spec/kontena/cli/master/token/show_command_spec.rb +90 -0
- data/spec/kontena/cli/nodes/labels/remove_command_spec.rb +35 -5
- data/spec/kontena/cli/stacks/install_command_spec.rb +16 -6
- data/spec/kontena/cli/stacks/remove_command_spec.rb +23 -2
- data/spec/kontena/cli/stacks/validate_command_spec.rb +1 -1
- data/spec/kontena/cli/stacks/yaml/reader_spec.rb +33 -1
- data/spec/kontena/client_spec.rb +38 -1
- data/spec/kontena/stacks/change_resolver_spec.rb +44 -0
- data/spec/kontena/stacks/stack_data_set_spec.rb +59 -0
- metadata +36 -34
- data/lib/kontena/cli/master/users_command.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d3147d4def0570ae7d592b83163f2a55bebcf939901adba261c18a78e3189e7
|
4
|
+
data.tar.gz: c6a3f61cfc69c56a62b1ae5e75ca45c5880937d8861a5e65c2f3074981070a44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c1b25a00c0c46e046d62d530a316d77949b766c6272b8bf56685fdb6ce902c1a7ed29b527b5ab18f985fa7adac46f95e42b1c6e74b04bea7916d362490290cb
|
7
|
+
data.tar.gz: dc54b0386062eea65878e11b0339658091afbfafa5beb45241ce46507c9dd3c4889897b653557cabc520593151faa4e213fd16138d15c3a548a9b67fb31bfd85
|
data/Dockerfile
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
FROM alpine:3.
|
1
|
+
FROM alpine:3.6
|
2
2
|
MAINTAINER Kontena, Inc. <info@kontena.io>
|
3
3
|
|
4
|
-
ADD https://get.docker.com/builds/Linux/x86_64/docker-1.10.3 /usr/local/bin/docker
|
5
4
|
ARG CLI_VERSION
|
6
5
|
|
7
6
|
RUN apk update && \
|
8
7
|
apk --update add ruby ruby-json ruby-bigdecimal ruby-io-console \
|
9
|
-
ca-certificates libssl1.0 openssl libstdc++ && \
|
8
|
+
curl ca-certificates libssl1.0 openssl libstdc++ && \
|
9
|
+
curl -sL https://download.docker.com/linux/static/stable/x86_64/docker-17.06.2-ce.tgz > /tmp/docker.tgz && \
|
10
|
+
cd /tmp && \
|
11
|
+
tar zxf docker.tgz && \
|
12
|
+
mv docker/docker /usr/local/bin/ && \
|
13
|
+
rm -rf /tmp/docker* && \
|
10
14
|
chmod +x /usr/local/bin/docker
|
11
15
|
|
12
16
|
RUN apk --update add --virtual build-dependencies ruby-dev build-base openssl-dev && \
|
data/Gemfile
CHANGED
@@ -2,11 +2,15 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in kontena-cli.gemspec
|
4
4
|
gemspec
|
5
|
-
|
5
|
+
|
6
|
+
group :test do
|
6
7
|
gem "rspec"
|
7
|
-
gem 'simplecov', :require => false, :group => :test
|
8
8
|
gem "kontena-plugin-hello", path: "./examples/kontena-plugin-hello"
|
9
|
+
gem 'simplecov', :require => false, :group => :test
|
10
|
+
gem 'webmock', '~> 3.0', require: false
|
11
|
+
end
|
12
|
+
|
13
|
+
group :development do
|
9
14
|
gem 'pry', require: false
|
10
15
|
gem 'pry-byebug', require: false
|
11
|
-
gem 'webmock', '~> 3.0', require: false
|
12
16
|
end
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
This is a command line tool for [Kontena](http://www.kontena.io).
|
5
5
|
|
6
6
|
## Installation
|
7
|
-
> Prerequisities: [Ruby](https://www.ruby-lang.org/en/) version 2.
|
7
|
+
> Prerequisities: [Ruby](https://www.ruby-lang.org/en/) version 2.2.0 or greater.
|
8
8
|
|
9
9
|
Install it yourself as:
|
10
10
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.5.0.pre1
|
data/bin/kontena
CHANGED
data/kontena-cli.gemspec
CHANGED
@@ -18,16 +18,15 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.required_ruby_version = ">= 2.
|
21
|
+
spec.required_ruby_version = ">= 2.2.0"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
-
spec.add_runtime_dependency "excon", "
|
26
|
-
spec.add_runtime_dependency "tty-prompt", "0.
|
27
|
-
spec.add_runtime_dependency "clamp", "~> 1.1
|
25
|
+
spec.add_runtime_dependency "excon", "0.60.0"
|
26
|
+
spec.add_runtime_dependency "tty-prompt", "0.14.0"
|
27
|
+
spec.add_runtime_dependency "clamp", "~> 1.2.1"
|
28
28
|
spec.add_runtime_dependency "ruby_dig", "~> 0.0.2"
|
29
|
-
spec.add_runtime_dependency "
|
30
|
-
spec.add_runtime_dependency "hash_validator", "~> 0.7.1"
|
29
|
+
spec.add_runtime_dependency "hash_validator", "0.8.0"
|
31
30
|
spec.add_runtime_dependency "retriable", "~> 2.1.0"
|
32
31
|
spec.add_runtime_dependency "opto", "1.8.7"
|
33
32
|
spec.add_runtime_dependency "semantic", "~> 1.5"
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'kontena/util'
|
2
|
+
|
3
|
+
module Kontena
|
4
|
+
module Cli
|
5
|
+
class BrowserLauncher
|
6
|
+
def self.open(url)
|
7
|
+
Kontena::Cli::BrowserLauncher.new(url).launch
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :url
|
11
|
+
|
12
|
+
def initialize(url)
|
13
|
+
@url = url
|
14
|
+
end
|
15
|
+
|
16
|
+
def launch
|
17
|
+
system(*command)
|
18
|
+
end
|
19
|
+
|
20
|
+
def command
|
21
|
+
cmd = if Kontena.on_windows?
|
22
|
+
['cmd', '/c', 'start', '/b', url.gsub(/&/, '^&')]
|
23
|
+
elsif RUBY_PLATFORM =~ /darwin/
|
24
|
+
["open", url]
|
25
|
+
elsif Kontena.browserless?
|
26
|
+
raise RuntimeError, "Environment variable DISPLAY not set, assuming non-desktop session, unable to open browser. Try using '--remote' option."
|
27
|
+
else
|
28
|
+
[detect_unixlike_command, url]
|
29
|
+
end
|
30
|
+
|
31
|
+
Kontena.logger.debug { "Using %p to launch browser" % cmd }
|
32
|
+
|
33
|
+
cmd
|
34
|
+
end
|
35
|
+
|
36
|
+
def detect_unixlike_command
|
37
|
+
Kontena.logger.debug { "Assuming unix-like environment, looking for browser" }
|
38
|
+
|
39
|
+
cmd = %w(
|
40
|
+
xdg-open
|
41
|
+
sensible-browser
|
42
|
+
x-www-browser
|
43
|
+
).find { |c| !which(c).nil? }
|
44
|
+
|
45
|
+
if cmd.nil?
|
46
|
+
if ENV['BROWSER']
|
47
|
+
cmd = which(ENV['BROWSER'])
|
48
|
+
return cmd unless cmd.nil?
|
49
|
+
end
|
50
|
+
raise RuntimeError, "Unable to launch a local browser. Try installing xdg-utils or sensible-utils package, setting BROWSER environment variable or using the --remote option"
|
51
|
+
end
|
52
|
+
|
53
|
+
cmd
|
54
|
+
end
|
55
|
+
|
56
|
+
def which(cmd)
|
57
|
+
Kontena::Util.which(cmd)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -13,22 +13,36 @@ module Kontena::Cli::Certificate
|
|
13
13
|
option '--type', 'AUTHORIZATION_TYPE', 'Authorization type, either tls-sni-01 or dns-01', default: 'dns-01'
|
14
14
|
option '--linked-service', "LINKED_SERVICE", 'A service (usually LB) where the tls-sni-01 challenge certificate is bundled to'
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
requires_current_master
|
17
|
+
requires_current_master_token
|
18
|
+
requires_current_grid
|
19
|
+
|
20
|
+
def requires_linked_service?
|
21
|
+
case type
|
22
|
+
when 'dns-01'
|
23
|
+
false
|
24
|
+
when 'http-01'
|
25
|
+
true
|
26
|
+
when 'tls-sni-01'
|
27
|
+
true
|
28
|
+
else
|
29
|
+
fail "Invalid authorization --type=#{type}"
|
30
|
+
end
|
31
|
+
end
|
19
32
|
|
20
|
-
|
33
|
+
def execute
|
34
|
+
exit_with_error "--linked-service is required with --type=#{type}" if requires_linked_service? && !self.linked_service
|
21
35
|
|
22
36
|
data = {
|
23
37
|
domain: domain,
|
24
38
|
authorization_type: self.type
|
25
39
|
}
|
26
|
-
data[
|
40
|
+
data[:linked_service] = service_path(self.linked_service) if self.linked_service
|
27
41
|
retried = false
|
28
42
|
|
29
43
|
response = nil
|
30
44
|
retry_on_le_registration do
|
31
|
-
response = client
|
45
|
+
response = client.post("grids/#{current_grid}/domain_authorizations", data)
|
32
46
|
end
|
33
47
|
|
34
48
|
case self.type
|
@@ -37,28 +51,38 @@ module Kontena::Cli::Certificate
|
|
37
51
|
puts "Record name: #{response.dig('challenge_opts', 'record_name')}.#{domain}"
|
38
52
|
puts "Record type: #{response.dig('challenge_opts', 'record_type')}"
|
39
53
|
puts "Record content: #{response.dig('challenge_opts', 'record_content')}"
|
54
|
+
when 'http-01'
|
55
|
+
domain_auth = spinner "Waiting for http-01 challenge to be deployed into #{response.dig('linked_service', 'id').colorize(:cyan)} " do
|
56
|
+
wait_for_domain_auth_deployed(response)
|
57
|
+
end
|
58
|
+
if domain_auth['state'] == 'deploy_error'
|
59
|
+
exit_with_error "Linked services deploy failed. Check service events for details"
|
60
|
+
else
|
61
|
+
puts "HTTP challenge is deployed, you can now request the actual certificate"
|
62
|
+
end
|
40
63
|
when 'tls-sni-01'
|
41
|
-
|
42
|
-
|
43
|
-
state = wait_for_domain_auth_deployed(token, response['id'])
|
64
|
+
domain_auth = spinner "Waiting for tls-sni-01 challenge to be deployed into #{response.dig('linked_service', 'id').colorize(:cyan)} " do
|
65
|
+
wait_for_domain_auth_deployed(response)
|
44
66
|
end
|
45
|
-
if state == 'deploy_error'
|
46
|
-
|
67
|
+
if domain_auth['state'] == 'deploy_error'
|
68
|
+
exit_with_error "Linked services deploy failed. Check service events for details"
|
47
69
|
else
|
48
70
|
puts "TLS-SNI challenge certificate is deployed, you can now request the actual certificate"
|
49
71
|
end
|
50
72
|
else
|
51
73
|
exit_with_error "Unknown authorization type: #{self.type}"
|
52
74
|
end
|
53
|
-
|
54
75
|
end
|
55
76
|
|
56
|
-
def wait_for_domain_auth_deployed(
|
57
|
-
state = nil
|
77
|
+
def wait_for_domain_auth_deployed(domain_auth)
|
58
78
|
Timeout.timeout(300) {
|
59
|
-
|
79
|
+
while domain_auth['status'] == 'deploying' do
|
80
|
+
sleep 1
|
81
|
+
|
82
|
+
domain_auth = client.get("domain_authorizations/#{domain_auth['id']}")
|
83
|
+
end
|
84
|
+
return domain_auth
|
60
85
|
}
|
61
|
-
state
|
62
86
|
end
|
63
87
|
|
64
88
|
def service_path(linked_service)
|
@@ -24,7 +24,7 @@ module Kontena::Cli::Certificate
|
|
24
24
|
response = client(token).post("certificates/#{current_grid}/certificate", data)
|
25
25
|
puts "Certificate successfully received and stored into vault with keys:"
|
26
26
|
response.each do |secret|
|
27
|
-
puts
|
27
|
+
puts pastel.green(secret)
|
28
28
|
end
|
29
29
|
puts "Use the #{secret}_BUNDLE with Kontena loadbalancer!"
|
30
30
|
|
@@ -74,7 +74,7 @@ module Kontena::Cli::Cloud
|
|
74
74
|
exit_with_error "Parsing remote login URL failed."
|
75
75
|
end
|
76
76
|
|
77
|
-
puts "Please visit #{verification_uri.to_s
|
77
|
+
puts "Please visit #{pastel.cyan(verification_uri.to_s)} and enter the code"
|
78
78
|
puts
|
79
79
|
puts "#{auth_request_response['user_code']}"
|
80
80
|
puts
|
@@ -105,7 +105,7 @@ module Kontena::Cli::Cloud
|
|
105
105
|
end
|
106
106
|
|
107
107
|
require_relative '../localhost_web_server'
|
108
|
-
require '
|
108
|
+
require 'kontena/cli/browser_launcher'
|
109
109
|
|
110
110
|
uri = URI.parse(kontena_account.authorization_endpoint)
|
111
111
|
uri.host ||= kontena_account.url
|
@@ -137,12 +137,11 @@ module Kontena::Cli::Cloud
|
|
137
137
|
puts
|
138
138
|
|
139
139
|
server_thread = Thread.new { Thread.main['response'] = web_server.serve_one }
|
140
|
-
|
140
|
+
Kontena::Cli::BrowserLauncher.open(uri.to_s)
|
141
141
|
|
142
142
|
spinner "Waiting for browser authorization response" do
|
143
143
|
server_thread.join
|
144
144
|
end
|
145
|
-
browser_thread.join
|
146
145
|
|
147
146
|
update_token(Thread.main['response'])
|
148
147
|
end
|
@@ -146,7 +146,7 @@ module Kontena::Cli::Cloud::Master
|
|
146
146
|
elsif self.id?
|
147
147
|
puts response['data']['id']
|
148
148
|
else
|
149
|
-
puts "Registered master."
|
149
|
+
puts pastel.green("Registered master.")
|
150
150
|
puts "ID: #{response['data']['id']}"
|
151
151
|
puts "Client ID: #{response['data']['attributes']['client-id']}"
|
152
152
|
puts "Client Secret: #{response['data']['attributes']['client-secret']}"
|
@@ -20,7 +20,7 @@ module Kontena::Cli::Cloud::Master
|
|
20
20
|
end
|
21
21
|
|
22
22
|
unless response && response.kind_of?(Hash) && response['data'].kind_of?(Array)
|
23
|
-
abort "Listing masters failed"
|
23
|
+
abort pastel.red("Listing masters failed")
|
24
24
|
end
|
25
25
|
|
26
26
|
return Array(response['data']) if self.return?
|
@@ -26,7 +26,7 @@ module Kontena::Cli::Cloud::Master
|
|
26
26
|
spinner "Retrieving a list of registered masters on Kontena Cloud" do
|
27
27
|
response = cloud_client.get('user/masters')
|
28
28
|
unless response && response.kind_of?(Hash) && response['data'].kind_of?(Array)
|
29
|
-
abort 'Listing masters failed'
|
29
|
+
abort pastel.red('Listing masters failed')
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
data/lib/kontena/cli/common.rb
CHANGED
@@ -154,7 +154,7 @@ module Kontena
|
|
154
154
|
logger.debug { msg }
|
155
155
|
return
|
156
156
|
end
|
157
|
-
puts " [#{ success ? 'done'
|
157
|
+
puts " [#{ success ? pastel.green('done') : pastel.red('fail')}] #{msg}"
|
158
158
|
end
|
159
159
|
|
160
160
|
def warning(msg)
|
@@ -270,7 +270,7 @@ module Kontena
|
|
270
270
|
exit_with_error 'Command requires --force' unless $stdout.tty? && $stdin.tty?
|
271
271
|
puts "Destructive command. To proceed, type \"#{name}\" or re-run this command with --force option."
|
272
272
|
|
273
|
-
ask("Enter '#{name}' to confirm: ") == name || error("Confirmation did not match #{name}. Aborted command.")
|
273
|
+
ask("Enter '#{name}' to confirm: ") == name.to_s || error("Confirmation did not match #{name}. Aborted command.")
|
274
274
|
end
|
275
275
|
|
276
276
|
def confirm(message = 'Destructive command. You can skip this prompt by running this command with --force option. Are you sure?')
|
@@ -4,7 +4,7 @@ class Kontena::Cli::EtcdCommand < Kontena::Command
|
|
4
4
|
subcommand "set", "Set a value on the specified key", load_subcommand('etcd/set_command')
|
5
5
|
subcommand ["mkdir", "mk"], "Create a directory", load_subcommand('etcd/mkdir_command')
|
6
6
|
subcommand ["list", "ls"], "List a directory", load_subcommand('etcd/list_command')
|
7
|
-
subcommand "rm", "Remove a key or a directory", load_subcommand('etcd/remove_command')
|
7
|
+
subcommand ["remove", "rm"], "Remove a key or a directory", load_subcommand('etcd/remove_command')
|
8
8
|
subcommand "health", "Check etcd health", load_subcommand('etcd/health_command')
|
9
9
|
|
10
10
|
def execute
|
@@ -6,8 +6,8 @@ module Kontena::Cli::ExternalRegistries
|
|
6
6
|
parameter '[URL]', 'Docker Registry url', default: 'https://index.docker.io/v2/'
|
7
7
|
|
8
8
|
option ['-u', '--username'], 'USERNAME', 'Username', required: true
|
9
|
-
option ['-e', '--email'], 'EMAIL', 'Email', required: true
|
10
9
|
option ['-p', '--password'], 'PASSWORD', 'Password', required: true
|
10
|
+
option ['-e', '--email'], 'EMAIL', 'Email', required: false
|
11
11
|
|
12
12
|
def execute
|
13
13
|
require_api_url
|
@@ -17,7 +17,7 @@ module Kontena::Cli::ExternalRegistries
|
|
17
17
|
self.url = "https://#{self.url}" unless self.url.start_with?('http')
|
18
18
|
|
19
19
|
data = { username: username, password: password, email: email, url: url }
|
20
|
-
spinner "Adding #{
|
20
|
+
spinner "Adding #{pastel.cyan(url)} to external registries " do
|
21
21
|
client(token).post("grids/#{current_grid}/external_registries", data)
|
22
22
|
end
|
23
23
|
end
|
@@ -9,7 +9,7 @@ module Kontena::Cli::ExternalRegistries
|
|
9
9
|
require_api_url
|
10
10
|
token = require_token
|
11
11
|
confirm_command(name) unless forced?
|
12
|
-
spinner "Removing #{
|
12
|
+
spinner "Removing #{pastel.cyan(name)} external-registry from #{pastel.cyan(current_grid)} grid " do
|
13
13
|
client(token).delete("external_registries/#{current_grid}/#{name}")
|
14
14
|
end
|
15
15
|
end
|
@@ -122,14 +122,24 @@ module Kontena::Cli::Grids
|
|
122
122
|
def self.included(base)
|
123
123
|
base.option "--default-affinity", "[AFFINITY]", "Default affinity rule for the grid", multivalued: true
|
124
124
|
base.option "--statsd-server", "STATSD_SERVER", "Statsd server address (host:port)"
|
125
|
-
base.option "--log-forwarder", "LOG_FORWARDER", "Set grid wide log forwarder
|
125
|
+
base.option "--log-forwarder", "LOG_FORWARDER", "Set grid wide log forwarder" do |log_forwarder|
|
126
|
+
if log_forwarder == 'none'
|
127
|
+
warn "[DEPRECATED] --log-forwarder none will be replaced with --no-log-forwarder"
|
128
|
+
end
|
129
|
+
log_forwarder
|
130
|
+
end
|
131
|
+
base.option "--no-log-forwarder", :flag, "Disable log forwarding"
|
126
132
|
base.option "--log-opt", "[LOG_OPT]", "Set log options (key=value)", multivalued: true
|
127
133
|
end
|
128
134
|
|
129
135
|
def validate_log_opts
|
130
|
-
if !log_opt_list.empty? && log_forwarder.nil?
|
136
|
+
if !log_opt_list.empty? && (log_forwarder.nil? || no_log_forwarder?)
|
131
137
|
raise Kontena::Errors::StandardError.new(1, "Need to specify --log-forwarder when using --log-opt")
|
132
138
|
end
|
139
|
+
|
140
|
+
if no_log_forwarder? && !log_forwarder.nil? && log_forwarder != "none"
|
141
|
+
exit_with_error "Can't use --log-forwarder and --no-log-forwarder together"
|
142
|
+
end
|
133
143
|
end
|
134
144
|
|
135
145
|
def parse_log_opts
|
@@ -156,9 +166,9 @@ module Kontena::Cli::Grids
|
|
156
166
|
}
|
157
167
|
end
|
158
168
|
|
159
|
-
if log_forwarder
|
169
|
+
if log_forwarder || no_log_forwarder?
|
160
170
|
payload[:logs] = {
|
161
|
-
forwarder: log_forwarder,
|
171
|
+
forwarder: no_log_forwarder? ? 'none' : log_forwarder,
|
162
172
|
opts: parse_log_opts
|
163
173
|
}
|
164
174
|
end
|
@@ -37,9 +37,9 @@ module Kontena::Cli::Grids
|
|
37
37
|
|
38
38
|
time = log['created_at']
|
39
39
|
if log['severity'] == 2
|
40
|
-
time =
|
40
|
+
time = pastel.yellow(time)
|
41
41
|
elsif log['severity'] >= 3
|
42
|
-
time =
|
42
|
+
time = pastel.red(time)
|
43
43
|
end
|
44
44
|
|
45
45
|
puts '%-25s %-25s %-40s %s' % [
|