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
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class StopCommand < 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,25 @@
1
+ require_relative '../grid_options'
2
+ require_relative 'services_helper'
3
+
4
+ module Kontena::Cli::Services
5
+ class UnlinkCommand < 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
+ links = service['links'].map{|l| {name: l['grid_service_id'].split('/')[1], alias: l['alias']} }
19
+ abort("Service is not linked to #{target.to_s}") unless links.find{|l| l[:name] == target.to_s}
20
+ links.delete_if{|l| l[:name] == target.to_s}
21
+ data = {links: links}
22
+ update_service(token, name, data)
23
+ end
24
+ end
25
+ end
@@ -3,6 +3,7 @@ require_relative 'services_helper'
3
3
  module Kontena::Cli::Services
4
4
  class UpdateCommand < 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"
@@ -24,11 +25,11 @@ module Kontena::Cli::Services
24
25
  option "--net", "NET", "Network mode"
25
26
  option "--log-driver", "LOG_DRIVER", "Set logging driver"
26
27
  option "--log-opt", "LOG_OPT", "Add logging options", multivalued: true
27
- option "--deploy-strategy", "STRATEGY", "Deploy strategy to use (ha, random)"
28
+ option "--deploy-strategy", "STRATEGY", "Deploy strategy to use (ha, daemon, random)"
28
29
  option "--deploy-wait-for-port", "PORT", "Wait for port to respond when deploying"
29
30
  option "--deploy-min-health", "FLOAT", "The minimum percentage (0.0 - 1.0) of healthy instances that do not sacrifice overall service availability while deploying"
30
31
  option "--pid", "PID", "Pid namespace to use"
31
- option "--secret", "SECRET", "Import secret from Vault", multivalued: true
32
+ option "--secret", "SECRET", "Import secret from Vault (format: <secret>:<name>:<type>)", multivalued: true
32
33
 
33
34
  def execute
34
35
  require_api_url
@@ -51,7 +52,7 @@ module Kontena::Cli::Services
51
52
  data[:cpu_shares] = cpu_shares if cpu_shares
52
53
  data[:affinity] = affinity_list unless affinity_list.empty?
53
54
  data[:env] = env_list unless env_list.empty?
54
- data[:secrets] = parse_secrets(secret_list)
55
+ data[:secrets] = parse_secrets(secret_list) unless secret_list.empty?
55
56
  data[:container_count] = instances if instances
56
57
  data[:cmd] = cmd.split(" ") if cmd
57
58
  data[:user] = user if user
@@ -0,0 +1,15 @@
1
+ require_relative 'users/invite_command'
2
+ require_relative 'users/list_command'
3
+ require_relative 'users/add_role_command'
4
+ require_relative 'users/remove_role_command'
5
+
6
+ class Kontena::Cli::UsersCommand < Clamp::Command
7
+
8
+ subcommand "invite", "Invite user to Kontena Master", Kontena::Cli::Users::InviteCommand
9
+ subcommand ["list", "ls"], "List users", Kontena::Cli::Users::ListCommand
10
+ subcommand "add-role", "Add role to user", Kontena::Cli::Users::AddRoleCommand
11
+ subcommand "remove-role", "Remove role from user", Kontena::Cli::Users::RemoveRoleCommand
12
+
13
+ def execute
14
+ end
15
+ end
@@ -1,6 +1,7 @@
1
1
  module Kontena::Cli::Vault
2
2
  class ListCommand < Clamp::Command
3
3
  include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
4
5
 
5
6
  def execute
6
7
  require_api_url
@@ -1,6 +1,7 @@
1
1
  module Kontena::Cli::Vault
2
2
  class ReadCommand < Clamp::Command
3
3
  include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
4
5
 
5
6
  parameter "NAME", "Secret name"
6
7
 
@@ -1,6 +1,7 @@
1
1
  module Kontena::Cli::Vault
2
2
  class RemoveCommand < Clamp::Command
3
3
  include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
4
5
 
5
6
  parameter "NAME", "Secret name"
6
7
 
@@ -1,6 +1,7 @@
1
1
  module Kontena::Cli::Vault
2
2
  class WriteCommand < Clamp::Command
3
3
  include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
