kontena-cli 0.11.7 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/kontena +2 -4
  4. data/kontena-cli.gemspec +1 -0
  5. data/lib/kontena/cli/app_command.rb +1 -1
  6. data/lib/kontena/cli/apps/common.rb +30 -3
  7. data/lib/kontena/cli/apps/deploy_command.rb +1 -0
  8. data/lib/kontena/cli/apps/list_command.rb +1 -0
  9. data/lib/kontena/cli/apps/logs_command.rb +9 -3
  10. data/lib/kontena/cli/apps/monitor_command.rb +1 -0
  11. data/lib/kontena/cli/apps/remove_command.rb +2 -0
  12. data/lib/kontena/cli/apps/scale_command.rb +2 -1
  13. data/lib/kontena/cli/apps/show_command.rb +1 -0
  14. data/lib/kontena/cli/apps/start_command.rb +1 -0
  15. data/lib/kontena/cli/apps/stop_command.rb +1 -0
  16. data/lib/kontena/cli/common.rb +5 -1
  17. data/lib/kontena/cli/containers/exec_command.rb +1 -0
  18. data/lib/kontena/cli/containers/inspect_command.rb +1 -0
  19. data/lib/kontena/cli/etcd/get_command.rb +2 -1
  20. data/lib/kontena/cli/etcd/list_command.rb +1 -0
  21. data/lib/kontena/cli/etcd/mkdir_command.rb +2 -1
  22. data/lib/kontena/cli/etcd/remove_command.rb +2 -1
  23. data/lib/kontena/cli/etcd/set_command.rb +2 -1
  24. data/lib/kontena/cli/etcd_command.rb +2 -2
  25. data/lib/kontena/cli/external_registries/add_command.rb +1 -0
  26. data/lib/kontena/cli/external_registries/delete_command.rb +2 -0
  27. data/lib/kontena/cli/external_registries/list_command.rb +1 -0
  28. data/lib/kontena/cli/external_registries/remove_command.rb +13 -0
  29. data/lib/kontena/cli/external_registry_command.rb +4 -3
  30. data/lib/kontena/cli/grid_command.rb +5 -1
  31. data/lib/kontena/cli/grid_options.rb +12 -0
  32. data/lib/kontena/cli/grids/add_user_command.rb +1 -0
  33. data/lib/kontena/cli/grids/cloud_config_command.rb +41 -0
  34. data/lib/kontena/cli/grids/common.rb +65 -4
  35. data/lib/kontena/cli/grids/logs_command.rb +9 -4
  36. data/lib/kontena/cli/grids/remove_user_command.rb +1 -0
  37. data/lib/kontena/cli/grids/update_command.rb +27 -0
  38. data/lib/kontena/cli/master/use_command.rb +12 -2
  39. data/lib/kontena/cli/master/users/add_role_command.rb +26 -0
  40. data/lib/kontena/cli/master/users/invite_command.rb +24 -0
  41. data/lib/kontena/cli/master/users/list_command.rb +18 -0
  42. data/lib/kontena/cli/master/users/remove_role_command.rb +26 -0
  43. data/lib/kontena/cli/master/users_command.rb +14 -0
  44. data/lib/kontena/cli/master_command.rb +2 -1
  45. data/lib/kontena/cli/node_command.rb +7 -1
  46. data/lib/kontena/cli/nodes/add_label_command.rb +19 -0
  47. data/lib/kontena/cli/nodes/aws/create_command.rb +2 -1
  48. data/lib/kontena/cli/nodes/aws/restart_command.rb +1 -0
  49. data/lib/kontena/cli/nodes/aws/terminate_command.rb +1 -0
  50. data/lib/kontena/cli/nodes/azure/create_command.rb +1 -0
  51. data/lib/kontena/cli/nodes/azure/restart_command.rb +1 -0
  52. data/lib/kontena/cli/nodes/azure/terminate_command.rb +1 -0
  53. data/lib/kontena/cli/nodes/digital_ocean/create_command.rb +1 -0
  54. data/lib/kontena/cli/nodes/digital_ocean/restart_command.rb +1 -0
  55. data/lib/kontena/cli/nodes/digital_ocean/terminate_command.rb +1 -0
  56. data/lib/kontena/cli/nodes/list_command.rb +10 -14
  57. data/lib/kontena/cli/nodes/remove_command.rb +1 -0
  58. data/lib/kontena/cli/nodes/remove_label_command.rb +23 -0
  59. data/lib/kontena/cli/nodes/show_command.rb +1 -0
  60. data/lib/kontena/cli/nodes/ssh_command.rb +1 -0
  61. data/lib/kontena/cli/nodes/update_command.rb +1 -0
  62. data/lib/kontena/cli/nodes/vagrant/create_command.rb +1 -0
  63. data/lib/kontena/cli/nodes/vagrant/restart_command.rb +1 -0
  64. data/lib/kontena/cli/nodes/vagrant/ssh_command.rb +1 -0
  65. data/lib/kontena/cli/nodes/vagrant/start_command.rb +1 -0
  66. data/lib/kontena/cli/nodes/vagrant/stop_command.rb +1 -0
  67. data/lib/kontena/cli/nodes/vagrant/terminate_command.rb +1 -0
  68. data/lib/kontena/cli/registry/create_command.rb +80 -30
  69. data/lib/kontena/cli/registry/delete_command.rb +3 -0
  70. data/lib/kontena/cli/registry/remove_command.rb +15 -0
  71. data/lib/kontena/cli/registry_command.rb +3 -1
  72. data/lib/kontena/cli/service_command.rb +20 -4
  73. data/lib/kontena/cli/services/add_env_command.rb +1 -0
  74. data/lib/kontena/cli/services/add_secret_command.rb +24 -0
  75. data/lib/kontena/cli/services/containers_command.rb +1 -0
  76. data/lib/kontena/cli/services/create_command.rb +3 -2
  77. data/lib/kontena/cli/services/delete_command.rb +2 -0
  78. data/lib/kontena/cli/services/deploy_command.rb +1 -0
  79. data/lib/kontena/cli/services/envs_command.rb +1 -0
  80. data/lib/kontena/cli/services/link_command.rb +26 -0
  81. data/lib/kontena/cli/services/list_command.rb +13 -10
  82. data/lib/kontena/cli/services/logs_command.rb +13 -5
  83. data/lib/kontena/cli/services/monitor_command.rb +1 -0
  84. data/lib/kontena/cli/services/remove_command.rb +17 -0
  85. data/lib/kontena/cli/services/remove_env_command.rb +1 -0
  86. data/lib/kontena/cli/services/remove_secret_command.rb +28 -0
  87. data/lib/kontena/cli/services/restart_command.rb +1 -0
  88. data/lib/kontena/cli/services/scale_command.rb +2 -1
  89. data/lib/kontena/cli/services/show_command.rb +1 -0
  90. data/lib/kontena/cli/services/start_command.rb +1 -0
  91. data/lib/kontena/cli/services/stats_command.rb +5 -4
  92. data/lib/kontena/cli/services/stop_command.rb +1 -0
  93. data/lib/kontena/cli/services/unlink_command.rb +25 -0
  94. data/lib/kontena/cli/services/update_command.rb +4 -3
  95. data/lib/kontena/cli/users_command.rb +15 -0
  96. data/lib/kontena/cli/vault/list_command.rb +1 -0
  97. data/lib/kontena/cli/vault/read_command.rb +1 -0
  98. data/lib/kontena/cli/vault/remove_command.rb +1 -0
  99. data/lib/kontena/cli/vault/write_command.rb +1 -0
  100. data/lib/kontena/cli/version_command.rb +9 -1
  101. data/lib/kontena/cli/vpn/config_command.rb +1 -0
  102. data/lib/kontena/cli/vpn/create_command.rb +1 -0
  103. data/lib/kontena/cli/vpn/delete_command.rb +2 -0
  104. data/lib/kontena/cli/vpn/remove_command.rb +15 -0
  105. data/lib/kontena/cli/vpn_command.rb +3 -1
  106. data/lib/kontena/machine/aws/node_destroyer.rb +1 -1
  107. data/lib/kontena/machine/cloud_config/cloudinit.yml +70 -0
  108. data/lib/kontena/machine/cloud_config/node_generator.rb +28 -0
  109. data/lib/kontena/machine/digital_ocean/cloudinit.yml +22 -0
  110. data/lib/kontena/machine/digital_ocean/node_destroyer.rb +4 -2
  111. data/lib/kontena/machine/random_name.rb +3 -3
  112. data/lib/kontena/scripts/completer +7 -3
  113. data/spec/fixtures/docker-compose.yml +8 -0
  114. data/spec/fixtures/kontena.yml +17 -0
  115. data/spec/fixtures/mysql.yml +3 -0
  116. data/spec/fixtures/wordpress-scaled.yml +3 -0
  117. data/spec/fixtures/wordpress.yml +2 -0
  118. data/spec/kontena/cli/app/common_spec.rb +42 -0
  119. data/spec/kontena/cli/app/deploy_command_spec.rb +4 -31
  120. data/spec/kontena/cli/app/scale_spec.rb +4 -23
  121. data/spec/kontena/cli/master/use_command_spec.rb +12 -3
  122. data/spec/kontena/cli/master/users/add_role_command_spec.rb +35 -0
  123. data/spec/kontena/cli/master/users/invite_command_spec.rb +35 -0
  124. data/spec/kontena/cli/master/users/remove_role_command_spec.rb +35 -0
  125. data/spec/kontena/cli/services/add_secret_command_spec.rb +61 -0
  126. data/spec/kontena/cli/services/link_command_spec.rb +43 -0
  127. data/spec/kontena/cli/services/remove_secret_command_spec.rb +48 -0
  128. data/spec/kontena/cli/services/restart_command_spec.rb +1 -23
  129. data/spec/kontena/cli/services/unlink_command_spec.rb +43 -0
  130. data/spec/kontena/cli/version_command_spec.rb +17 -0
  131. data/spec/spec_helper.rb +6 -1
  132. data/spec/support/client_helpers.rb +31 -0
  133. data/spec/support/fixtures_helpers.rb +7 -0
  134. metadata +67 -6
  135. data/lib/kontena/cli/deploy_command.rb +0 -164
  136. data/lib/kontena/cli/invite_command.rb +0 -13
  137. data/spec/kontena/cli/deploy_command_spec.rb +0 -239
