kontena-cli 1.3.0 → 1.3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 53e6348ba5806ac61abf7550937caf49faabbde1
4
- data.tar.gz: fbf5b4479c3f0bd793282e5cc087e9f7650846f8
3
+ metadata.gz: 6045b4c6dceb33697e5f728679d1021cfba62519
4
+ data.tar.gz: d13307a8b2ecffa1b2bd5b4f02ad965a97db23fd
5
5
  SHA512:
6
- metadata.gz: d19ca552651121df5f07a874e26129e944ecf771eaf347157cb5950a04650e68e4328e52ca44fbccde947c66eababbccf55ceb7c7ae6a676a743c88617edd0ca
7
- data.tar.gz: 7204d1996106cbb9b2e6bb2f7902d74bfed8835467b326c16ec501b922a74eed835c5a96deca4b760e68487d7462d990b04f9cef2f55a2d289320accbc61913f
6
+ metadata.gz: 269cce5ddd6f2c6b47ce1df51c9d1d7b5abd1787d0eea28e9f10f5fcf9c85ecaafc6d655a281734dd33ed437a31d4f32d54fdfa575985be52f38535a5c735e6f
7
+ data.tar.gz: ee09b9b9522f59438db81170a0d9c6e7c79cec94c29e70d271f7b3cdafaec1cc83374d0d9664a4546b91f82288e63960c2b031920eabc985614fe8dc273995a1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 1.3.1.rc1
data/kontena-cli.gemspec CHANGED
@@ -31,7 +31,6 @@ Gem::Specification.new do |spec|
31
31
  spec.add_runtime_dependency "retriable", "~> 2.1.0"
32
32
  spec.add_runtime_dependency "opto", "1.8.5"
33
33
  spec.add_runtime_dependency "semantic", "~> 1.5"
34
- spec.add_runtime_dependency "safe_yaml", "~> 1.0"
35
34
  spec.add_runtime_dependency "liquid", "~> 4.0.0"
36
35
  spec.add_runtime_dependency "tty-table", "~> 0.8.0"
37
36
  spec.add_runtime_dependency "websocket-driver-kontena", "0.6.5"
@@ -1,6 +1,6 @@
1
1
  # stdlib
2
2
  autoload :JSON, 'json'
3
- autoload :YAML, 'safe_yaml'
3
+ autoload :YAML, 'yaml'
4
4
  autoload :URI, 'uri'
5
5
  autoload :Logger, 'logger'
6
6
  autoload :FileUtils, 'fileutils'
@@ -2,6 +2,7 @@ require_relative '../services/services_helper'
2
2
  require_relative './service_generator'
3
3
  require_relative './service_generator_v2'
4
4
  require_relative './yaml/reader'
5
+ require 'yaml'
5
6
 
6
7
  module Kontena::Cli::Apps
7
8
  module Common
@@ -1,5 +1,5 @@
1
1
  require_relative 'common'
2
- require 'pp'
2
+ require 'yaml'
3
3
 
4
4
  module Kontena::Cli::Apps
5
5
  class ConfigCommand < Kontena::Command
@@ -4,9 +4,6 @@ require_relative 'dockerfile_generator'
4
4
  require_relative 'docker_compose_generator'
5
5
  require_relative 'kontena_yml_generator'
6
6
 
7
- require "safe_yaml"
8
- SafeYAML::OPTIONS[:default_mode] = :safe
9
-
10
7
  module Kontena::Cli::Apps
11
8
  class InitCommand < Kontena::Command
12
9
  include Kontena::Cli::Common
@@ -1,6 +1,4 @@
1
1
  require_relative 'common'
2
- require "safe_yaml"
3
- SafeYAML::OPTIONS[:default_mode] = :safe
4
2
 
5
3
  module Kontena::Cli::Apps
6
4
  class KontenaYmlGenerator
@@ -1,5 +1,3 @@
1
- require "safe_yaml"
2
- SafeYAML::OPTIONS[:default_mode] = :safe
3
1
  require_relative 'service_extender'
4
2
  require_relative 'validator'
5
3
  require_relative 'validator_v2'
@@ -40,8 +40,6 @@ module Kontena::Cli::Master::Config
40
40
  require 'json'
41
41
  JSON.parse(data)
42
42
  when 'yaml', 'yml'
43
- require "safe_yaml"
44
- SafeYAML::OPTIONS[:default_mode] = :safe
45
43
  YAML.safe_load(data)
46
44
  else
47
45
  exit_with_error "Unknown input format '#{self.format}'"