4
5
 
5
6
  parameter 'NAME', 'Secret name'
6
7
  parameter '[VALUE]', 'Secret value'
@@ -1,8 +1,16 @@
1
1
  require_relative 'version'
2
2
 
3
3
  class Kontena::Cli::VersionCommand < Clamp::Command
4
+ include Kontena::Cli::Common
4
5
 
5
6
  def execute
6
- puts Kontena::Cli::VERSION
7
+ url = api_url rescue nil
8
+ puts "cli: #{Kontena::Cli::VERSION}"
9
+ if url
10
+ resp = JSON.parse(client.http_client.get(path: '/').body) rescue nil
11
+ if resp
12
+ puts "master: #{resp['version']} (#{url})"
13
+ end
14
+ end
7
15
  end
8
16
  end
@@ -1,6 +1,7 @@
1
1
  module Kontena::Cli::Vpn
2
2
  class ConfigCommand < Clamp::Command
3
3
  include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
4
5
 
5
6
  def execute
6
7
  require 'rbconfig'
@@ -3,6 +3,7 @@ require 'shell-spinner'
3
3
  module Kontena::Cli::Vpn
4
4
  class CreateCommand < Clamp::Command
5
5
  include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
6
7
 
7
8
  option '--node', 'NODE', 'Node name where VPN is deployed'
8
9
  option '--ip', 'IP', 'Node ip-address'
@@ -1,8 +1,10 @@
1
1
  module Kontena::Cli::Vpn
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 vpn delete' will be dropped. Use 'kontena vpn remove' instead.".colorize(:red)
6
8
  require_api_url
7
9
  token = require_token
8
10
 
@@ -0,0 +1,15 @@
1
+ module Kontena::Cli::Vpn
2
+ class RemoveCommand < Clamp::Command
3
+ include Kontena::Cli::Common
4
+
5
+ def execute
6
+ require_api_url
7
+ token = require_token
8
+
9
+ vpn = client(token).get("services/#{current_grid}/vpn") rescue nil
10
+ abort("VPN service does not exist") if vpn.nil?
11
+
12
+ client(token).delete("services/#{current_grid}/vpn")
13
+ end
14
+ end
15
+ end
@@ -1,12 +1,14 @@
1
1
  require_relative 'vpn/create_command'
2
2
  require_relative 'vpn/config_command'
3
+ require_relative 'vpn/remove_command'
3
4
  require_relative 'vpn/delete_command'
4
5
 
5
6
  class Kontena::Cli::VpnCommand < Clamp::Command
6
7
 
7
8
  subcommand "create", "Create VPN service", Kontena::Cli::Vpn::CreateCommand
8
9
  subcommand "config", "Show/Export VPN config", Kontena::Cli::Vpn::ConfigCommand
9
- subcommand "delete", "Delete VPN service", Kontena::Cli::Vpn::DeleteCommand
10
+ subcommand ["remove", "rm"], "Remove VPN service", Kontena::Cli::Vpn::RemoveCommand
11
+ subcommand "delete", "[DEPRECATED] Delete VPN service", Kontena::Cli::Vpn::DeleteCommand
10
12
 
11
13
  def execute
12
14
  end
@@ -17,7 +17,7 @@ module Kontena
17
17
  end
18
18
 
19
19
  def run!(grid, name)
20
- instance = client.servers.all({'tag:kontena_name' => name}).first
20
+ instance = client.servers.all({'tag:Name' => name}).first
21
21
  if instance
22
22
  ShellSpinner "Terminating AWS instance #{name.colorize(:cyan)} " do
23
23
  instance.destroy