@@ -1,8 +1,11 @@
1
1
  module Kontena::Cli::Registry
2
2
  class DeleteCommand < Clamp::Command
3
3
  include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
4
5
 
5
6
  def execute
7
+ puts "DEPRECATION WARNING: Support for 'kontena registry delete' will be dropped. Use 'kontena registry remove' instead.".colorize(:red)
8
+
6
9
  require_api_url
7
10
  token = require_token
8
11
 
@@ -0,0 +1,15 @@
1
+ module Kontena::Cli::Registry
2
+ class RemoveCommand < Clamp::Command
3
+ include Kontena::Cli::Common
4
+
5
+ def execute
6
+ require_api_url
7
+ token = require_token
8
+
9
+ registry = client(token).get("services/#{current_grid}/registry") rescue nil
10
+ abort("Docker Registry service does not exist") if registry.nil?
11
+
12
+ client(token).delete("services/#{current_grid}/registry")
13
+ end
14
+ end
15
+ end
@@ -1,10 +1,12 @@
1
1
  require_relative 'registry/create_command'
2
2
  require_relative 'registry/delete_command'
3
+ require_relative 'registry/remove_command'
3
4
 
4
5
  class Kontena::Cli::RegistryCommand < Clamp::Command
5
6
 
6
7
  subcommand "create", "Create Docker image registry service", Kontena::Cli::Registry::CreateCommand
