kontena-cli 1.4.2 → 1.4.3.rc1
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/cli/certificate/get_command.rb +2 -2
- data/lib/kontena/cli/certificate_command.rb +1 -1
- data/lib/kontena/cli/cloud_command.rb +6 -2
- data/lib/kontena/cli/helpers/exec_helper.rb +2 -2
- data/lib/kontena/cli/master/token/current_command.rb +1 -1
- data/lib/kontena/cli/stacks/install_command.rb +4 -2
- data/lib/kontena/cli/stacks/registry/push_command.rb +11 -7
- data/lib/kontena/cli/stacks/upgrade_command.rb +0 -2
- data/lib/kontena/cli/stacks/validate_command.rb +7 -7
- data/lib/kontena/cli/stacks/yaml/opto/service_instances_resolver.rb +1 -2
- data/lib/kontena/cli/stacks/yaml/reader.rb +1 -1
- data/lib/kontena/plugin_manager/loader.rb +2 -2
- data/spec/kontena/cli/cloud_command_spec.rb +17 -0
- data/spec/kontena/cli/helpers/exec_helper_spec.rb +1 -1
- data/spec/kontena/cli/master/token/current_spec.rb +40 -0
- data/spec/spec_helper.rb +1 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c89aaf80a9dadce77e13ea22f0625d29a9a3aab7d32c4509b810fbe9249922f
|
4
|
+
data.tar.gz: 0321b6425831606908933ed2385e38a4982430ad7f6b6e14438b41a2b85aa1d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f4d405d097a668e02dcf85edee1d8da793e4ceffb988f188b9b3069ab762cb645ec95be3c6abe8633d54571dec44087684e04c1d4e25c178d83cabe7ada00cb
|
7
|
+
data.tar.gz: 5ff4310c6e174dd1723c0a5ab6df3525f73e8f49e8b07b09e5198e1ecb4ef3430450f5d2265560f67186c30e807cab5f44c11b38f325a42f3d46e6b9621ac38a
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.3.rc1
|
@@ -4,7 +4,7 @@ module Kontena::Cli::Certificate
|
|
4
4
|
include Kontena::Cli::Common
|
5
5
|
include Kontena::Cli::GridOptions
|
6
6
|
|
7
|
-
BANNER = "This command is now deprecated in favor of 'kontena certificate request' command"
|
7
|
+
BANNER = Kontena.pastel.yellow("[DEPRECATED] This command is now deprecated in favor of 'kontena certificate request' command")
|
8
8
|
|
9
9
|
banner BANNER
|
10
10
|
|
@@ -14,7 +14,7 @@ module Kontena::Cli::Certificate
|
|
14
14
|
|
15
15
|
|
16
16
|
def execute
|
17
|
-
|
17
|
+
warn BANNER
|
18
18
|
|
19
19
|
require_api_url
|
20
20
|
token = require_token
|
@@ -7,7 +7,7 @@ class Kontena::Cli::CertificateCommand < Kontena::Command
|
|
7
7
|
subcommand "register", "Register to LetsEncrypt", load_subcommand('certificate/register_command')
|
8
8
|
subcommand "authorize", "Create DNS authorization for domain", load_subcommand('certificate/authorize_command')
|
9
9
|
subcommand "request", "Request certificate for domain", load_subcommand('certificate/request_command')
|
10
|
-
subcommand "get", "Get certificate for domain", load_subcommand('certificate/get_command')
|
10
|
+
subcommand "get", "Get certificate for domain [DEPRECATED]", load_subcommand('certificate/get_command')
|
11
11
|
subcommand "import", "Import certificate from file", load_subcommand('certificate/import_command')
|
12
12
|
subcommand ["remove", "rm"], "Remove certificate for domain", load_subcommand('certificate/remove_command')
|
13
13
|
|
@@ -1,9 +1,13 @@
|
|
1
1
|
|
2
2
|
class Kontena::Cli::CloudCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
3
5
|
subcommand "login", "Authenticate to Kontena Cloud", load_subcommand('cloud/login_command')
|
4
6
|
subcommand "logout", "Logout from Kontena Cloud", load_subcommand('cloud/logout_command')
|
5
7
|
subcommand "master", "Master specific commands", load_subcommand('cloud/master_command')
|
6
8
|
|
7
|
-
def
|
9
|
+
def subcommand_missing(name)
|
10
|
+
return super(name) unless %w(platform node org organization image-repository ir region token).include?(name)
|
11
|
+
exit_with_error "The #{pastel.cyan('cloud')} plugin has not been installed. Use: #{pastel.cyan('kontena plugin install cloud')}"
|
8
12
|
end
|
9
|
-
end
|
13
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'tty-screen'
|
2
2
|
require 'kontena-websocket-client'
|
3
3
|
|
4
4
|
module Kontena::Cli::Helpers
|
@@ -107,7 +107,7 @@ module Kontena::Cli::Helpers
|
|
107
107
|
Thread.new do
|
108
108
|
begin
|
109
109
|
if tty
|
110
|
-
console_height, console_width =
|
110
|
+
console_height, console_width = TTY::Screen.size
|
111
111
|
websocket_exec_write(ws, 'tty_size' => {
|
112
112
|
width: console_width, height: console_height
|
113
113
|
})
|
@@ -24,10 +24,10 @@ module Kontena::Cli::Stacks
|
|
24
24
|
requires_current_master_token
|
25
25
|
|
26
26
|
def execute
|
27
|
-
set_env_variables(stack_name, current_grid)
|
28
|
-
|
29
27
|
install_dependencies unless skip_dependencies?
|
30
28
|
|
29
|
+
set_env_variables(stack_name, current_grid)
|
30
|
+
|
31
31
|
stack # runs validations
|
32
32
|
|
33
33
|
hint_on_validation_notifications(reader.notifications)
|
@@ -42,6 +42,7 @@ module Kontena::Cli::Stacks
|
|
42
42
|
def install_dependencies
|
43
43
|
dependencies = loader.dependencies
|
44
44
|
return if dependencies.nil?
|
45
|
+
|
45
46
|
dependencies.each do |dependency|
|
46
47
|
target_name = "#{stack_name}-#{dependency['name']}"
|
47
48
|
caret "Installing dependency #{pastel.cyan(dependency['stack'])} as #{pastel.cyan(target_name)}"
|
@@ -56,6 +57,7 @@ module Kontena::Cli::Stacks
|
|
56
57
|
cmd << dependency['stack']
|
57
58
|
Kontena.run!(cmd)
|
58
59
|
end
|
60
|
+
|
59
61
|
end
|
60
62
|
|
61
63
|
def create_stack
|
@@ -7,8 +7,7 @@ module Kontena::Cli::Stacks::Registry
|
|
7
7
|
|
8
8
|
banner "Pushes (uploads) a stack to the stack registry"
|
9
9
|
|
10
|
-
|
11
|
-
include Kontena::Cli::Stacks::Common::StackValuesFromOption
|
10
|
+
parameter "[FILE]", "Kontena stack file path", default: "kontena.yml", attribute_name: :source
|
12
11
|
|
13
12
|
requires_current_account_token
|
14
13
|
|
@@ -20,17 +19,22 @@ module Kontena::Cli::Stacks::Registry
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def includes_local_extends?
|
23
|
-
|
22
|
+
loader.yaml.fetch('services', {}).any? { |_, svc| svc.key?('extends') && svc['extends'].key?('file') }
|
24
23
|
end
|
25
24
|
|
26
25
|
def execute
|
27
|
-
|
28
|
-
|
26
|
+
exit_with_error "Can only perform push from local files" unless loader.origin == "file"
|
29
27
|
exit_with_error "Stack file contains dependencies to local files" if includes_local_dependencies?
|
30
28
|
exit_with_error "Stack file has services that extend from local files" if includes_local_extends?
|
31
29
|
|
32
|
-
spinner("Pushing #{pastel.cyan(source)} to
|
33
|
-
|
30
|
+
spinner("Pushing #{pastel.cyan(source)} to stack registry as #{loader.stack_name}") do
|
31
|
+
unless dry_run?
|
32
|
+
stacks_client.push(
|
33
|
+
loader.stack_name.stack_name,
|
34
|
+
loader.stack_name.version,
|
35
|
+
loader.content
|
36
|
+
)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
@@ -29,8 +29,6 @@ module Kontena::Cli::Stacks
|
|
29
29
|
|
30
30
|
# @return [Kontena::Cli::Stacks::ChangeResolver]
|
31
31
|
def execute
|
32
|
-
set_env_variables(stack_name, current_grid)
|
33
|
-
|
34
32
|
old_data = spinner "Reading stack #{pastel.cyan(stack_name)} from master" do
|
35
33
|
gather_master_data(stack_name)
|
36
34
|
end
|
@@ -39,13 +39,6 @@ module Kontena::Cli::Stacks
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def execute
|
42
|
-
if online?
|
43
|
-
set_env_variables(stack_name, require_current_grid)
|
44
|
-
else
|
45
|
-
config.current_master = nil
|
46
|
-
set_env_variables(stack_name, 'validate', 'validate-platform')
|
47
|
-
end
|
48
|
-
|
49
42
|
if dependency_tree?
|
50
43
|
puts ::YAML.dump('name' => stack_name, 'stack' => source, 'depends' => stack['dependencies'])
|
51
44
|
exit 0
|
@@ -53,6 +46,13 @@ module Kontena::Cli::Stacks
|
|
53
46
|
|
54
47
|
validate_dependencies if dependencies?
|
55
48
|
|
49
|
+
if online?
|
50
|
+
set_env_variables(stack_name, require_current_grid)
|
51
|
+
else
|
52
|
+
config.current_master = nil
|
53
|
+
set_env_variables(stack_name, 'validate', 'validate-platform')
|
54
|
+
end
|
55
|
+
|
56
56
|
stack # runs validations
|
57
57
|
|
58
58
|
hint_on_validation_notifications(reader.notifications, dependencies? ? loader.source : nil)
|
@@ -6,8 +6,7 @@ module Kontena::Cli::Stacks
|
|
6
6
|
def resolve
|
7
7
|
return nil unless current_master && current_grid
|
8
8
|
require 'kontena/cli/stacks/show_command'
|
9
|
-
|
10
|
-
stack = read_command.fetch_stack(self.stack)
|
9
|
+
stack = client.get("stacks/#{current_grid}/#{self.stack}")
|
11
10
|
service = stack['services'].find { |s| s['name'] == hint }
|
12
11
|
if service
|
13
12
|
service['instances']
|
@@ -63,7 +63,7 @@ module Kontena::Cli::Stacks
|
|
63
63
|
# Values that are set always when parsing stacks
|
64
64
|
# @return [Hash] a hash of key value pairs
|
65
65
|
def default_envs
|
66
|
-
|
66
|
+
{
|
67
67
|
'GRID' => env['GRID'],
|
68
68
|
'STACK' => env['STACK'],
|
69
69
|
'PLATFORM' => env['PLATFORM'] || env['GRID']
|
@@ -40,7 +40,7 @@ module Kontena
|
|
40
40
|
require(path)
|
41
41
|
Kontena.logger.debug { "Loaded plugin #{spec.name}" } if plugin_debug?
|
42
42
|
|
43
|
-
report_tracking
|
43
|
+
report_tracking(spec)
|
44
44
|
true
|
45
45
|
rescue ScriptError, LoadError, StandardError => ex
|
46
46
|
warn " [#{Kontena.pastel.red('error')}] Failed to load plugin: #{spec.name} from #{spec.gem_dir}\n\tRerun the command with environment DEBUG=true set to get the full exception."
|
@@ -79,7 +79,7 @@ module Kontena
|
|
79
79
|
@load_path_before = $LOAD_PATH.dup
|
80
80
|
end
|
81
81
|
|
82
|
-
def report_tracking
|
82
|
+
def report_tracking(spec)
|
83
83
|
return unless plugin_debug?
|
84
84
|
added_features = ($LOADED_FEATURES - @loaded_features_before).map {|feat| "- #{feat}"}
|
85
85
|
added_paths = ($LOAD_PATH - @load_path_before).map {|feat| "- #{feat}"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'kontena/cli/cloud_command'
|
2
|
+
|
3
|
+
describe Kontena::Cli::CloudCommand do
|
4
|
+
let(:subject) { described_class.new('kontena') }
|
5
|
+
|
6
|
+
|
7
|
+
describe '#subcommand_missing' do
|
8
|
+
it 'suggests plugin install for known cloud plugin commands' do
|
9
|
+
expect{subject.run(['platform', 'xyz'])}.to exit_with_error.and output(/has not been installed/).to_stderr
|
10
|
+
expect{subject.run(['organization', 'xyz'])}.to exit_with_error.and output(/has not been installed/).to_stderr
|
11
|
+
expect{subject.run(['ir', 'xyz'])}.to exit_with_error.and output(/has not been installed/).to_stderr
|
12
|
+
expect{subject.run(['region', 'xyz'])}.to exit_with_error.and output(/has not been installed/).to_stderr
|
13
|
+
expect{subject.run(['node', 'xyz'])}.to exit_with_error.and output(/has not been installed/).to_stderr
|
14
|
+
expect{subject.run(['token', 'xyz'])}.to exit_with_error.and output(/has not been installed/).to_stderr
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -273,7 +273,7 @@ describe Kontena::Cli::Helpers::ExecHelper do
|
|
273
273
|
|
274
274
|
it 'connects and sends messages from stdin' do
|
275
275
|
stdin_eol = false
|
276
|
-
allow(
|
276
|
+
allow(TTY::Screen).to receive(:size).and_return([100, 100])
|
277
277
|
expect(websocket_client).to receive(:send).once.with('{"tty_size":{"width":100,"height":100}}')
|
278
278
|
expect(websocket_client).to receive(:send).once.with('{"cmd":["test-tty"]}')
|
279
279
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'kontena/cli/master/token_command'
|
2
|
+
require 'kontena/cli/master/token/current_command'
|
3
|
+
|
4
|
+
describe Kontena::Cli::Master::Token::CurrentCommand do
|
5
|
+
|
6
|
+
include ClientHelpers
|
7
|
+
include RequirementsHelper
|
8
|
+
|
9
|
+
expect_to_require_current_master
|
10
|
+
expect_to_require_current_master_token
|
11
|
+
|
12
|
+
let(:master) { double(token: double(access_token: 'foo', refresh_token: 'bar', expires_at: Time.now.utc.to_i + 999)) }
|
13
|
+
|
14
|
+
before do
|
15
|
+
allow(subject).to receive(:current_master).and_return(master)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'runs master token show with the current token' do
|
19
|
+
expect(Kontena).to receive(:run!).with(['master', 'token', 'show', 'foo'])
|
20
|
+
subject.execute
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '--token' do
|
24
|
+
it 'outputs the current access token' do
|
25
|
+
expect{subject.run(['--token'])}.to output(/\Afoo\Z/).to_stdout
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '--refresh-token' do
|
30
|
+
it 'outputs the current refresh token' do
|
31
|
+
expect{subject.run(['--refresh-token'])}.to output(/\Abar\Z/).to_stdout
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'expires-in' do
|
36
|
+
it 'reports time until token expiration' do
|
37
|
+
expect{subject.run(['--expires-in'])}.to output(/\A[0-9]{3}\Z/).to_stdout
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kontena-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kontena, Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -570,6 +570,7 @@ files:
|
|
570
570
|
- spec/kontena/cli/cloud/login_command_spec.rb
|
571
571
|
- spec/kontena/cli/cloud/logout_command_spec.rb
|
572
572
|
- spec/kontena/cli/cloud/master/add_command_spec.rb
|
573
|
+
- spec/kontena/cli/cloud_command_spec.rb
|
573
574
|
- spec/kontena/cli/common_spec.rb
|
574
575
|
- spec/kontena/cli/containers/exec_command_spec.rb
|
575
576
|
- spec/kontena/cli/containers/list_command_spec.rb
|
@@ -589,6 +590,7 @@ files:
|
|
589
590
|
- spec/kontena/cli/master/join_command_spec.rb
|
590
591
|
- spec/kontena/cli/master/login_command_spec.rb
|
591
592
|
- spec/kontena/cli/master/logout_command_spec.rb
|
593
|
+
- spec/kontena/cli/master/token/current_spec.rb
|
592
594
|
- spec/kontena/cli/master/use_command_spec.rb
|
593
595
|
- spec/kontena/cli/master/user/invite_command_spec.rb
|
594
596
|
- spec/kontena/cli/master/user/remove_command_spec.rb
|
@@ -692,9 +694,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
692
694
|
version: 2.1.0
|
693
695
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
694
696
|
requirements:
|
695
|
-
- - "
|
697
|
+
- - ">"
|
696
698
|
- !ruby/object:Gem::Version
|
697
|
-
version:
|
699
|
+
version: 1.3.1
|
698
700
|
requirements: []
|
699
701
|
rubyforge_project:
|
700
702
|
rubygems_version: 2.7.3
|
@@ -744,6 +746,7 @@ test_files:
|
|
744
746
|
- spec/kontena/cli/cloud/login_command_spec.rb
|
745
747
|
- spec/kontena/cli/cloud/logout_command_spec.rb
|
746
748
|
- spec/kontena/cli/cloud/master/add_command_spec.rb
|
749
|
+
- spec/kontena/cli/cloud_command_spec.rb
|
747
750
|
- spec/kontena/cli/common_spec.rb
|
748
751
|
- spec/kontena/cli/containers/exec_command_spec.rb
|
749
752
|
- spec/kontena/cli/containers/list_command_spec.rb
|
@@ -763,6 +766,7 @@ test_files:
|
|
763
766
|
- spec/kontena/cli/master/join_command_spec.rb
|
764
767
|
- spec/kontena/cli/master/login_command_spec.rb
|
765
768
|
- spec/kontena/cli/master/logout_command_spec.rb
|
769
|
+
- spec/kontena/cli/master/token/current_spec.rb
|
766
770
|
- spec/kontena/cli/master/use_command_spec.rb
|
767
771
|
- spec/kontena/cli/master/user/invite_command_spec.rb
|
768
772
|
- spec/kontena/cli/master/user/remove_command_spec.rb
|