@@ -66,7 +66,7 @@ module Kontena::Cli::Nodes
66
66
  unless quiet?
67
67
  grid_health = grid_health(grid, grid_nodes)
68
68
  grid_nodes.each do |node|
69
- node['name'] = health_icon(node_health(node, grid_health)) + " " + node['name']
69
+ node['name'] = health_icon(node_health(node, grid_health)) + " " + (node['name'] || '(initializing)')
70
70
  end
71
71
  end
72
72
 
@@ -14,28 +14,16 @@ module Kontena::Cli::Plugins
14
14
  installed_version = Kontena::PluginManager.instance.installed(name)
15
15
 
16
16
  if installed_version
17
- installed = spinner "Upgrading plugin #{name.colorize(:cyan)}" do |spin|
18
- begin
19
- Kontena::PluginManager.instance.upgrade_plugin(name, pre: pre?)
20
- rescue => ex
21
- $stderr.puts pastel.red("#{ex.class.name} : #{ex.message}")
22
- logger.error(ex)
23
- spin.fail!
24
- end
17
+ installed = spinner "Upgrading plugin #{name.colorize(:cyan)}" do
18
+ Kontena::PluginManager.instance.upgrade_plugin(name, pre: pre?)
25
19
  end
26
20
 
27
- spinner "Running cleanup" do |spin|
21
+ spinner "Running cleanup" do
28
22
  Kontena::PluginManager.instance.cleanup_plugin(name)
29
23
  end
30
24
  else
31
- installed = spinner "Installing plugin #{name.colorize(:cyan)}" do |spin|
32
- begin
33
- Kontena::PluginManager.instance.install_plugin(name, pre: pre?, version: version)
34
- rescue => ex
35
- $stderr.puts pastel.red("#{ex.class.name} : #{ex.message}")
36
- logger.error(ex)
37
- spin.fail!
38
- end
25
+ installed = spinner "Installing plugin #{name.colorize(:cyan)}" do
26
+ Kontena::PluginManager.instance.install_plugin(name, pre: pre?, version: version)
39
27
  end
40
28
  end
41
29
 
@@ -6,9 +6,11 @@ module Kontena::Cli::Plugins
6
6
  include Kontena::Cli::Common
7
7
 
8
8
  parameter 'NAME', 'Plugin name'
9
+
9
10
  option "--force", :flag, "Force remove", default: false, attribute_name: :forced
10
11
 
11
12
  def execute
13
+ exit_with_error "Plugin #{pastel.cyan(name)} is not installed" unless Kontena::PluginManager.instance.installed(name) && !ENV['NO_PLUGINS']
12
14
  confirm unless forced?
13
15
  spinner "Uninstalling plugin #{pastel.cyan(name)}" do |spin|
14
16
  begin
@@ -2,9 +2,7 @@ require_relative 'yaml/reader'
2
2
  require_relative '../services/services_helper'
3
3
  require_relative 'service_generator_v2'
4
4
  require_relative '../../stacks_client'
5
-
6
- require "safe_yaml"
7
- SafeYAML::OPTIONS[:default_mode] = :safe
5
+ require 'yaml'
8
6
 
9
7
  module Kontena::Cli::Stacks
10
8
  module Common
@@ -14,8 +14,6 @@ module Kontena::Cli::Stacks::Registry
14
14
 
15
15
  def execute
16
16
  require 'semantic'
17
- require "safe_yaml"
18
- SafeYAML::OPTIONS[:default_mode] = :safe
19
17
  unless versions?
20
18
  stack = ::YAML.safe_load(stacks_client.show(stack_name, stack_version))
21
19
  puts "#{stack['stack']}:"
@@ -25,8 +25,6 @@ module Kontena::Cli::Stacks
25
25
  attr_reader :file, :raw_content, :errors, :notifications, :defaults, :values, :registry
26
26
 
27
27
  def initialize(file, skip_validation: false, skip_variables: false, variables: nil, values: nil, defaults: nil)
28
- require "safe_yaml"
29
- SafeYAML::OPTIONS[:default_mode] = :safe
30
28
  require_relative 'service_extender'
31
29
  require_relative 'validator_v3'
32
30
  require_relative 'opto'
@@ -12,8 +12,7 @@ module Kontena::Cli::Vault
12
12
  def execute
13
13
  require 'shellwords'
14
14
  require 'json'
15
- require "safe_yaml"
16
- SafeYAML::OPTIONS[:default_mode] = :safe
15
+ require 'yaml'
17
16
  meth = json? ? :to_json : :to_yaml