@@ -0,0 +1,70 @@
1
+ #cloud-config
2
+ write_files:
3
+ - path: /etc/kontena-agent.env
4
+ permissions: 0600
5
+ owner: root
6
+ content: |
7
+ KONTENA_URI="<%= master_uri %>"
8
+ KONTENA_TOKEN="<%= grid_token %>"
9
+ KONTENA_PEER_INTERFACE=<%= peer_interface %>
10
+ KONTENA_VERSION=<%= version %>
11
+ - path: /etc/systemd/system/docker.service.d/50-kontena.conf
12
+ content: |
13
+ [Service]
14
+ Environment='DOCKER_OPTS=--insecure-registry="10.81.0.0/19" --bip="<%= docker_bip %>"'
15
+ - path: /etc/sysctl.d/99-inotify.conf
16
+ owner: root
17
+ permissions: 0644
18
+ content: |
19
+ fs.inotify.max_user_instances = 8192
20
+ coreos:
21
+ units:
22
+ - name: 00-eth.network
23
+ runtime: true
24
+ content: |
25
+ [Match]
26
+ Name=eth*
27
+ [Network]
28
+ DHCP=yes
29
+ <% dns_servers.each do |dns| %>DNS=<%= dns %>
30
+ <% end %>
31
+ DOMAINS=kontena.local
32
+ [DHCP]
33
+ UseDNS=false
34
+
35
+ - name: 10-weave.network
36
+ runtime: false
37
+ content: |
38
+ [Match]
39
+ Type=bridge
40
+ Name=weave*
41
+
42
+ [Network]
43
+ - name: kontena-agent.service
44
+ command: start
45
+ enable: true
46
+ content: |
47
+ [Unit]
48
+ Description=kontena-agent
49
+ After=network-online.target
50
+ After=docker.service
51
+ Description=Kontena Agent
52
+ Documentation=http://www.kontena.io/
53
+ Requires=network-online.target
54
+ Requires=docker.service
55
+
56
+ [Service]
57
+ Restart=always
58
+ RestartSec=5
59
+ EnvironmentFile=/etc/kontena-agent.env
60
+ ExecStartPre=-/usr/bin/docker stop kontena-agent
61
+ ExecStartPre=-/usr/bin/docker rm kontena-agent
62
+ ExecStartPre=/usr/bin/docker pull kontena/agent:${KONTENA_VERSION}
63
+ ExecStart=/usr/bin/docker run --name kontena-agent \
64
+ -e KONTENA_URI=${KONTENA_URI} \
65
+ -e KONTENA_TOKEN=${KONTENA_TOKEN} \
66
+ -e KONTENA_PEER_INTERFACE=${KONTENA_PEER_INTERFACE} \
67
+ -v=/var/run/docker.sock:/var/run/docker.sock \
68
+ -v=/etc/kontena-agent.env:/etc/kontena.env \
69
+ --net=host \
70
+ kontena/agent:${KONTENA_VERSION}
@@ -0,0 +1,28 @@
1
+ require 'fileutils'
2
+ require 'erb'
3
+
4
+ module Kontena
5
+ module Machine
6
+ module CloudConfig
7
+ class NodeGenerator
8
+
9
+ # @param [Hash] opts
10
+ def generate(opts)
11
+ user_data(opts)
12
+ end
13
+
14
+ # @param [Hash] vars
15
+ def user_data(vars)
16
+ cloudinit_template = File.join(__dir__ , '/cloudinit.yml')
17
+ erb(File.read(cloudinit_template), vars)
18
+ end
19
+
20
+ # @param [String] template
21
+ # @param [Hash] vars
22
+ def erb(template, vars)
23
+ ERB.new(template).result(OpenStruct.new(vars).instance_eval { binding })
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -24,6 +24,13 @@ write_files:
24
24
  nameserver 172.17.43.1
25
25
  nameserver 8.8.8.8
26
26
  nameserver 8.8.4.4
27
+ - path: /opt/bin/floating_ip.sh
28
+ permissions: 0755
29
+ owner: root
30
+ content: |
31
+ #!/bin/sh
32
+ IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address)
33
+ /usr/bin/ip addr add $IP/16 dev eth0
27
34
  coreos:
28
35
  units:
29
36
  - name: 10-weave.network
@@ -34,6 +41,21 @@ coreos:
34
41
  Name=weave*
35
42
 
36
43
  [Network]
44
+ - name: floating-ip.service
45
+ command: start
46
+ enable: true
47
+ content: |
48
+ [Unit]
49
+ Description=floating-ip
50
+ After=network-online.target
51
+ Description=DigitalOcean Floating IP
52
+ Documentation=https://www.digitalocean.com/community/tutorials/how-to-enable-floating-ips-on-an-older-droplet#coreos
53
+ Requires=network-online.target
54
+
55
+ [Service]
56
+ Type=oneshot
57
+ RemainAfterExit=yes
58
+ ExecStart=/opt/bin/floating_ip.sh
37
59
  - name: kontena-agent.service
