kontena-cli 0.11.7 → 0.12.0

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.
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