18
17
  puts(
19
18
  Kontena.run!(['vault', 'ls', '--return']).sort.map do |secret|
@@ -16,8 +16,6 @@ module Kontena::Cli::Vault
16
16
 
17
17
  def parsed_input
18
18
  require "json"
19
- require "safe_yaml"
20
- SafeYAML::OPTIONS[:default_mode] = :safe
21
19
  json? ? JSON.load(input) : YAML.safe_load(input)
22
20
  end
23
21
 
@@ -9,25 +9,30 @@ class Kontena::MainCommand < Kontena::Command
9
9
  exit 0
10
10
  end
11
11
 
12
+ banner Kontena.pastel.green("Getting started:"), false
13
+ banner ' - Create a Kontena Master (see "kontena plugin search" for a list of', false
14
+ banner ' provisioning plugins)', false
15
+ banner ' - Or log into an existing master, use: "kontena master login <master url>"', false
16
+ banner ' - Read more about Kontena at https://www.kontena.io/docs/', false
17
+
18
+ subcommand "master", "Kontena Master specific commands", load_subcommand('master_command')
12
19
  subcommand "cloud", "Kontena Cloud specific commands", load_subcommand('cloud_command')
13
- subcommand "logout", "Logout from Kontena Masters or Kontena Cloud accounts", load_subcommand('logout_command')
20
+ subcommand "node", "Node specific commands", load_subcommand('node_command')
14
21
  subcommand "grid", "Grid specific commands", load_subcommand('grid_command')
15
- subcommand "app", "App specific commands", load_subcommand('app_command')
16
22
  subcommand "stack", "Stack specific commands", load_subcommand('stack_command')
17
23
  subcommand "service", "Service specific commands", load_subcommand('service_command')
24
+ subcommand "container", "Container specific commands", load_subcommand('container_command')
18
25
  subcommand "vault", "Vault specific commands", load_subcommand('vault_command')
19
- subcommand "certificate", "LE Certificate specific commands", load_subcommand('certificate_command')
20
- subcommand "node", "Node specific commands", load_subcommand('node_command')
21
- subcommand "master", "Master specific commands", load_subcommand('master_command')
22
26
  subcommand "vpn", "VPN specific commands", load_subcommand('vpn_command')
23
- subcommand "registry", "Registry specific commands", load_subcommand('registry_command')
24
- subcommand "container", "Container specific commands", load_subcommand('container_command')
25
27
  subcommand "etcd", "Etcd specific commands", load_subcommand('etcd_command')
28
+ subcommand "certificate", "LE Certificate specific commands", load_subcommand('certificate_command')
29
+ subcommand "registry", "Registry specific commands", load_subcommand('registry_command')
26
30
  subcommand "external-registry", "External registry specific commands", load_subcommand('external_registry_command')
31
+ subcommand "volume", "Volume specific commands [EXPERIMENTAL]", load_subcommand('volume_command')
32
+ subcommand "app", "App specific commands", load_subcommand('app_command')
33
+ subcommand "plugin", "Plugin specific commands", load_subcommand('plugin_command')
27
34
  subcommand "whoami", "Shows current logged in user", load_subcommand('whoami_command')
28
- subcommand "plugin", "Plugin related commands", load_subcommand('plugin_command')
29
35
  subcommand "version", "Show CLI and current master version", load_subcommand('version_command')
30
- subcommand "volume", "Volume specific commands [EXPERIMENTAL]", load_subcommand('volume_command')
31
36
 
32
37
  def execute
33
38
  end
@@ -40,12 +45,17 @@ class Kontena::MainCommand < Kontena::Command
40
45
  end
41
46
 
42
47
  def subcommand_missing(name)
48
+ extend Kontena::Cli::Common
43
49
  if known_plugin_subcommand?(name)
44
- extend Kontena::Cli::Common
45
50
  exit_with_error "The '#{name}' plugin has not been installed. Use: kontena plugin install #{name}"
46
- else
47
- super(name)
51
+ elsif name == 'login'
52
+ exit_with_error "Use 'kontena master login' to log into a Kontena Master\n"+
53
+ " or 'kontena cloud login' for logging into your Kontena Cloud account"
54
+ elsif name == 'logout'
55
+ exit_with_error "Use 'kontena master logout' to log out from a Kontena Master\n"+
56
+ " or 'kontena cloud logout' for logging out from your Kontena Cloud account"
48
57
  end
58
+ super
49
59
  end
50
60
 
51
61
  def known_plugin_subcommand?(name)
@@ -37,7 +37,7 @@ module Kontena
37
37
  minimal_deps: true
38
38
  )
