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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/kontena +2 -4
- data/kontena-cli.gemspec +1 -0
- data/lib/kontena/cli/app_command.rb +1 -1
- data/lib/kontena/cli/apps/common.rb +30 -3
- data/lib/kontena/cli/apps/deploy_command.rb +1 -0
- data/lib/kontena/cli/apps/list_command.rb +1 -0
- data/lib/kontena/cli/apps/logs_command.rb +9 -3
- data/lib/kontena/cli/apps/monitor_command.rb +1 -0
- data/lib/kontena/cli/apps/remove_command.rb +2 -0
- data/lib/kontena/cli/apps/scale_command.rb +2 -1
- data/lib/kontena/cli/apps/show_command.rb +1 -0
- data/lib/kontena/cli/apps/start_command.rb +1 -0
- data/lib/kontena/cli/apps/stop_command.rb +1 -0
- data/lib/kontena/cli/common.rb +5 -1
- data/lib/kontena/cli/containers/exec_command.rb +1 -0
- data/lib/kontena/cli/containers/inspect_command.rb +1 -0
- data/lib/kontena/cli/etcd/get_command.rb +2 -1
- data/lib/kontena/cli/etcd/list_command.rb +1 -0
- data/lib/kontena/cli/etcd/mkdir_command.rb +2 -1
- data/lib/kontena/cli/etcd/remove_command.rb +2 -1
- data/lib/kontena/cli/etcd/set_command.rb +2 -1
- data/lib/kontena/cli/etcd_command.rb +2 -2
- data/lib/kontena/cli/external_registries/add_command.rb +1 -0
- data/lib/kontena/cli/external_registries/delete_command.rb +2 -0
- data/lib/kontena/cli/external_registries/list_command.rb +1 -0
- data/lib/kontena/cli/external_registries/remove_command.rb +13 -0
- data/lib/kontena/cli/external_registry_command.rb +4 -3
- data/lib/kontena/cli/grid_command.rb +5 -1
- data/lib/kontena/cli/grid_options.rb +12 -0
- data/lib/kontena/cli/grids/add_user_command.rb +1 -0
- data/lib/kontena/cli/grids/cloud_config_command.rb +41 -0
- data/lib/kontena/cli/grids/common.rb +65 -4
- data/lib/kontena/cli/grids/logs_command.rb +9 -4
- data/lib/kontena/cli/grids/remove_user_command.rb +1 -0
- data/lib/kontena/cli/grids/update_command.rb +27 -0
- data/lib/kontena/cli/master/use_command.rb +12 -2
- data/lib/kontena/cli/master/users/add_role_command.rb +26 -0
- data/lib/kontena/cli/master/users/invite_command.rb +24 -0
- data/lib/kontena/cli/master/users/list_command.rb +18 -0
- data/lib/kontena/cli/master/users/remove_role_command.rb +26 -0
- data/lib/kontena/cli/master/users_command.rb +14 -0
- data/lib/kontena/cli/master_command.rb +2 -1
- data/lib/kontena/cli/node_command.rb +7 -1
- data/lib/kontena/cli/nodes/add_label_command.rb +19 -0
- data/lib/kontena/cli/nodes/aws/create_command.rb +2 -1
- data/lib/kontena/cli/nodes/aws/restart_command.rb +1 -0
- data/lib/kontena/cli/nodes/aws/terminate_command.rb +1 -0
- data/lib/kontena/cli/nodes/azure/create_command.rb +1 -0
- data/lib/kontena/cli/nodes/azure/restart_command.rb +1 -0
- data/lib/kontena/cli/nodes/azure/terminate_command.rb +1 -0
- data/lib/kontena/cli/nodes/digital_ocean/create_command.rb +1 -0
- data/lib/kontena/cli/nodes/digital_ocean/restart_command.rb +1 -0
- data/lib/kontena/cli/nodes/digital_ocean/terminate_command.rb +1 -0
- data/lib/kontena/cli/nodes/list_command.rb +10 -14
- data/lib/kontena/cli/nodes/remove_command.rb +1 -0
- data/lib/kontena/cli/nodes/remove_label_command.rb +23 -0
- data/lib/kontena/cli/nodes/show_command.rb +1 -0
- data/lib/kontena/cli/nodes/ssh_command.rb +1 -0
- data/lib/kontena/cli/nodes/update_command.rb +1 -0
- data/lib/kontena/cli/nodes/vagrant/create_command.rb +1 -0
- data/lib/kontena/cli/nodes/vagrant/restart_command.rb +1 -0
- data/lib/kontena/cli/nodes/vagrant/ssh_command.rb +1 -0
- data/lib/kontena/cli/nodes/vagrant/start_command.rb +1 -0
- data/lib/kontena/cli/nodes/vagrant/stop_command.rb +1 -0
- data/lib/kontena/cli/nodes/vagrant/terminate_command.rb +1 -0
- data/lib/kontena/cli/registry/create_command.rb +80 -30
- data/lib/kontena/cli/registry/delete_command.rb +3 -0
- data/lib/kontena/cli/registry/remove_command.rb +15 -0
- data/lib/kontena/cli/registry_command.rb +3 -1
- data/lib/kontena/cli/service_command.rb +20 -4
- data/lib/kontena/cli/services/add_env_command.rb +1 -0
- data/lib/kontena/cli/services/add_secret_command.rb +24 -0
- data/lib/kontena/cli/services/containers_command.rb +1 -0
- data/lib/kontena/cli/services/create_command.rb +3 -2
- data/lib/kontena/cli/services/delete_command.rb +2 -0
- data/lib/kontena/cli/services/deploy_command.rb +1 -0
- data/lib/kontena/cli/services/envs_command.rb +1 -0
- data/lib/kontena/cli/services/link_command.rb +26 -0
- data/lib/kontena/cli/services/list_command.rb +13 -10
- data/lib/kontena/cli/services/logs_command.rb +13 -5
- data/lib/kontena/cli/services/monitor_command.rb +1 -0
- data/lib/kontena/cli/services/remove_command.rb +17 -0
- data/lib/kontena/cli/services/remove_env_command.rb +1 -0
- data/lib/kontena/cli/services/remove_secret_command.rb +28 -0
- data/lib/kontena/cli/services/restart_command.rb +1 -0
- data/lib/kontena/cli/services/scale_command.rb +2 -1
- data/lib/kontena/cli/services/show_command.rb +1 -0
- data/lib/kontena/cli/services/start_command.rb +1 -0
- data/lib/kontena/cli/services/stats_command.rb +5 -4
- data/lib/kontena/cli/services/stop_command.rb +1 -0
- data/lib/kontena/cli/services/unlink_command.rb +25 -0
- data/lib/kontena/cli/services/update_command.rb +4 -3
- data/lib/kontena/cli/users_command.rb +15 -0
- data/lib/kontena/cli/vault/list_command.rb +1 -0
- data/lib/kontena/cli/vault/read_command.rb +1 -0
- data/lib/kontena/cli/vault/remove_command.rb +1 -0
- data/lib/kontena/cli/vault/write_command.rb +1 -0
- data/lib/kontena/cli/version_command.rb +9 -1
- data/lib/kontena/cli/vpn/config_command.rb +1 -0
- data/lib/kontena/cli/vpn/create_command.rb +1 -0
- data/lib/kontena/cli/vpn/delete_command.rb +2 -0
- data/lib/kontena/cli/vpn/remove_command.rb +15 -0
- data/lib/kontena/cli/vpn_command.rb +3 -1
- data/lib/kontena/machine/aws/node_destroyer.rb +1 -1
- data/lib/kontena/machine/cloud_config/cloudinit.yml +70 -0
- data/lib/kontena/machine/cloud_config/node_generator.rb +28 -0
- data/lib/kontena/machine/digital_ocean/cloudinit.yml +22 -0
- data/lib/kontena/machine/digital_ocean/node_destroyer.rb +4 -2
- data/lib/kontena/machine/random_name.rb +3 -3
- data/lib/kontena/scripts/completer +7 -3
- data/spec/fixtures/docker-compose.yml +8 -0
- data/spec/fixtures/kontena.yml +17 -0
- data/spec/fixtures/mysql.yml +3 -0
- data/spec/fixtures/wordpress-scaled.yml +3 -0
- data/spec/fixtures/wordpress.yml +2 -0
- data/spec/kontena/cli/app/common_spec.rb +42 -0
- data/spec/kontena/cli/app/deploy_command_spec.rb +4 -31
- data/spec/kontena/cli/app/scale_spec.rb +4 -23
- data/spec/kontena/cli/master/use_command_spec.rb +12 -3
- data/spec/kontena/cli/master/users/add_role_command_spec.rb +35 -0
- data/spec/kontena/cli/master/users/invite_command_spec.rb +35 -0
- data/spec/kontena/cli/master/users/remove_role_command_spec.rb +35 -0
- data/spec/kontena/cli/services/add_secret_command_spec.rb +61 -0
- data/spec/kontena/cli/services/link_command_spec.rb +43 -0
- data/spec/kontena/cli/services/remove_secret_command_spec.rb +48 -0
- data/spec/kontena/cli/services/restart_command_spec.rb +1 -23
- data/spec/kontena/cli/services/unlink_command_spec.rb +43 -0
- data/spec/kontena/cli/version_command_spec.rb +17 -0
- data/spec/spec_helper.rb +6 -1
- data/spec/support/client_helpers.rb +31 -0
- data/spec/support/fixtures_helpers.rb +7 -0
- metadata +67 -6
- data/lib/kontena/cli/deploy_command.rb +0 -164
- data/lib/kontena/cli/invite_command.rb +0 -13
- data/spec/kontena/cli/deploy_command_spec.rb +0 -239
@@ -4,6 +4,9 @@ require_relative 'nodes/show_command'
|
|
4
4
|
require_relative 'nodes/update_command'
|
5
5
|
require_relative 'nodes/ssh_command'
|
6
6
|
|
7
|
+
require_relative 'nodes/add_label_command'
|
8
|
+
require_relative 'nodes/remove_label_command'
|
9
|
+
|
7
10
|
require_relative 'nodes/vagrant_command'
|
8
11
|
require_relative 'nodes/digital_ocean_command'
|
9
12
|
require_relative 'nodes/aws_command'
|
@@ -11,12 +14,15 @@ require_relative 'nodes/azure_command'
|
|
11
14
|
|
12
15
|
class Kontena::Cli::NodeCommand < Clamp::Command
|
13
16
|
|
14
|
-
subcommand "list", "List grid nodes", Kontena::Cli::Nodes::ListCommand
|
17
|
+
subcommand ["list","ls"], "List grid nodes", Kontena::Cli::Nodes::ListCommand
|
15
18
|
subcommand "show", "Show node", Kontena::Cli::Nodes::ShowCommand
|
16
19
|
subcommand "ssh", "Ssh into node", Kontena::Cli::Nodes::SshCommand
|
17
20
|
subcommand "update", "Update node", Kontena::Cli::Nodes::UpdateCommand
|
18
21
|
subcommand ["remove","rm"], "Remove node", Kontena::Cli::Nodes::RemoveCommand
|
19
22
|
|
23
|
+
subcommand "add-label", "Add label to node", Kontena::Cli::Nodes::AddLabelCommand
|
24
|
+
subcommand "remove-label", "Remove label from node", Kontena::Cli::Nodes::RemoveLabelCommand
|
25
|
+
|
20
26
|
subcommand "vagrant", "Vagrant specific commands", Kontena::Cli::Nodes::VagrantCommand
|
21
27
|
subcommand "digitalocean", "DigitalOcean specific commands", Kontena::Cli::Nodes::DigitalOceanCommand
|
22
28
|
subcommand "aws", "AWS specific commands", Kontena::Cli::Nodes::AwsCommand
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class AddLabelCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE_ID", "Node id"
|
6
|
+
parameter "LABEL", "Label"
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
require_current_grid
|
11
|
+
token = require_token
|
12
|
+
|
13
|
+
node = client(token).get("grids/#{current_grid}/nodes/#{node_id}")
|
14
|
+
data = {}
|
15
|
+
data[:labels] = node['labels'].to_a | [label]
|
16
|
+
client.put("nodes/#{node['id']}", data, {}, {'Kontena-Grid-Token' => node['grid']['token']})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Kontena::Cli::Nodes::Aws
|
2
2
|
class CreateCommand < Clamp::Command
|
3
3
|
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
4
5
|
|
5
6
|
parameter "[NAME]", "Node name"
|
6
7
|
option "--access-key", "ACCESS_KEY", "AWS access key ID", required: true
|
@@ -36,4 +37,4 @@ module Kontena::Cli::Nodes::Aws
|
|
36
37
|
)
|
37
38
|
end
|
38
39
|
end
|
39
|
-
end
|
40
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Kontena::Cli::Nodes::Azure
|
2
2
|
class CreateCommand < Clamp::Command
|
3
3
|
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
4
5
|
|
5
6
|
option "--subscription-id", "SUBSCRIPTION ID", "Azure subscription id", required: true
|
6
7
|
option "--subscription-cert", "CERTIFICATE", "Path to Azure management certificate", attribute_name: :certificate, required: true
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Kontena::Cli::Nodes
|
2
2
|
class ListCommand < Clamp::Command
|
3
3
|
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
4
5
|
|
5
6
|
option ["--all"], :flag, "List nodes for all grids", default: false
|
6
7
|
|
@@ -11,7 +12,7 @@ module Kontena::Cli::Nodes
|
|
11
12
|
|
12
13
|
if all?
|
13
14
|
grids = client(token).get("grids")
|
14
|
-
puts "%-
|
15
|
+
puts "%-70s %-10s %-40s" % [ 'Name', 'Status', 'Labels']
|
15
16
|
|
16
17
|
grids['grids'].each do |grid|
|
17
18
|
nodes = client(token).get("grids/#{grid['name']}/nodes")
|
@@ -21,31 +22,26 @@ module Kontena::Cli::Nodes
|
|
21
22
|
else
|
22
23
|
status = 'offline'
|
23
24
|
end
|
24
|
-
puts "%-
|
25
|
-
grid['name'],
|
26
|
-
|
27
|
-
|
28
|
-
node['driver'],
|
29
|
-
(node['labels'] || ['-']).join(","),
|
30
|
-
status
|
25
|
+
puts "%-70.70s %-10s %-40s" % [
|
26
|
+
"#{grid['name']}/#{node['name']}",
|
27
|
+
status,
|
28
|
+
(node['labels'] || ['-']).join(",")
|
31
29
|
]
|
32
30
|
end
|
33
31
|
end
|
34
32
|
else
|
35
33
|
nodes = client(token).get("grids/#{current_grid}/nodes")
|
36
|
-
puts "%-
|
34
|
+
puts "%-70s %-10s %-40s" % ['Name', 'Status', 'Labels']
|
37
35
|
nodes['nodes'].each do |node|
|
38
36
|
if node['connected']
|
39
37
|
status = 'online'
|
40
38
|
else
|
41
39
|
status = 'offline'
|
42
40
|
end
|
43
|
-
puts "%-
|
41
|
+
puts "%-70.70s %-10s %-40s" % [
|
44
42
|
node['name'],
|
45
|
-
|
46
|
-
node['
|
47
|
-
(node['labels'] || ['-']).join(","),
|
48
|
-
status
|
43
|
+
status,
|
44
|
+
(node['labels'] || ['-']).join(",")
|
49
45
|
]
|
50
46
|
end
|
51
47
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class RemoveLabelCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE_ID", "Node id"
|
6
|
+
parameter "LABEL", "Label"
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
require_current_grid
|
11
|
+
token = require_token
|
12
|
+
|
13
|
+
node = client(token).get("grids/#{current_grid}/nodes/#{node_id}")
|
14
|
+
unless node['labels'].include?(label)
|
15
|
+
abort("Node #{node['name']} does not have label #{label}")
|
16
|
+
end
|
17
|
+
node['labels'].delete(label)
|
18
|
+
data = {}
|
19
|
+
data[:labels] = node['labels']
|
20
|
+
client.put("nodes/#{node['id']}", data, {}, {'Kontena-Grid-Token' => node['grid']['token']})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -3,84 +3,134 @@ require 'shell-spinner'
|
|
3
3
|
module Kontena::Cli::Registry
|
4
4
|
class CreateCommand < Clamp::Command
|
5
5
|
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
|
8
|
+
REGISTRY_VERSION = '2.2'
|
6
9
|
|
7
10
|
option '--node', 'NODE', 'Node name'
|
8
|
-
option '--auth-password', 'AUTH_PASSWORD', 'Password protect registry'
|
9
|
-
option '--s3-access-key', 'S3_ACCESS_KEY', 'S3 access key'
|
10
|
-
option '--s3-secret-key', 'S3_SECRET_KEY', 'S3 secret key'
|
11
11
|
option '--s3-bucket', 'S3_BUCKET', 'S3 bucket'
|
12
12
|
option '--s3-region', 'S3_REGION', 'S3 region', default: 'eu-west-1'
|
13
13
|
option '--s3-encrypt', :flag, 'Encrypt S3 objects', default: false
|
14
14
|
option '--s3-secure', :flag, 'Use secure connection in S3', default: true
|
15
15
|
option '--azure-account-name', 'AZURE_ACCOUNT_NAME', 'Azure account name'
|
16
|
-
option '--azure-account-key', 'AZURE_ACCOUNT_KEY', 'Azure account key'
|
17
16
|
option '--azure-container-name', 'AZURE_CONTAINER_NAME', 'Azure container name'
|
18
17
|
|
19
18
|
def execute
|
20
19
|
require_api_url
|
21
20
|
token = require_token
|
22
21
|
preferred_node = node
|
22
|
+
secrets = []
|
23
|
+
affinity = []
|
24
|
+
stateful = true
|
25
|
+
instances = 1
|
23
26
|
|
24
27
|
registry = client(token).get("services/#{current_grid}/registry") rescue nil
|
25
28
|
abort('Registry already exists') if registry
|
26
29
|
|
27
30
|
nodes = client(token).get("grids/#{current_grid}/nodes")
|
28
|
-
if preferred_node.nil?
|
29
|
-
node = nodes['nodes'].find{|n| n['connected']}
|
30
|
-
abort('Cannot find any online nodes') if node.nil?
|
31
|
-
else
|
32
|
-
node = nodes['nodes'].find{|n| n['connected'] && n['name'] == preferred_node }
|
33
|
-
abort('Node not found') if node.nil?
|
34
|
-
end
|
35
31
|
|
36
|
-
if
|
37
|
-
|
38
|
-
|
39
|
-
|
32
|
+
if s3_bucket
|
33
|
+
['REGISTRY_STORAGE_S3_ACCESSKEY', 'REGISTRY_STORAGE_S3_SECRETKEY'].each do |secret|
|
34
|
+
abort("#{secret} secret is missing from the vault") unless vault_secret_exists?(secret)
|
35
|
+
end
|
40
36
|
env = [
|
41
37
|
"REGISTRY_STORAGE=s3",
|
42
|
-
"REGISTRY_STORAGE_S3_ACCESSKEY=#{s3_access_key}",
|
43
|
-
"REGISTRY_STORAGE_S3_SECRETKEY=#{s3_secret_key}",
|
44
38
|
"REGISTRY_STORAGE_S3_REGION=#{s3_region}",
|
45
39
|
"REGISTRY_STORAGE_S3_BUCKET=#{s3_bucket}",
|
46
40
|
"REGISTRY_STORAGE_S3_ENCRYPT=#{s3_encrypt?}",
|
47
|
-
"REGISTRY_STORAGE_S3_SECURE=#{s3_secure?}"
|
41
|
+
"REGISTRY_STORAGE_S3_SECURE=#{s3_secure?}"
|
42
|
+
]
|
43
|
+
secrets = [
|
44
|
+
{secret: 'REGISTRY_STORAGE_S3_ACCESSKEY', name: 'REGISTRY_STORAGE_S3_ACCESSKEY', type: 'env'},
|
45
|
+
{secret: 'REGISTRY_STORAGE_S3_SECRETKEY', name: 'REGISTRY_STORAGE_S3_SECRETKEY', type: 'env'}
|
48
46
|
]
|
49
|
-
|
47
|
+
stateful = false
|
48
|
+
instances = 2 if nodes['nodes'].size > 1
|
49
|
+
elsif azure_account_name || azure_container_name
|
50
50
|
abort('--azure-account-name is missing') if azure_account_name.nil?
|
51
|
-
abort('--azure-account-key is missing') if azure_account_key.nil?
|
52
51
|
abort('--azure-container-name is missing') if azure_container_name.nil?
|
52
|
+
abort('REGISTRY_STORAGE_AZURE_ACCOUNTKEY is not saved to vault') unless vault_secret_exists?('REGISTRY_STORAGE_AZURE_ACCOUNTKEY')
|
53
53
|
env = [
|
54
54
|
"REGISTRY_STORAGE=azure",
|
55
55
|
"REGISTRY_STORAGE_AZURE_ACCOUNTNAME=#{azure_account_name}",
|
56
|
-
"REGISTRY_STORAGE_AZURE_ACCOUNTKEY=#{azure_account_key}"
|
57
|
-
"REGISTRY_STORAGE_AZURE_CONTAINERNAME=#{azure_container_name}"
|
56
|
+
"REGISTRY_STORAGE_AZURE_ACCOUNTKEY=#{azure_account_key}"
|
58
57
|
]
|
58
|
+
secrets = [
|
59
|
+
{secret: 'REGISTRY_STORAGE_AZURE_ACCOUNTKEY', name: 'REGISTRY_STORAGE_AZURE_ACCOUNTKEY', type: 'env'}
|
60
|
+
]
|
61
|
+
stateful = false
|
62
|
+
instances = 2 if nodes['nodes'].size > 1
|
59
63
|
else
|
60
64
|
env = [
|
61
65
|
"REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry"
|
62
66
|
]
|
67
|
+
if preferred_node
|
68
|
+
node = nodes['nodes'].find{|n| n['connected'] && n['name'] == preferred_node }
|
69
|
+
abort('Node not found') if node.nil?
|
70
|
+
affinity << "node==#{node['name']}"
|
71
|
+
end
|
63
72
|
end
|
64
73
|
|
65
|
-
|
66
|
-
|
74
|
+
if vault_secret_exists?('REGISTRY_AUTH_PASSWORD')
|
75
|
+
secrets << {secret: 'REGISTRY_AUTH_PASSWORD', name: 'AUTH_PASSWORD', type: 'env'}
|
76
|
+
configure_registry_auth(vault_secret('REGISTRY_AUTH_PASSWORD'))
|
77
|
+
end
|
78
|
+
if vault_secret_exists?('REGISTRY_HTTP_TLS_CERTIFICATE')
|
79
|
+
secrets << {secret: 'REGISTRY_HTTP_TLS_CERTIFICATE', name: 'REGISTRY_HTTP_TLS_CERTIFICATE', type: 'env'}
|
80
|
+
secrets << {secret: 'REGISTRY_HTTP_TLS_KEY', name: 'REGISTRY_HTTP_TLS_KEY', type: 'env'}
|
81
|
+
env << "REGISTRY_HTTP_ADDR=0.0.0.0:443"
|
82
|
+
else
|
83
|
+
env << "REGISTRY_HTTP_ADDR=0.0.0.0:80"
|
84
|
+
end
|
85
|
+
env << "REGISTRY_HTTP_SECRET=#{SecureRandom.hex(24)}"
|
67
86
|
|
68
87
|
data = {
|
69
88
|
name: 'registry',
|
70
|
-
stateful:
|
71
|
-
|
89
|
+
stateful: stateful,
|
90
|
+
container_count: instances,
|
91
|
+
image: "kontena/registry:#{REGISTRY_VERSION}",
|
72
92
|
volumes: ['/registry'],
|
73
93
|
env: env,
|
74
|
-
|
94
|
+
secrets: secrets,
|
95
|
+
affinity: affinity
|
75
96
|
}
|
76
97
|
client(token).post("grids/#{current_grid}/services", data)
|
77
98
|
client(token).post("services/#{current_grid}/registry/deploy", {})
|
78
99
|
ShellSpinner "Deploying registry service " do
|
79
100
|
sleep 1 until client(token).get("services/#{current_grid}/registry")['state'] != 'deploying'
|
80
101
|
end
|
81
|
-
puts "
|
82
|
-
puts "
|
83
|
-
puts
|
102
|
+
puts "\n"
|
103
|
+
puts "Docker Registry #{REGISTRY_VERSION} is now running at registry.#{current_grid}.kontena.local."
|
104
|
+
puts "Note: "
|
105
|
+
puts " - OpenVPN connection is needed to establish connection to this registry. See http://www.kontena.io/docs/using-kontena/vpn-access for details"
|
106
|
+
puts " - you must set '--insecure-registry registry.#{current_grid}.kontena.local' to your client docker daemon before you are able to push to this registry"
|
107
|
+
end
|
108
|
+
|
109
|
+
# @param [String] name
|
110
|
+
# @return [Boolean]
|
111
|
+
def vault_secret_exists?(name)
|
112
|
+
client(require_token).get("secrets/#{current_grid}/#{name}")
|
113
|
+
true
|
114
|
+
rescue
|
115
|
+
false
|
116
|
+
end
|
117
|
+
|
118
|
+
# @param [String] name
|
119
|
+
# @return [String]
|
120
|
+
def vault_secret(name)
|
121
|
+
secret = client(require_token).get("secrets/#{current_grid}/#{name}")
|
122
|
+
secret['value']
|
123
|
+
end
|
124
|
+
|
125
|
+
# @param [String] password
|
126
|
+
def configure_registry_auth(password)
|
127
|
+
data = {
|
128
|
+
username: 'admin',
|
129
|
+
password: password,
|
130
|
+
email: 'not@val.id',
|
131
|
+
url: "http://registry.#{current_grid}.kontena.local/"
|
132
|
+
}
|
133
|
+
client(require_token).post("grids/#{current_grid}/external_registries", data) rescue nil
|
84
134
|
end
|
85
135
|
end
|
86
136
|
end
|