7
- subcommand "delete", "Delete Docker image registry service", Kontena::Cli::Registry::DeleteCommand
8
+ subcommand ["remove","rm"], "Remove Docker image registry service", Kontena::Cli::Registry::RemoveCommand
9
+ subcommand "delete", "[DEPRECATED] Delete Docker image registry service", Kontena::Cli::Registry::DeleteCommand
8
10
 
9
11
  def execute
10
12
  end
@@ -8,17 +8,25 @@ require_relative 'services/restart_command'
8
8
  require_relative 'services/create_command'
9
9
  require_relative 'services/scale_command'
10
10
  require_relative 'services/delete_command'
11
+ require_relative 'services/remove_command'
11
12
  require_relative 'services/containers_command'
12
13
  require_relative 'services/logs_command'
13
14
  require_relative 'services/stats_command'
15
+ require_relative 'services/monitor_command'
16
+
14
17
  require_relative 'services/envs_command'
15
18
  require_relative 'services/add_env_command'
16
19
  require_relative 'services/remove_env_command'
17
- require_relative 'services/monitor_command'
20
+
21
+ require_relative 'services/add_secret_command'
22
+ require_relative 'services/remove_secret_command'
23
+
24
+ require_relative 'services/link_command'
25
+ require_relative 'services/unlink_command'
18
26
 
