kontena-cli 0.10.3 → 0.11.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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/kontena +2 -0
- data/kontena-cli.gemspec +2 -0
- data/lib/kontena/cli/apps/build_command.rb +3 -2
- data/lib/kontena/cli/apps/deploy_command.rb +10 -1
- data/lib/kontena/cli/apps/docker_helper.rb +17 -8
- data/lib/kontena/cli/apps/logs_command.rb +1 -1
- data/lib/kontena/cli/common.rb +58 -7
- data/lib/kontena/cli/external_registries/add_command.rb +6 -8
- data/lib/kontena/cli/grid_command.rb +1 -1
- data/lib/kontena/cli/grids/common.rb +1 -1
- data/lib/kontena/cli/grids/current_command.rb +8 -1
- data/lib/kontena/cli/grids/env_command.rb +9 -3
- data/lib/kontena/cli/login_command.rb +27 -17
- data/lib/kontena/cli/logout_command.rb +1 -2
- data/lib/kontena/cli/master/aws/create_command.rb +7 -1
- data/lib/kontena/cli/master/azure/create_command.rb +7 -1
- data/lib/kontena/cli/master/digital_ocean/create_command.rb +6 -0
- data/lib/kontena/cli/master/list_command.rb +18 -0
- data/lib/kontena/cli/master/use_command.rb +26 -0
- data/lib/kontena/cli/master/vagrant/create_command.rb +7 -1
- data/lib/kontena/cli/master_command.rb +4 -0
- data/lib/kontena/cli/node_command.rb +1 -1
- data/lib/kontena/cli/nodes/list_command.rb +40 -14
- data/lib/kontena/cli/services/create_command.rb +2 -0
- data/lib/kontena/cli/services/services_helper.rb +31 -0
- data/lib/kontena/cli/services/update_command.rb +2 -1
- data/lib/kontena/cli/vault/list_command.rb +15 -0
- data/lib/kontena/cli/vault/read_command.rb +16 -0
- data/lib/kontena/cli/vault/remove_command.rb +13 -0
- data/lib/kontena/cli/vault/write_command.rb +23 -0
- data/lib/kontena/cli/vault_command.rb +15 -0
- data/lib/kontena/cli/whoami_command.rb +6 -3
- data/lib/kontena/machine/aws/cloudinit.yml +5 -0
- data/lib/kontena/machine/aws/cloudinit_master.yml +3 -0
- data/lib/kontena/machine/aws/master_provisioner.rb +3 -1
- data/lib/kontena/machine/azure/cloudinit.yml +5 -0
- data/lib/kontena/machine/azure/cloudinit_master.yml +3 -0
- data/lib/kontena/machine/azure/master_provisioner.rb +3 -1
- data/lib/kontena/machine/digital_ocean/cloudinit.yml +5 -0
- data/lib/kontena/machine/digital_ocean/cloudinit_master.yml +3 -0
- data/lib/kontena/machine/digital_ocean/master_provisioner.rb +4 -2
- data/lib/kontena/machine/vagrant/Vagrantfile.master.rb.erb +3 -0
- data/lib/kontena/machine/vagrant/cloudinit.yml +5 -0
- data/lib/kontena/machine/vagrant/master_provisioner.rb +4 -0
- data/lib/kontena/scripts/completer +14 -2
- data/spec/kontena/cli/app/deploy_command_spec.rb +37 -4
- data/spec/kontena/cli/app/scale_spec.rb +6 -1
- data/spec/kontena/cli/common_spec.rb +69 -1
- data/spec/kontena/cli/deploy_command_spec.rb +29 -3
- data/spec/kontena/cli/login_command_spec.rb +10 -0
- data/spec/kontena/cli/master/use_command_spec.rb +29 -0
- metadata +13 -4
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module Kontena::Cli::Master::Aws
|
2
4
|
class CreateCommand < Clamp::Command
|
3
5
|
include Kontena::Cli::Common
|
@@ -12,6 +14,8 @@ module Kontena::Cli::Master::Aws
|
|
12
14
|
option "--subnet-id", "SUBNET ID", "VPC option to specify subnet to launch instance into"
|
13
15
|
option "--type", "SIZE", "Instance type", default: 't2.small'
|
14
16
|
option "--storage", "STORAGE", "Storage size (GiB)", default: '30'
|
17
|
+
option "--vault-secret", "VAULT_SECRET", "Secret key for Vault"
|
18
|
+
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault"
|
15
19
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
16
20
|
option "--auth-provider-url", "AUTH_PROVIDER_URL", "Define authentication provider url"
|
17
21
|
|
@@ -28,7 +32,9 @@ module Kontena::Cli::Master::Aws
|
|
28
32
|
storage: storage,
|
29
33
|
version: version,
|
30
34
|
key_pair: key_pair,
|
31
|
-
auth_server: auth_provider_url
|
35
|
+
auth_server: auth_provider_url,
|
36
|
+
vault_secret: vault_secret || SecureRandom.hex(24),
|
37
|
+
vault_iv: vault_iv || SecureRandom.hex(24)
|
32
38
|
)
|
33
39
|
end
|
34
40
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module Kontena::Cli::Master::Azure
|
2
4
|
class CreateCommand < Clamp::Command
|
3
5
|
include Kontena::Cli::Common
|
@@ -11,6 +13,8 @@ module Kontena::Cli::Master::Azure
|
|
11
13
|
option "--password", "PASSWORD", "Password"
|
12
14
|
option "--location", "LOCATION", "Location", default: 'West Europe'
|
13
15
|
option "--ssl-cert", "SSL CERT", "SSL certificate file"
|
16
|
+
option "--vault-secret", "VAULT_SECRET", "Secret key for Vault"
|
17
|
+
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault"
|
14
18
|
option "--auth-provider-url", "AUTH_PROVIDER_URL", "Define authentication provider url"
|
15
19
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
16
20
|
|
@@ -26,7 +30,9 @@ module Kontena::Cli::Master::Azure
|
|
26
30
|
subnet: subnet,
|
27
31
|
location: location,
|
28
32
|
auth_server: auth_provider_url,
|
29
|
-
version: version
|
33
|
+
version: version,
|
34
|
+
vault_secret: vault_secret || SecureRandom.hex(24),
|
35
|
+
vault_iv: vault_iv || SecureRandom.hex(24)
|
30
36
|
)
|
31
37
|
end
|
32
38
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module Kontena::Cli::Master::DigitalOcean
|
2
4
|
class CreateCommand < Clamp::Command
|
3
5
|
include Kontena::Cli::Common
|
@@ -7,6 +9,8 @@ module Kontena::Cli::Master::DigitalOcean
|
|
7
9
|
option "--ssl-cert", "SSL CERT", "SSL certificate file"
|
8
10
|
option "--size", "SIZE", "Droplet size", default: '1gb'
|
9
11
|
option "--region", "REGION", "Region", default: 'ams2'
|
12
|
+
option "--vault-secret", "VAULT_SECRET", "Secret key for Vault"
|
13
|
+
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault"
|
10
14
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
11
15
|
option "--auth-provider-url", "AUTH_PROVIDER_URL", "Define authentication provider url"
|
12
16
|
|
@@ -23,6 +27,8 @@ module Kontena::Cli::Master::DigitalOcean
|
|
23
27
|
region: region,
|
24
28
|
version: version,
|
25
29
|
auth_server: auth_provider_url,
|
30
|
+
vault_secret: vault_secret || SecureRandom.hex(24),
|
31
|
+
vault_iv: vault_iv || SecureRandom.hex(24)
|
26
32
|
)
|
27
33
|
end
|
28
34
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Kontena::Cli::Master
|
2
|
+
class ListCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
def execute
|
6
|
+
puts '%-24s %-30s' % ['Name', 'Url']
|
7
|
+
current_server = settings['current_server']
|
8
|
+
settings['servers'].each do |server|
|
9
|
+
if server['name'] == current_server
|
10
|
+
name = "* #{server['name']}"
|
11
|
+
else
|
12
|
+
name = server['name']
|
13
|
+
end
|
14
|
+
puts '%-24s %-30s' % [name, server['url']]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Kontena::Cli::Master
|
2
|
+
class UseCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Master name to use"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
master = find_master_by_name(name)
|
9
|
+
if !master.nil?
|
10
|
+
self.current_master = master['name']
|
11
|
+
puts "Using master: #{master['name'].cyan}"
|
12
|
+
puts "URL: #{master['url'].cyan}"
|
13
|
+
else
|
14
|
+
abort "Could not resolve master by name [#{name}]. For a list of known masters please run: kontena master list".colorize(:red)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def find_master_by_name(name)
|
19
|
+
settings['servers'].each do |server|
|
20
|
+
return server if server['name'] == name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module Kontena::Cli::Master::Vagrant
|
2
4
|
class CreateCommand < Clamp::Command
|
3
5
|
include Kontena::Cli::Common
|
@@ -5,6 +7,8 @@ module Kontena::Cli::Master::Vagrant
|
|
5
7
|
option "--memory", "MEMORY", "How much memory node has", default: '512'
|
6
8
|
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
7
9
|
option "--auth-provider-url", "AUTH_PROVIDER_URL", "Define authentication provider url"
|
10
|
+
option "--vault-secret", "VAULT_SECRET", "Secret key for Vault"
|
11
|
+
option "--vault-iv", "VAULT_IV", "Initialization vector for Vault"
|
8
12
|
|
9
13
|
def execute
|
10
14
|
require 'kontena/machine/vagrant'
|
@@ -12,7 +16,9 @@ module Kontena::Cli::Master::Vagrant
|
|
12
16
|
provisioner.run!(
|
13
17
|
memory: memory,
|
14
18
|
version: version,
|
15
|
-
auth_server: auth_provider_url
|
19
|
+
auth_server: auth_provider_url,
|
20
|
+
vault_secret: vault_secret || SecureRandom.hex(24),
|
21
|
+
vault_iv: vault_iv || SecureRandom.hex(24)
|
16
22
|
)
|
17
23
|
end
|
18
24
|
end
|
@@ -2,6 +2,8 @@ require_relative 'master/vagrant_command'
|
|
2
2
|
require_relative 'master/aws_command'
|
3
3
|
require_relative 'master/digital_ocean_command'
|
4
4
|
require_relative 'master/azure_command'
|
5
|
+
require_relative 'master/use_command'
|
6
|
+
require_relative 'master/list_command'
|
5
7
|
|
6
8
|
class Kontena::Cli::MasterCommand < Clamp::Command
|
7
9
|
|
@@ -9,6 +11,8 @@ class Kontena::Cli::MasterCommand < Clamp::Command
|
|
9
11
|
subcommand "aws", "AWS specific commands", Kontena::Cli::Master::AwsCommand
|
10
12
|
subcommand "digitalocean", "DigitalOcean specific commands", Kontena::Cli::Master::DigitalOceanCommand
|
11
13
|
subcommand "azure", "Azure specific commands", Kontena::Cli::Master::AzureCommand
|
14
|
+
subcommand ["list", "ls"], "List masters where client has logged in", Kontena::Cli::Master::ListCommand
|
15
|
+
subcommand "use", "Switch to use selected master", Kontena::Cli::Master::UseCommand
|
12
16
|
|
13
17
|
def execute
|
14
18
|
end
|
@@ -15,7 +15,7 @@ class Kontena::Cli::NodeCommand < Clamp::Command
|
|
15
15
|
subcommand "show", "Show node", Kontena::Cli::Nodes::ShowCommand
|
16
16
|
subcommand "ssh", "Ssh into node", Kontena::Cli::Nodes::SshCommand
|
17
17
|
subcommand "update", "Update node", Kontena::Cli::Nodes::UpdateCommand
|
18
|
-
subcommand "remove", "Remove node", Kontena::Cli::Nodes::RemoveCommand
|
18
|
+
subcommand ["remove","rm"], "Remove node", Kontena::Cli::Nodes::RemoveCommand
|
19
19
|
|
20
20
|
subcommand "vagrant", "Vagrant specific commands", Kontena::Cli::Nodes::VagrantCommand
|
21
21
|
subcommand "digitalocean", "DigitalOcean specific commands", Kontena::Cli::Nodes::DigitalOceanCommand
|
@@ -2,26 +2,52 @@ module Kontena::Cli::Nodes
|
|
2
2
|
class ListCommand < Clamp::Command
|
3
3
|
include Kontena::Cli::Common
|
4
4
|
|
5
|
+
option ["--all"], :flag, "List nodes for all grids", default: false
|
6
|
+
|
5
7
|
def execute
|
6
8
|
require_api_url
|
7
9
|
require_current_grid
|
8
10
|
token = require_token
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
if all?
|
13
|
+
grids = client(token).get("grids")
|
14
|
+
puts "%-30s %-30s %-40s %-15s %-30s %-10s" % [ 'Grid', 'Name', 'OS', 'Driver', 'Labels', 'Status']
|
15
|
+
|
16
|
+
grids['grids'].each do |grid|
|
17
|
+
nodes = client(token).get("grids/#{grid['name']}/nodes")
|
18
|
+
nodes['nodes'].each do |node|
|
19
|
+
if node['connected']
|
20
|
+
status = 'online'
|
21
|
+
else
|
22
|
+
status = 'offline'
|
23
|
+
end
|
24
|
+
puts "%-30.30s %-30.30s %-40.40s %-15s %-30.30s %-10s" % [
|
25
|
+
grid['name'],
|
26
|
+
node['name'],
|
27
|
+
"#{node['os']} (#{node['kernel_version']})",
|
28
|
+
node['driver'],
|
29
|
+
(node['labels'] || ['-']).join(","),
|
30
|
+
status
|
31
|
+
]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
else
|
35
|
+
nodes = client(token).get("grids/#{current_grid}/nodes")
|
36
|
+
puts "%-30s %-40s %-15s %-30s %-10s" % ['Name', 'OS', 'Driver', 'Labels', 'Status']
|
37
|
+
nodes['nodes'].each do |node|
|
38
|
+
if node['connected']
|
39
|
+
status = 'online'
|
40
|
+
else
|
41
|
+
status = 'offline'
|
42
|
+
end
|
43
|
+
puts "%-30.30s %-40.40s %-15s %-30.30s %-10s" % [
|
44
|
+
node['name'],
|
45
|
+
"#{node['os']} (#{node['kernel_version']})",
|
46
|
+
node['driver'],
|
47
|
+
(node['labels'] || ['-']).join(","),
|
48
|
+
status
|
49
|
+
]
|
17
50
|
end
|
18
|
-
puts "%-30.30s %-40.40s %-15s %-30.30s %-10s" % [
|
19
|
-
node['name'],
|
20
|
-
"#{node['os']} (#{node['kernel_version']})",
|
21
|
-
node['driver'],
|
22
|
-
(node['labels'] || ['-']).join(","),
|
23
|
-
status
|
24
|
-
]
|
25
51
|
end
|
26
52
|
end
|
27
53
|
end
|
@@ -31,6 +31,7 @@ module Kontena::Cli::Services
|
|
31
31
|
option "--deploy-wait-for-port", "PORT", "Wait for port to respond when deploying"
|
32
32
|
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
33
|
option "--pid", "PID", "Pid namespace to use"
|
34
|
+
option "--secret", "SECRET", "Import secret from Vault", multivalued: true
|
34
35
|
|
35
36
|
def execute
|
36
37
|
require_api_url
|
@@ -58,6 +59,7 @@ module Kontena::Cli::Services
|
|
58
59
|
data[:cpu_shares] = cpu_shares if cpu_shares
|
59
60
|
data[:affinity] = affinity_list unless affinity_list.empty?
|
60
61
|
data[:env] = env_list unless env_list.empty?
|
62
|
+
data[:secrets] = parse_secrets(secret_list)
|
61
63
|
data[:container_count] = instances if instances
|
62
64
|
data[:cmd] = cmd.split(" ") if cmd
|
63
65
|
data[:user] = user if user
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'kontena/client'
|
2
2
|
require_relative '../common'
|
3
|
+
require 'shell-spinner'
|
3
4
|
|
4
5
|
module Kontena
|
5
6
|
module Cli
|
@@ -78,6 +79,15 @@ module Kontena
|
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
82
|
+
if service['secrets'].to_a.size > 0
|
83
|
+
puts " secrets: "
|
84
|
+
service['secrets'].to_a.each do |s|
|
85
|
+
puts " - secret: #{s['secret']}"
|
86
|
+
puts " secret: #{s['name']}"
|
87
|
+
puts " type: #{s['type']}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
81
91
|
if service['env'].to_a.size > 0
|
82
92
|
puts " env: "
|
83
93
|
service['env'].to_a.each do |e|
|
@@ -175,6 +185,16 @@ module Kontena
|
|
175
185
|
client(token).post("services/#{param}/deploy", data)
|
176
186
|
end
|
177
187
|
|
188
|
+
# @param [String] token
|
189
|
+
# @param [String] name
|
190
|
+
def wait_for_deploy_to_finish(token, name)
|
191
|
+
ShellSpinner " " do
|
192
|
+
until client(token).get("services/#{name}")['state'] != 'deploying' do
|
193
|
+
sleep 1
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
178
198
|
# @param [String] token
|
179
199
|
# @param [String] service_id
|
180
200
|
def start_service(token, service_id)
|
@@ -272,6 +292,17 @@ module Kontena
|
|
272
292
|
end
|
273
293
|
opts
|
274
294
|
end
|
295
|
+
|
296
|
+
# @param [Array<String>] secret_opts
|
297
|
+
# @return [Array<Hash>]
|
298
|
+
def parse_secrets(secret_opts)
|
299
|
+
secrets = []
|
300
|
+
secret_opts.each do |s|
|
301
|
+
secret, name, type = s.split(':')
|
302
|
+
secrets << {secret: secret, name: name, type: type}
|
303
|
+
end
|
304
|
+
secrets
|
305
|
+
end
|
275
306
|
end
|
276
307
|
end
|
277
308
|
end
|
@@ -28,7 +28,7 @@ module Kontena::Cli::Services
|
|
28
28
|
option "--deploy-wait-for-port", "PORT", "Wait for port to respond when deploying"
|
29
29
|
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
30
|
option "--pid", "PID", "Pid namespace to use"
|
31
|
-
|
31
|
+
option "--secret", "SECRET", "Import secret from Vault", multivalued: true
|
32
32
|
|
33
33
|
def execute
|
34
34
|
require_api_url
|
@@ -51,6 +51,7 @@ module Kontena::Cli::Services
|
|
51
51
|
data[:cpu_shares] = cpu_shares if cpu_shares
|
52
52
|
data[:affinity] = affinity_list unless affinity_list.empty?
|
53
53
|
data[:env] = env_list unless env_list.empty?
|
54
|
+
data[:secrets] = parse_secrets(secret_list)
|
54
55
|
data[:container_count] = instances if instances
|
55
56
|
data[:cmd] = cmd.split(" ") if cmd
|
56
57
|
data[:user] = user if user
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Kontena::Cli::Vault
|
2
|
+
class ListCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
def execute
|
6
|
+
require_api_url
|
7
|
+
token = require_token
|
8
|
+
result = client(token).get("grids/#{current_grid}/secrets")
|
9
|
+
puts '%-30.30s %-30.30s' % ['NAME', 'CREATED AT']
|
10
|
+
result['secrets'].each do |secret|
|
11
|
+
puts '%-30.30s %-30.30s' % [secret['name'], secret['created_at']]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Kontena::Cli::Vault
|
2
|
+
class ReadCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Secret name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
token = require_token
|
10
|
+
result = client(token).get("secrets/#{current_grid}/#{name}")
|
11
|
+
puts "#{result['name']}:"
|
12
|
+
puts " created_at: #{result['created_at']}"
|
13
|
+
puts " value: #{result['value']}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Kontena::Cli::Vault
|
2
|
+
class RemoveCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Secret name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
token = require_token
|
10
|
+
client(token).delete("secrets/#{current_grid}/#{name}")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Kontena::Cli::Vault
|
2
|
+
class WriteCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter 'NAME', 'Secret name'
|
6
|
+
parameter '[VALUE]', 'Secret value'
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
token = require_token
|
11
|
+
secret = value
|
12
|
+
if secret.to_s == ''
|
13
|
+
secret = STDIN.read
|
14
|
+
end
|
15
|
+
abort('No value provided') if secret.to_s == ''
|
16
|
+
data = {
|
17
|
+
name: name,
|
18
|
+
value: secret
|
19
|
+
}
|
20
|
+
client(token).post("grids/#{current_grid}/secrets", data)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative 'vault/write_command'
|
2
|
+
require_relative 'vault/list_command'
|
3
|
+
require_relative 'vault/read_command'
|
4
|
+
require_relative 'vault/remove_command'
|
5
|
+
|
6
|
+
class Kontena::Cli::VaultCommand < Clamp::Command
|
7
|
+
|
8
|
+
subcommand "write", "Write a secret", Kontena::Cli::Vault::WriteCommand
|
9
|
+
subcommand ["list", "ls"], "List secrets", Kontena::Cli::Vault::ListCommand
|
10
|
+
subcommand "read", "Read secret", Kontena::Cli::Vault::ReadCommand
|
11
|
+
subcommand ["remove", "rm"], "Remove secret", Kontena::Cli::Vault::RemoveCommand
|
12
|
+
|
13
|
+
def execute
|
14
|
+
end
|
15
|
+
end
|
@@ -10,10 +10,13 @@ class Kontena::Cli::WhoamiCommand < Clamp::Command
|
|
10
10
|
end
|
11
11
|
|
12
12
|
require_api_url
|
13
|
-
puts "Master: #{
|
13
|
+
puts "Master: #{self.current_master['name']}"
|
14
|
+
puts "URL: #{api_url}"
|
15
|
+
puts "Grid: #{current_grid}"
|
14
16
|
token = require_token
|
15
|
-
|
16
|
-
puts "User: #{
|
17
|
+
user = client(token).get('user')
|
18
|
+
puts "User: #{user['email']}"
|
19
|
+
|
17
20
|
end
|
18
21
|
|
19
22
|
end
|