39
39
  plugin_version = version.nil? ? Gem::Requirement.default : Gem::Requirement.new(version)
40
- without_safe { cmd.install(prefix(plugin_name), plugin_version) }
40
+ cmd.install(prefix(plugin_name), plugin_version)
41
41
  cmd.installed_gems
42
42
  end
43
43
 
@@ -110,7 +110,7 @@ module Kontena
110
110
  options = []
111
111
  options += ['-q', '--no-verbose'] unless ENV["DEBUG"]
112
112
  cmd.handle_options options
113
- without_safe { cmd.execute }
113
+ cmd.execute
114
114
  rescue Gem::SystemExitException => e
115
115
  return true if e.exit_code == 0
116
116
  raise
@@ -136,14 +136,6 @@ module Kontena
136
136
 
137
137
  private
138
138
 
139
- # Execute block without SafeYAML. Gem does security internally.
140
- def without_safe(&block)
141
- SafeYAML::OPTIONS[:default_mode] = :unsafe if Object.const_defined?(:SafeYAML)
142
- yield
143
- ensure
144
- SafeYAML::OPTIONS[:default_mode] = :safe if Object.const_defined?(:SafeYAML)
145
- end
146
-
147
139
  def plugin_debug?
148
140
  @plugin_debug ||= ENV['DEBUG'] == 'plugin'
149
141
  end
@@ -139,7 +139,7 @@ helper.logger.debug { "Completing #{words.inspect}" }
139
139
 
140
140
  begin
141
141
  completion = []
142
- completion.push %w(cloud logout grid app service stack vault certificate node master vpn registry container etcd external-registry whoami plugin version) if words.size < 2
142
+ completion.push %w(cloud grid app service stack vault certificate node master vpn registry container etcd external-registry whoami plugin version) if words.size < 2
143
143
  if words.size > 0
144
144
  case words[0]
145
145
  when 'plugin'
@@ -8,8 +8,6 @@ module Kontena
8
8
  attr_accessor :version
9
9
 
10
10
  def initialize(stack, version = nil)
11
- require "safe_yaml"
12
- SafeYAML::OPTIONS[:default_mode] = :safe
13
11
  unless version
14
12
  stack, version = stack.split(':', 2)
15
13
  end
@@ -1,5 +1,6 @@
1
1
  require "kontena/cli/apps/config_command"
2
2
  require 'ruby_dig'
3
+ require 'yaml'
3
4
 
4
5
  describe Kontena::Cli::Apps::ConfigCommand do
5
6
  include FixturesHelpers
@@ -111,6 +111,46 @@ describe Kontena::Cli::Nodes::ListCommand do
111
111
  end
112
112
  end
113
113
 
114
+ context "with two online nodes and one initializing node" do
115
+ before do
116
+ allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
117
+ { "nodes" => [
118
+ {
119
+ "connected" => true,
120
+ "name" => "node-1",
121
+ "node_number" => 1,
122
+ "initial_member" => true,
123
+ 'agent_version' => '1.1-dev',
124
+ },
125
+ {
126
+ "connected" => true,
127
+ "name" => "node-2",
128
+ "node_number" => 2,
129
+ "initial_member" => true,
130
+ 'agent_version' => '1.1-dev',
131
+ },
132
+ # node has just connected, but not sent any node_info yet
133
+ {
134
+ "connected" => false,
135
+ "name" => nil,
136
+ "node_number" => nil,
137
+ "initial_member" => false,
138
+ 'agent_version' => nil,
139
+ },
140
+ ]
141
+ }
142
+ )
143
+ end
144
+
145
+ it "outputs two nodes with warning and one initializing" do
146
+ expect{subject.run([])}.to output_table [
147
+ [':warning node-1', '1.1-dev', 'online', '1 / 3', '-'],
148
+ [':warning node-2', '1.1-dev', 'online', '2 / 3', '-'],
149
+ [':offline (initializing)', '', 'offline', '-', '-'],
150
+ ]
151
+ end
152
+ end
153
+
114
154
  context "with two online nodes and one offline node" do
115
155
  before do