19
27
  class Kontena::Cli::ServiceCommand < Clamp::Command
20
28
 
21
- subcommand "list", "List services", Kontena::Cli::Services::ListCommand
29
+ subcommand ["list","ls"], "List services", Kontena::Cli::Services::ListCommand
22
30
  subcommand "create", "Create a new service", Kontena::Cli::Services::CreateCommand
23
31
  subcommand "show", "Show service details", Kontena::Cli::Services::ShowCommand
24
32
  subcommand "update", "Update service configuration", Kontena::Cli::Services::UpdateCommand
@@ -27,14 +35,22 @@ class Kontena::Cli::ServiceCommand < Clamp::Command
27
35
  subcommand "start", "Start service", Kontena::Cli::Services::StartCommand
28
36
  subcommand "restart", "Restart service", Kontena::Cli::Services::RestartCommand
29
37
  subcommand "scale", "Scale service", Kontena::Cli::Services::ScaleCommand
30
- subcommand "delete", "Delete service", Kontena::Cli::Services::DeleteCommand
38
+ subcommand ["remove", "rm"], "Remove service", Kontena::Cli::Services::RemoveCommand
39
+ subcommand "delete", "[DEPRECATED] Delete service", Kontena::Cli::Services::DeleteCommand
31
40
  subcommand "containers", "List service containers", Kontena::Cli::Services::ContainersCommand
32
41
  subcommand "logs", "Show service logs", Kontena::Cli::Services::LogsCommand
33
42
  subcommand "stats", "Show service statistics", Kontena::Cli::Services::StatsCommand
43
+ subcommand "monitor", "Monitor", Kontena::Cli::Services::MonitorCommand
44
+
34
45
  subcommand "envs", "Show environment variables", Kontena::Cli::Services::EnvsCommand
35
46
  subcommand "add-env", "Add environment variable", Kontena::Cli::Services::AddEnvCommand
36
47
  subcommand "remove-env", "Remove environment variable", Kontena::Cli::Services::RemoveEnvCommand
37
- subcommand "monitor", "Monitor", Kontena::Cli::Services::MonitorCommand
48
+
49
+ subcommand "add-secret", "Add secret from Vault", Kontena::Cli::Services::AddSecretCommand
50
+ subcommand "remove-secret", "Remove secret", Kontena::Cli::Services::RemoveSecretCommand
51
+
52
+ subcommand "link", "Link service to another service", Kontena::Cli::Services::LinkCommand
53
+ subcommand "unlink", "Unlink service from another service", Kontena::Cli::Services::UnlinkCommand
38
54
 
39
55
  def execute
40
56
  end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class AddEnvCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -0,0 +1,24 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Kontena::Cli::Services
4
+ class AddSecretCommand < Clamp::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
7
+ include ServicesHelper
8
+
9
+ parameter "NAME", "Service name"
10
+ parameter "SECRET", "Secret to be added from Vault (format: secret:name:type)"
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ result = client(token).get("services/#{parse_service_id(name)}")
16
+ secrets = result['secrets']
17
+ secrets << parse_secrets([secret])[0]
18
+ data = {
19
+ secrets: secrets
20
+ }
21
+ client(token).put("services/#{parse_service_id(name)}", data)
22
+ end
23
+ end
24
+ end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class ContainersCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class CreateCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -27,11 +28,11 @@ module Kontena::Cli::Services
27
28
  option "--net", "NET", "Network mode"
28
29
  option "--log-driver", "LOG_DRIVER", "Set logging driver"
