kontena-cli 1.4.2 → 1.4.3.rc1
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/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
|