38
60
  command: start
39
61
  enable: true
@@ -19,8 +19,10 @@ module Kontena
19
19
  droplet = client.droplets.all.find{|d| d.name == name}
20
20
  if droplet
21
21
  ShellSpinner "Terminating DigitalOcean droplet #{name.colorize(:cyan)} " do
22
- client.droplets.delete(id: droplet.id)
23
- sleep 2 until client.droplets.find(id: droplet.id).is_a?(String)
22
+ result = client.droplets.delete(id: droplet.id)
23
+ if result.is_a?(String)
24
+ abort "Cannot delete droplet #{name.colorize(:cyan)} in DigitalOcean"
25
+ end
24
26
  end
25
27
  else
26
28
  abort "Cannot find droplet #{name.colorize(:cyan)} in DigitalOcean"
@@ -3,9 +3,9 @@ module Kontena
3
3
  module RandomName
4
4
 
5
5
  def generate_name
6
- rnd = Random.rand(64)
7
-
8
- "#{adjectives[rnd%adjectives.length]}-#{nouns[rnd%adjectives.length]}"
6
+ rnd1 = Random.rand(64)
7
+ rnd2 = Random.rand(64)
8
+ "#{adjectives[rnd1%adjectives.length]}-#{nouns[rnd2%adjectives.length]}"
9
9
  end
10
10
 
11
11
  private
@@ -81,7 +81,7 @@ words = ARGV
81
81
  words.delete_at(0)
82
82
 
83
83
  completion = []
84
- completion.push %w(app deploy forgot-password master node grid invite service container vpn external-registry registry login logout whoami) if words.size < 2
84
+ completion.push %w(app deploy forgot-password master node grid service container vpn external-registry registry login logout whoami) if words.size < 2
85
85
  if words.size > 0
86
86
  case words[0]
87
87
  when 'grid'
@@ -104,9 +104,12 @@ if words.size > 0
104
104
  end
105
105
  when 'master'
106
106
  completion.clear
107
- sub_commands = %w(list use vagrant digitalocean azure aws)
107
+ sub_commands = %w(list use vagrant digitalocean azure aws users)
108
108
  if words[1] && words[1] == 'use'
109
109
  completion.push helper.master_names
110
+ elsif words[1] && words[1] == 'users'
111
+ users_sub_commands = %(invite list add-role remove-role)
112
+ completion.push users_sub_commands
110
113
  elsif words[1]
111
114
  completion.push(sub_commands) unless sub_commands.include?(words[1])
112
115
  completion.push %w(create)
@@ -116,7 +119,8 @@ if words.size > 0
116
119
  when 'service'
117
120
  completion.clear
118
121
  sub_commands = %w(containers create delete deploy list logs restart
119
- scale show start stats stop update monitor)
122
+ scale show start stats stop update monitor envs
123
+ add-env remove-env add-secret remove-secret)
120
124
  if words[1]
121
125
  completion.push(sub_commands) unless sub_commands.include?(words[1])
122
126
  completion.push helper.services
@@ -0,0 +1,8 @@
1
+ wordpress:
2
+ image: wordpress:4.1
3
+ ports:
4
+ - 80:80
5
+ links:
6
+ - mysql:mysql
7
+ mysql:
8
+ image: mysql:5.6
@@ -0,0 +1,17 @@
1
+ wordpress:
2
+ extends:
3
+ file: docker-compose.yml
4
+ service: wordpress
5
+ stateful: true
6
+ environment:
7
+ - WORDPRESS_DB_PASSWORD=%{project}_secret
8
+ instances: 2
9
+ deploy:
10
+ strategy: ha
11
+ mysql:
12
+ extends:
13
+ file: docker-compose.yml
14
+ service: mysql
15
+ stateful: true
16
+ environment:
17
+ - MYSQL_ROOT_PASSWORD=%{project}_secret
@@ -0,0 +1,3 @@
1
+ mysql:
2
+ image: mysql:5.6
3
+