29
30
  option "--log-opt", "LOG_OPT", "Add logging options", multivalued: true
30
- option "--deploy-strategy", "STRATEGY", "Deploy strategy to use (ha, random)"
31
+ option "--deploy-strategy", "STRATEGY", "Deploy strategy to use (ha, daemon, random)"
31
32
  option "--deploy-wait-for-port", "PORT", "Wait for port to respond when deploying"
32
33
  option "--deploy-min-health", "FLOAT", "The minimum percentage (0.0 - 1.0) of healthy instances that do not sacrifice overall service availability while deploying"
33
34
  option "--pid", "PID", "Pid namespace to use"
34
- option "--secret", "SECRET", "Import secret from Vault", multivalued: true
35
+ option "--secret", "SECRET", "Import secret from Vault (format: <secret>:<name>:<env>)", multivalued: true
35
36
 
36
37
  def execute
37
38
  require_api_url
@@ -3,11 +3,13 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class DeleteCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
9
10
 
10
11
  def execute
12
+ puts "DEPRECATION WARNING: Support for 'kontena service delete' will be dropped. Use 'kontena service remove' instead.".colorize(:red)
11
13
  require_api_url
12
14
  token = require_token
13
15
 
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class DeployCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class EnvsCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -0,0 +1,26 @@
1
+ require_relative '../grid_options'
2
+ require_relative 'services_helper'
3
+
4
+ module Kontena::Cli::Services
5
+ class LinkCommand < Clamp::Command
6
+ include Kontena::Cli::Common
7
+ include Kontena::Cli::GridOptions
8
+ include ServicesHelper
9
+
10
+ parameter "NAME", "Service name"
11
+ parameter "TARGET", "Link target service name"
12
+
13
+ def execute
14
+ require_api_url
15
+ token = require_token
16
+
17
+ service = client(token).get("services/#{parse_service_id(name)}")
18
+ existing_targets = service['links'].map{|l| l['grid_service_id'].split('/')[1]}
19
+ abort("Service is already linked to #{target.to_s}") if existing_targets.include?(target.to_s)
20
+ links = service['links'].map{|l| {name: l['grid_service_id'].split('/')[1], alias: l['alias']} }
21
+ links << {name: target.to_s, alias: target.to_s}
22
+ data = {links: links}
23
+ update_service(token, name, data)
24
+ end
25
+ end
26
+ end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class ListCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  def execute
@@ -10,22 +11,24 @@ module Kontena::Cli::Services
10
11
  token = require_token
11
12
 
12
13
  grids = client(token).get("grids/#{current_grid}/services")
13
- titles = ['NAME', 'IMAGE', 'INSTANCES', 'STATEFUL', 'STATE']
14
- puts "%-30.30s %-50.50s %-10s %-8s %-10s" % titles
14
+ titles = ['NAME', 'INSTANCES', 'STATEFUL', 'STATE', 'EXPOSED PORTS']
15
+ puts "%-60.60s %-10s %-8s %-10s %-50s" % titles
15
16
  grids['services'].each do |service|
16
17
  stateful = service['stateful'] ? 'yes' : 'no'
17
- image = service['image']
18
- if image.length > 50
19
- image = image[0..10] << '...' << image[-35..-1]
20
- end
18
+ running = service['instances']['running']
19
+ desired = service['container_count']
20
+ instances = "#{running} / #{desired}"
21
+ ports = service['ports'].map{|p|
22
+ "#{p['ip']}:#{p['node_port']}->#{p['container_port']}/#{p['protocol']}"
23
+ }.join(", ")
21
24
  vars = [
22
25
  service['name'],
23
- image,
24
- service['container_count'],
26
+ instances,
25
27
  stateful,
26
- service['state']
28
+ service['state'],
29
+ ports
27
30
  ]
28
- puts "%-30.30s %-50.50s %-10.10s %-8s %-10s" % vars
31
+ puts "%-60.60s %-10.10s %-8s %-10s %-50s" % vars
29
32
  end
30
33
  end
31
34
  end