116
156
  allow(client).to receive(:get).with('grids/test-grid/nodes').and_return(
@@ -0,0 +1,10 @@
1
+ require 'kontena/cli/plugins/install_command'
2
+
3
+ describe Kontena::Cli::Plugins::InstallCommand do
4
+ let(:subject) { described_class.new([]) }
5
+
6
+ it 'exits with error if plugin not found' do
7
+ expect(Kontena::PluginManager.instance).to receive(:install_plugin).and_raise(StandardError, 'bar')
8
+ expect{subject.run(['foofoo'])}.to exit_with_error.and output(/StandardError/).to_stderr
9
+ end
10
+ end
@@ -23,7 +23,7 @@ describe Kontena::Cli::Vault::ImportCommand do
23
23
  end
24
24
 
25
25
  it 'dies if the yml contains something odd' do
26
- expect(File).to receive(:read).with('foo.yml').and_return({foo: 'bar', bar: { foo: ["bar"] }}.to_yaml)
26
+ expect(File).to receive(:read).with('foo.yml').and_return("foo: bar\nbar:\n foo:\n - bar\n")
27
27
  expect(subject).to receive(:exit_with_error).with(/Invalid value/).and_call_original
28
28
  expect{subject.run(['--force', 'foo.yml'])}.to exit_with_error
29
29
  end
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.3.0
4
+ version: 1.3.1.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-06-09 00:00:00.000000000 Z
11
+ date: 2017-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,20 +164,6 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '1.5'
167
- - !ruby/object:Gem::Dependency
168
- name: safe_yaml
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '1.0'
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '1.0'
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: liquid
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -626,6 +612,7 @@ files:
626
612
  - spec/kontena/cli/nodes/health_command_spec.rb
627
613
  - spec/kontena/cli/nodes/list_command_spec.rb
628
614
  - spec/kontena/cli/nodes/ssh_command_spec.rb
615
+ - spec/kontena/cli/plugins/install_command_spec.rb
629
616
  - spec/kontena/cli/registry/create_spec.rb
630
617
  - spec/kontena/cli/services/containers_command_spec.rb
631
618
  - spec/kontena/cli/services/events_command_spec.rb
@@ -660,8 +647,8 @@ files:
660
647
  - spec/kontena/cli/stacks/yaml/service_extender_spec.rb
661
648
  - spec/kontena/cli/stacks/yaml/validator_v3_spec.rb
662
649
  - spec/kontena/cli/table_generator_spec.rb
663
- - spec/kontena/cli/vault/export_spec.rb
664
- - spec/kontena/cli/vault/import_spec.rb
650
+ - spec/kontena/cli/vault/export_command_spec.rb
651
+ - spec/kontena/cli/vault/import_command_spec.rb
665
652
  - spec/kontena/cli/vault/update_command_spec.rb
666
653
  - spec/kontena/cli/vault/write_command_spec.rb
667
654
  - spec/kontena/cli/version_command_spec.rb
@@ -695,9 +682,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
695
682
  version: 2.1.0
696
683
  required_rubygems_version: !ruby/object:Gem::Requirement
697
684
  requirements:
698
- - - ">="
685
+ - - ">"
699
686
  - !ruby/object:Gem::Version
700
- version: '0'
687
+ version: 1.3.1
701
688
  requirements: []
702
689
  rubyforge_project:
703
690
  rubygems_version: 2.6.8
@@ -781,6 +768,7 @@ test_files:
781
768
  - spec/kontena/cli/nodes/health_command_spec.rb
782
769
  - spec/kontena/cli/nodes/list_command_spec.rb
783
770
  - spec/kontena/cli/nodes/ssh_command_spec.rb
771
+ - spec/kontena/cli/plugins/install_command_spec.rb
784
772
  - spec/kontena/cli/registry/create_spec.rb
785
773
  - spec/kontena/cli/services/containers_command_spec.rb
786
774
  - spec/kontena/cli/services/events_command_spec.rb
@@ -815,8 +803,8 @@ test_files:
815
803
  - spec/kontena/cli/stacks/yaml/service_extender_spec.rb
816
804
  - spec/kontena/cli/stacks/yaml/validator_v3_spec.rb
817
805
  - spec/kontena/cli/table_generator_spec.rb
818
- - spec/kontena/cli/vault/export_spec.rb
819
- - spec/kontena/cli/vault/import_spec.rb
806
+ - spec/kontena/cli/vault/export_command_spec.rb
807
+ - spec/kontena/cli/vault/import_command_spec.rb
820
808
  - spec/kontena/cli/vault/update_command_spec.rb
821
809
  - spec/kontena/cli/vault/write_command_spec.rb
822
810
  - spec/kontena/cli/version_command_spec.rb