kontena-cli 0.7.3 → 0.8.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 +64 -2
- data/kontena-cli.gemspec +4 -2
- data/lib/kontena/cli/app_command.rb +20 -0
- data/lib/kontena/cli/apps/common.rb +53 -0
- data/lib/kontena/cli/{stacks/stacks.rb → apps/deploy_command.rb} +17 -31
- data/lib/kontena/cli/apps/init_command.rb +101 -0
- data/lib/kontena/cli/apps/list_command.rb +41 -0
- data/lib/kontena/cli/apps/logs_command.rb +58 -0
- data/lib/kontena/cli/apps/remove_command.rb +64 -0
- data/lib/kontena/cli/apps/start_command.rb +38 -0
- data/lib/kontena/cli/apps/stop_command.rb +38 -0
- data/lib/kontena/cli/container_command.rb +9 -0
- data/lib/kontena/cli/containers/{containers.rb → exec_command.rb} +5 -5
- data/lib/kontena/cli/deploy_command.rb +159 -0
- data/lib/kontena/cli/external_registries/add_command.rb +22 -0
- data/lib/kontena/cli/external_registries/delete_command.rb +13 -0
- data/lib/kontena/cli/external_registries/list_command.rb +16 -0
- data/lib/kontena/cli/external_registry_command.rb +14 -0
- data/lib/kontena/cli/forgot_password_command.rb +13 -0
- data/lib/kontena/cli/grid_command.rb +27 -0
- data/lib/kontena/cli/grids/add_user_command.rb +17 -0
- data/lib/kontena/cli/grids/{audit_log.rb → audit_log_command.rb} +7 -6
- data/lib/kontena/cli/grids/common.rb +24 -0
- data/lib/kontena/cli/grids/create_command.rb +26 -0
- data/lib/kontena/cli/grids/current_command.rb +18 -0
- data/lib/kontena/cli/grids/list_command.rb +26 -0
- data/lib/kontena/cli/grids/list_users_command.rb +18 -0
- data/lib/kontena/cli/grids/remove_command.rb +26 -0
- data/lib/kontena/cli/grids/remove_user_command.rb +16 -0
- data/lib/kontena/cli/grids/show_command.rb +19 -0
- data/lib/kontena/cli/grids/use_command.rb +21 -0
- data/lib/kontena/cli/invite_command.rb +13 -0
- data/lib/kontena/cli/login_command.rb +114 -0
- data/lib/kontena/cli/logout_command.rb +8 -0
- data/lib/kontena/cli/node_command.rb +21 -0
- data/lib/kontena/cli/nodes/digital_ocean/create_command.rb +31 -0
- data/lib/kontena/cli/nodes/digital_ocean/restart_command.rb +26 -0
- data/lib/kontena/cli/nodes/digital_ocean/terminate_command.rb +18 -0
- data/lib/kontena/cli/nodes/digital_ocean_command.rb +15 -0
- data/lib/kontena/cli/nodes/list_command.rb +28 -0
- data/lib/kontena/cli/nodes/remove_command.rb +15 -0
- data/lib/kontena/cli/nodes/show_command.rb +31 -0
- data/lib/kontena/cli/nodes/update_command.rb +18 -0
- data/lib/kontena/cli/nodes/vagrant/create_command.rb +26 -0
- data/lib/kontena/cli/nodes/vagrant/restart_command.rb +25 -0
- data/lib/kontena/cli/nodes/vagrant/ssh_command.rb +20 -0
- data/lib/kontena/cli/nodes/vagrant/start_command.rb +25 -0
- data/lib/kontena/cli/nodes/vagrant/stop_command.rb +25 -0
- data/lib/kontena/cli/nodes/vagrant/terminate_command.rb +16 -0
- data/lib/kontena/cli/nodes/vagrant_command.rb +21 -0
- data/lib/kontena/cli/register_command.rb +21 -0
- data/lib/kontena/cli/{grids/registry.rb → registry/create_command.rb} +32 -35
- data/lib/kontena/cli/registry/delete_command.rb +15 -0
- data/lib/kontena/cli/registry_command.rb +11 -0
- data/lib/kontena/cli/reset_password_command.rb +17 -0
- data/lib/kontena/cli/service_command.rb +33 -0
- data/lib/kontena/cli/services/container_command.rb +9 -0
- data/lib/kontena/cli/services/containers_command.rb +31 -0
- data/lib/kontena/cli/services/create_command.rb +62 -0
- data/lib/kontena/cli/services/delete_command.rb +17 -0
- data/lib/kontena/cli/services/deploy_command.rb +23 -0
- data/lib/kontena/cli/services/list_command.rb +20 -0
- data/lib/kontena/cli/services/logs_command.rb +51 -0
- data/lib/kontena/cli/services/restart_command.rb +16 -0
- data/lib/kontena/cli/services/scale_command.rb +20 -0
- data/lib/kontena/cli/services/services_helper.rb +94 -0
- data/lib/kontena/cli/services/show_command.rb +17 -0
- data/lib/kontena/cli/services/start_command.rb +16 -0
- data/lib/kontena/cli/services/{stats.rb → stats_command.rb} +11 -10
- data/lib/kontena/cli/services/stop_command.rb +16 -0
- data/lib/kontena/cli/services/update_command.rb +51 -0
- data/lib/kontena/cli/verify_account_command.rb +13 -0
- data/lib/kontena/cli/version_command.rb +8 -0
- data/lib/kontena/cli/vpn/config_command.rb +12 -0
- data/lib/kontena/cli/{grids/vpn.rb → vpn/create_command.rb} +12 -29
- data/lib/kontena/cli/vpn/delete_command.rb +15 -0
- data/lib/kontena/cli/vpn_command.rb +13 -0
- data/lib/kontena/cli/whoami_command.rb +19 -0
- data/lib/kontena/client.rb +14 -11
- data/lib/kontena/machine/common.rb +17 -0
- data/lib/kontena/machine/digital_ocean.rb +11 -0
- data/lib/kontena/machine/digital_ocean/cloudinit.yml +66 -0
- data/lib/kontena/machine/digital_ocean/node_destroyer.rb +38 -0
- data/lib/kontena/machine/digital_ocean/node_provisioner.rb +74 -0
- data/lib/kontena/machine/random_name.rb +42 -0
- data/lib/kontena/machine/vagrant.rb +10 -0
- data/lib/kontena/machine/vagrant/Vagrantfile.coreos.rb.erb +32 -0
- data/lib/kontena/machine/vagrant/cloudinit.yml +65 -0
- data/lib/kontena/machine/vagrant/node_destroyer.rb +36 -0
- data/lib/kontena/machine/vagrant/node_provisioner.rb +68 -0
- data/lib/kontena/scripts/completer +5 -5
- data/spec/kontena/cli/app/deploy_command_spec.rb +227 -0
- data/spec/kontena/cli/deploy_command_spec.rb +213 -0
- data/spec/kontena/cli/login_command_spec.rb +22 -0
- data/spec/kontena/cli/register_command_spec.rb +57 -0
- data/spec/spec_helper.rb +5 -1
- metadata +132 -36
- data/lib/kontena/cli/commands.rb +0 -20
- data/lib/kontena/cli/containers/commands.rb +0 -12
- data/lib/kontena/cli/grids/commands.rb +0 -169
- data/lib/kontena/cli/grids/external_registries.rb +0 -40
- data/lib/kontena/cli/grids/grids.rb +0 -108
- data/lib/kontena/cli/grids/users.rb +0 -32
- data/lib/kontena/cli/nodes/commands.rb +0 -27
- data/lib/kontena/cli/nodes/nodes.rb +0 -64
- data/lib/kontena/cli/server/commands.rb +0 -69
- data/lib/kontena/cli/server/server.rb +0 -45
- data/lib/kontena/cli/server/user.rb +0 -174
- data/lib/kontena/cli/services/commands.rb +0 -138
- data/lib/kontena/cli/services/containers.rb +0 -24
- data/lib/kontena/cli/services/logs.rb +0 -44
- data/lib/kontena/cli/services/services.rb +0 -175
- data/lib/kontena/cli/stacks/commands.rb +0 -13
- data/spec/kontena/cli/server/user_spec.rb +0 -59
- data/spec/kontena/cli/stacks/stacks_spec.rb +0 -212
@@ -0,0 +1,26 @@
|
|
1
|
+
module Kontena::Cli::Nodes::DigitalOcean
|
2
|
+
class RestartCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
option "--token", "TOKEN", "DigitalOcean API token", required: true
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
require_current_grid
|
11
|
+
|
12
|
+
require 'kontena/machine/digital_ocean'
|
13
|
+
|
14
|
+
client = DropletKit::Client.new(access_token: token)
|
15
|
+
droplet = client.droplets.all.find{|d| d.name == name}
|
16
|
+
if droplet
|
17
|
+
ShellSpinner "Restarting DigitalOcean droplet #{name.colorize(:cyan)} " do
|
18
|
+
client.droplet_actions.reboot(droplet_id: droplet.id)
|
19
|
+
sleep 5 until client.droplets.find(id: droplet.id).status == 'active'
|
20
|
+
end
|
21
|
+
else
|
22
|
+
abort "Cannot find droplet #{name.colorize(:cyan)} in DigitalOcean"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Kontena::Cli::Nodes::DigitalOcean
|
2
|
+
class TerminateCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
option "--token", "TOKEN", "DigitalOcean API token", required: true
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
require_current_grid
|
11
|
+
|
12
|
+
require 'kontena/machine/digital_ocean'
|
13
|
+
grid = client(require_token).get("grids/#{current_grid}")
|
14
|
+
destroyer = Kontena::Machine::DigitalOcean::NodeDestroyer.new(client(require_token), token)
|
15
|
+
destroyer.run!(grid, name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative 'digital_ocean/create_command'
|
2
|
+
require_relative 'digital_ocean/restart_command'
|
3
|
+
require_relative 'digital_ocean/terminate_command'
|
4
|
+
|
5
|
+
module Kontena::Cli::Nodes
|
6
|
+
class DigitalOceanCommand < Clamp::Command
|
7
|
+
|
8
|
+
subcommand "create", "Create a new DigitalOcean node", DigitalOcean::CreateCommand
|
9
|
+
subcommand "restart", "Restart DigitalOcean node", DigitalOcean::RestartCommand
|
10
|
+
subcommand "terminate", "Terminate DigitalOcean node", DigitalOcean::TerminateCommand
|
11
|
+
|
12
|
+
def execute
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class ListCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
def execute
|
6
|
+
require_api_url
|
7
|
+
require_current_grid
|
8
|
+
token = require_token
|
9
|
+
|
10
|
+
grids = client(token).get("grids/#{current_grid}/nodes")
|
11
|
+
puts "%-30s %-40s %-15s %-30s %-10s" % ['Name', 'OS', 'Driver', 'Labels', 'Status']
|
12
|
+
grids['nodes'].each do |node|
|
13
|
+
if node['connected']
|
14
|
+
status = 'online'
|
15
|
+
else
|
16
|
+
status = 'offline'
|
17
|
+
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
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class RemoveCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE_ID", "Node id"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
token = require_token
|
11
|
+
|
12
|
+
client(token).delete("grids/#{current_grid}/nodes/#{node_id}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class ShowCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE_ID", "Node id"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
token = require_token
|
11
|
+
|
12
|
+
node = client(token).get("grids/#{current_grid}/nodes/#{node_id}")
|
13
|
+
puts "#{node['name']}:"
|
14
|
+
puts " id: #{node['id']}"
|
15
|
+
puts " connected: #{node['connected'] ? 'yes': 'no'}"
|
16
|
+
puts " last connect: #{node['updated_at']}"
|
17
|
+
puts " public ip: #{node['public_ip']}"
|
18
|
+
puts " private ip: #{node['private_ip']}"
|
19
|
+
puts " overlay network: 10.81.#{node['node_number']}.0/24"
|
20
|
+
puts " os: #{node['os']}"
|
21
|
+
puts " driver: #{node['driver']}"
|
22
|
+
puts " kernel: #{node['kernel_version']}"
|
23
|
+
puts " cpus: #{node['cpus']}"
|
24
|
+
puts " memory: #{node['mem_total'] / 1024 / 1024}M"
|
25
|
+
puts " labels:"
|
26
|
+
if node['labels']
|
27
|
+
node['labels'].each{|l| puts " - #{l}"}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class UpdateCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE_ID", "Node id"
|
6
|
+
option ["-l", "--label"], "LABEL", "Node label", multivalued: true
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
require_current_grid
|
11
|
+
token = require_token
|
12
|
+
|
13
|
+
data = {}
|
14
|
+
data[:labels] = label_list if label_list
|
15
|
+
client(token).put("grids/#{current_grid}/nodes/#{node_id}", data)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Vagrant
|
2
|
+
class CreateCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
option "--name", "NAME", "Node name"
|
6
|
+
option "--memory", "MEMORY", "How much memory node has", default: '1024'
|
7
|
+
option "--version", "VERSION", "Define installed Kontena version", default: 'latest'
|
8
|
+
|
9
|
+
def execute
|
10
|
+
require_api_url
|
11
|
+
require_current_grid
|
12
|
+
|
13
|
+
require 'kontena/machine/vagrant'
|
14
|
+
grid = client(require_token).get("grids/#{current_grid}")
|
15
|
+
provisioner = Kontena::Machine::Vagrant::NodeProvisioner.new(client(require_token))
|
16
|
+
provisioner.run!(
|
17
|
+
master_uri: api_url,
|
18
|
+
grid_token: grid['token'],
|
19
|
+
grid: current_grid,
|
20
|
+
name: name,
|
21
|
+
memory: memory,
|
22
|
+
version: version
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Vagrant
|
2
|
+
class RestartCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
|
11
|
+
require 'kontena/machine/vagrant'
|
12
|
+
vagrant_path = "#{Dir.home}/.kontena/#{current_grid}/#{name}"
|
13
|
+
abort("Cannot find Vagrant node #{name}".colorize(:red)) unless Dir.exist?(vagrant_path)
|
14
|
+
Dir.chdir(vagrant_path) do
|
15
|
+
ShellSpinner "Restarting Vagrant machine #{name.colorize(:cyan)} " do
|
16
|
+
Open3.popen2('vagrant reload') do |stdin, output, wait|
|
17
|
+
while o = output.gets
|
18
|
+
print o if ENV['DEBUG']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Vagrant
|
2
|
+
class SshCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
|
11
|
+
require 'kontena/machine/vagrant'
|
12
|
+
vagrant_path = "#{Dir.home}/.kontena/#{current_grid}/#{name}"
|
13
|
+
abort("Cannot find Vagrant node #{name}".colorize(:red)) unless Dir.exist?(vagrant_path)
|
14
|
+
|
15
|
+
Dir.chdir(vagrant_path) do
|
16
|
+
system('vagrant ssh')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Vagrant
|
2
|
+
class StartCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
|
11
|
+
require 'kontena/machine/vagrant'
|
12
|
+
vagrant_path = "#{Dir.home}/.kontena/#{current_grid}/#{name}"
|
13
|
+
abort("Cannot find Vagrant node #{name}".colorize(:red)) unless Dir.exist?(vagrant_path)
|
14
|
+
Dir.chdir(vagrant_path) do
|
15
|
+
ShellSpinner "Starting Vagrant machine #{name.colorize(:cyan)} " do
|
16
|
+
Open3.popen2('vagrant up') do |stdin, output, wait|
|
17
|
+
while o = output.gets
|
18
|
+
print o if ENV['DEBUG']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Vagrant
|
2
|
+
class StopCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
|
11
|
+
require 'kontena/machine/vagrant'
|
12
|
+
vagrant_path = "#{Dir.home}/.kontena/#{current_grid}/#{name}"
|
13
|
+
abort("Cannot find Vagrant node #{name}".colorize(:red)) unless Dir.exist?(vagrant_path)
|
14
|
+
Dir.chdir(vagrant_path) do
|
15
|
+
ShellSpinner "Stopping Vagrant machine #{name.colorize(:cyan)} " do
|
16
|
+
Open3.popen2('vagrant halt') do |stdin, output, wait|
|
17
|
+
while o = output.gets
|
18
|
+
print o if ENV['DEBUG']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Vagrant
|
2
|
+
class TerminateCommand < Clamp::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "Node name"
|
6
|
+
|
7
|
+
def execute
|
8
|
+
require_api_url
|
9
|
+
require_current_grid
|
10
|
+
|
11
|
+
require 'kontena/machine/vagrant'
|
12
|
+
destroyer = Kontena::Machine::Vagrant::NodeDestroyer.new(client(require_token))
|
13
|
+
destroyer.run!(current_grid, name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'vagrant/create_command'
|
2
|
+
require_relative 'vagrant/start_command'
|
3
|
+
require_relative 'vagrant/stop_command'
|
4
|
+
require_relative 'vagrant/restart_command'
|
5
|
+
require_relative 'vagrant/terminate_command'
|
6
|
+
require_relative 'vagrant/ssh_command'
|
7
|
+
|
8
|
+
module Kontena::Cli::Nodes
|
9
|
+
class VagrantCommand < Clamp::Command
|
10
|
+
|
11
|
+
subcommand "create", "Create a new Vagrant node", Vagrant::CreateCommand
|
12
|
+
subcommand "ssh", "SSH into Vagrant node", Vagrant::SshCommand
|
13
|
+
subcommand "start", "Start Vagrant node", Vagrant::StartCommand
|
14
|
+
subcommand "stop", "Stop Vagrant node", Vagrant::StopCommand
|
15
|
+
subcommand "restart", "Restart Vagrant node", Vagrant::RestartCommand
|
16
|
+
subcommand "terminate", "Terminate Vagrant node", Vagrant::TerminateCommand
|
17
|
+
|
18
|
+
def execute
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Kontena::Cli::RegisterCommand < Clamp::Command
|
2
|
+
include Kontena::Cli::Common
|
3
|
+
|
4
|
+
option "--auth-provider-url", "AUTH_PROVIDER_URL", "Auth provider URL"
|
5
|
+
|
6
|
+
def execute
|
7
|
+
auth_api_url = auth_provider_url || 'https://auth.kontena.io'
|
8
|
+
if !auth_api_url.start_with?('http://') && !auth_api_url.start_with?('https://')
|
9
|
+
auth_api_url = "https://#{auth_api_url}"
|
10
|
+
end
|
11
|
+
email = ask("Email: ")
|
12
|
+
password = password("Password: ")
|
13
|
+
password2 = password("Password again: ")
|
14
|
+
if password != password2
|
15
|
+
abort("Passwords don't match".colorize(:red))
|
16
|
+
end
|
17
|
+
params = {email: email, password: password}
|
18
|
+
auth_client = Kontena::Client.new(auth_api_url)
|
19
|
+
auth_client.post('users', params)
|
20
|
+
end
|
21
|
+
end
|
@@ -1,34 +1,40 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
module Kontena::Cli::Grids
|
5
|
-
class Registry
|
1
|
+
module Kontena::Cli::Registry
|
2
|
+
class CreateCommand < Clamp::Command
|
6
3
|
include Kontena::Cli::Common
|
7
4
|
|
8
|
-
|
5
|
+
option '--node', 'NODE', 'Node name'
|
6
|
+
option '--auth-password', 'AUTH_PASSWORD', 'Password protect registry'
|
7
|
+
option '--s3-access-key', 'S3_ACCESS_KEY', 'S3 access key'
|
8
|
+
option '--s3-secret-key', 'S3_SECRET_KEY', 'S3 secret key'
|
9
|
+
option '--s3-bucket', 'S3_BUCKET', 'S3 bucket'
|
10
|
+
option '--s3-region', 'S3_REGION', 'S3 region', default: 'eu-west-1'
|
11
|
+
option '--s3-encrypt', :flag, 'Encrypt S3 objects', default: false
|
12
|
+
option '--s3-secure', :flag, 'Use secure connection in S3', default: true
|
13
|
+
option '--azure-account-name', 'AZURE_ACCOUNT_NAME', 'Azure account name'
|
14
|
+
option '--azure-account-key', 'AZURE_ACCOUNT_KEY', 'Azure account key'
|
15
|
+
option '--azure-container-name', 'AZURE_CONTAINER_NAME', 'Azure container name'
|
16
|
+
|
17
|
+
def execute
|
9
18
|
require_api_url
|
10
19
|
token = require_token
|
11
|
-
preferred_node =
|
20
|
+
preferred_node = node
|
12
21
|
|
13
22
|
registry = client(token).get("services/#{current_grid}/registry") rescue nil
|
14
|
-
|
23
|
+
abort('Registry already exists') if registry
|
15
24
|
|
16
25
|
nodes = client(token).get("grids/#{current_grid}/nodes")
|
17
26
|
if preferred_node.nil?
|
18
27
|
node = nodes['nodes'].find{|n| n['connected']}
|
19
|
-
|
28
|
+
abort('Cannot find any online nodes') if node.nil?
|
20
29
|
else
|
21
30
|
node = nodes['nodes'].find{|n| n['connected'] && n['name'] == preferred_node }
|
22
|
-
|
31
|
+
abort('Node not found') if node.nil?
|
23
32
|
end
|
24
33
|
|
25
|
-
if
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
s3_region = opts.s3_region || 'eu-west-1'
|
30
|
-
s3_encrypt = opts.s3_encrypt || false
|
31
|
-
s3_secure = opts.s3_secure || true
|
34
|
+
if s3_access_key || s3_secret_key
|
35
|
+
abort('--s3-access-key is missing') if s3_access_key.nil?
|
36
|
+
abort('--s3-secret-key is missing') if s3_secret_key.nil?
|
37
|
+
abort('--s3-bucket is missing') if s3_bucket.nil?
|
32
38
|
env = [
|
33
39
|
"REGISTRY_STORAGE=s3",
|
34
40
|
"REGISTRY_STORAGE_S3_ACCESSKEY=#{opts.s3_access_key}",
|
@@ -38,10 +44,10 @@ module Kontena::Cli::Grids
|
|
38
44
|
"REGISTRY_STORAGE_S3_ENCRYPT=#{s3_encrypt}",
|
39
45
|
"REGISTRY_STORAGE_S3_SECURE=#{s3_secure}",
|
40
46
|
]
|
41
|
-
elsif
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
elsif azure_account_name || azure_account_key
|
48
|
+
abort('--azure-account-name is missing') if azure_account_name.nil?
|
49
|
+
abort('--azure-account-key is missing') if azure_account_key.nil?
|
50
|
+
abort('--azure-container-name is missing') if azure_container_name.nil?
|
45
51
|
env = [
|
46
52
|
"REGISTRY_STORAGE=azure",
|
47
53
|
"REGISTRY_STORAGE_AZURE_ACCOUNTNAME=#{opts.azure_account_name}",
|
@@ -55,11 +61,12 @@ module Kontena::Cli::Grids
|
|
55
61
|
end
|
56
62
|
|
57
63
|
env << "REGISTRY_HTTP_ADDR=0.0.0.0:80"
|
64
|
+
env << "AUTH_PASSWORD=#{auth_password}" if auth_password
|
58
65
|
|
59
66
|
data = {
|
60
67
|
name: 'registry',
|
61
68
|
stateful: true,
|
62
|
-
image: 'registry:2.
|
69
|
+
image: 'kontena/registry:2.1',
|
63
70
|
volumes: ['/registry'],
|
64
71
|
env: env,
|
65
72
|
affinity: ["node==#{node['name']}"]
|
@@ -72,19 +79,9 @@ module Kontena::Cli::Grids
|
|
72
79
|
sleep 1
|
73
80
|
end
|
74
81
|
puts ' done'
|
75
|
-
puts "Docker Registry 2.
|
76
|
-
puts "Note: OpenVPN connection is needed to establish connection to this registry."
|
77
|
-
puts 'Note 2: you must set "--insecure-registry 10.81.0.0/
|
78
|
-
end
|
79
|
-
|
80
|
-
def delete
|
81
|
-
require_api_url
|
82
|
-
token = require_token
|
83
|
-
|
84
|
-
registry = client(token).get("services/#{current_grid}/registry") rescue nil
|
85
|
-
raise ArgumentError.new("Docker Registry service does not exist") if registry.nil?
|
86
|
-
|
87
|
-
client(token).delete("services/#{current_grid}/registry")
|
82
|
+
puts "Docker Registry 2.1 is now running at registry.kontena.local."
|
83
|
+
puts "Note: OpenVPN connection is needed to establish connection to this registry. See 'kontena vpn' for details."
|
84
|
+
puts 'Note 2: you must set "--insecure-registry 10.81.0.0/19" to your client docker daemon before you are able to push to this registry.'
|
88
85
|
end
|
89
86
|
end
|
90
87
|
end
|