@@ -3,12 +3,15 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class LogsCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
9
- option ["-f", "--follow"], :flag, "Follow (tail) logs", default: false
10
+ option ["-t", "--tail"], :flag, "Tail (follow) logs", default: false
11
+ option ["-l", "--lines"], "LINES", "How many lines to show", default: '100'
12
+ option "--since", "SINCE", "Show logs since given timestamp"
10
13
  option ["-s", "--search"], "SEARCH", "Search from logs"
11
- option ["-c", "--container"], "CONTAINER", "Show only specified container logs"
14
+ option ["-i", "--instance"], "INSTANCE", "Show only given instance specific logs"
12
15
 
13
16
  def execute
14
17
  require_api_url
@@ -16,17 +19,22 @@ module Kontena::Cli::Services
16
19
  last_id = nil
17
20
  loop do
18
21
  query_params = []
22
+ query_params << "limit=#{lines}"
19
23
  query_params << "from=#{last_id}" unless last_id.nil?
24
+ query_params << "since=#{since}" if !since.nil? && last_id.nil?
20
25
  query_params << "search=#{search}" if search
21
- query_params << "container=#{container}" if container
26
+ query_params << "container=#{name}-#{instance}" if instance
22
27
 
23
28
  result = client(token).get("services/#{current_grid}/#{name}/container_logs?#{query_params.join('&')}")
24
29
  result['logs'].each do |log|
25
30
  color = color_for_container(log['name'])
26
- puts "#{log['name'].colorize(color)} | #{log['data']}"
31
+ instance_number = log['name'].match(/^.+-(\d+)$/)[1]
32
+ name = instance_number.nil? ? log['name'] : instance_number
33
+ prefix = "#{log['created_at']} [#{name}]:".colorize(color)
34
+ puts "#{prefix} #{log['data']}"
27
35
  last_id = log['id']
28
36
  end
29
- break unless follow?
37
+ break unless tail?
30
38
  sleep(2)
31
39
  end
32
40
  end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class MonitorCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -0,0 +1,17 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Kontena::Cli::Services
4
+ class RemoveCommand < Clamp::Command
5
+ include Kontena::Cli::Common
6
+ include ServicesHelper
7
+
8
+ parameter "NAME", "Service name"
9
+
10
+ def execute
11
+ require_api_url
12
+ token = require_token
13
+
14
+ result = client(token).delete("services/#{parse_service_id(name)}")
15
+ end
16
+ end
17
+ end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class RemoveEnvCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -0,0 +1,28 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Kontena::Cli::Services
4
+ class RemoveSecretCommand < Clamp::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
7
+ include ServicesHelper
8
+
9
+ parameter "NAME", "Service name"
10
+ parameter "SECRET", "Secret to be removed (format: secret:name:type)"
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ result = client(token).get("services/#{parse_service_id(name)}")
16
+ secrets = result['secrets']
17
+ remove_secret = parse_secrets([secret])[0]
18
+ if secrets.delete_if{|s| s['name'] == remove_secret[:name] && s['secret'] == remove_secret[:secret]}
19
+ data = {
20
+ secrets: secrets
21
+ }
22
+ client(token).put("services/#{parse_service_id(name)}", data)
23
+ else
24
+ abort("Secret not found")
25
+ end
26
+ end
27
+ end
28
+ end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class RestartCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -3,13 +3,14 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class ScaleCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
9
10
  parameter "INSTANCES", "Scales service to given number of instances"
10
11
 
11
12
  def execute
12
- token = require_token
13
+ token = require_token
13
14
  scale_service(token, name, instances)
14
15
  end
15
16
  end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class ShowCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class StartCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
@@ -3,21 +3,22 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class StatsCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
  include ServicesHelper
7
8
 
8
9
  parameter "NAME", "Service name"
9
- option ["-f", "--follow"], :flag, "Follow stats in real time", default: false
10
+ option ["-t", "--tail"], :flag, "Tail (follow) stats in real time", default: false
10
11
 
11
12
  def execute
12
13
  require_api_url
13
14
  token = require_token
14
- if follow?
15
+ if tail?
15
16
  system('clear')
16
17
  render_header
17
18
  end
18
19
  loop do
19
- fetch_stats(token, name, follow?)
20
- break unless follow?
20
+ fetch_stats(token, name, tail?)
21
+ break unless tail?
21
22
  sleep(2)
22
23
  end
23
24
  end