kontena-cli 0.12.3 → 0.13.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 +6 -4
- data/lib/kontena/cli/apps/common.rb +21 -7
- data/lib/kontena/cli/apps/deploy_command.rb +11 -4
- data/lib/kontena/cli/apps/docker_helper.rb +12 -0
- data/lib/kontena/cli/apps/logs_command.rb +0 -2
- data/lib/kontena/cli/apps/remove_command.rb +23 -14
- data/lib/kontena/cli/bytes_helper.rb +40 -0
- data/lib/kontena/cli/container_command.rb +0 -1
- data/lib/kontena/cli/grid_command.rb +4 -6
- data/lib/kontena/cli/grids/logs_command.rb +0 -2
- data/lib/kontena/cli/grids/trusted_subnet_command.rb +12 -0
- data/lib/kontena/cli/grids/trusted_subnets/add_command.rb +16 -0
- data/lib/kontena/cli/grids/trusted_subnets/list_command.rb +17 -0
- data/lib/kontena/cli/grids/trusted_subnets/remove_command.rb +20 -0
- data/lib/kontena/cli/grids/user_command.rb +12 -0
- data/lib/kontena/cli/grids/{add_user_command.rb → users/add_command.rb} +4 -4
- data/lib/kontena/cli/grids/{list_users_command.rb → users/list_command.rb} +4 -4
- data/lib/kontena/cli/grids/{remove_user_command.rb → users/remove_command.rb} +4 -4
- data/lib/kontena/cli/login_command.rb +4 -3
- data/lib/kontena/cli/master/aws/create_command.rb +3 -1
- data/lib/kontena/cli/master/current_command.rb +17 -0
- data/lib/kontena/cli/master/digital_ocean/create_command.rb +5 -3
- data/lib/kontena/cli/master/users/role_command.rb +10 -0
- data/lib/kontena/cli/master/users/{add_role_command.rb → roles/add_command.rb} +4 -4
- data/lib/kontena/cli/master/users/{remove_role_command.rb → roles/remove_command.rb} +4 -4
- data/lib/kontena/cli/master/users_command.rb +2 -4
- data/lib/kontena/cli/master_command.rb +2 -0
- data/lib/kontena/cli/node_command.rb +2 -4
- data/lib/kontena/cli/nodes/label_command.rb +14 -0
- data/lib/kontena/cli/nodes/{add_label_command.rb → labels/add_command.rb} +2 -2
- data/lib/kontena/cli/nodes/{remove_label_command.rb → labels/remove_command.rb} +2 -2
- data/lib/kontena/cli/nodes/list_command.rb +2 -1
- data/lib/kontena/cli/nodes/show_command.rb +19 -2
- data/lib/kontena/cli/registry_command.rb +0 -1
- data/lib/kontena/cli/service_command.rb +4 -11
- data/lib/kontena/cli/services/create_command.rb +10 -2
- data/lib/kontena/cli/services/env_command.rb +12 -0
- data/lib/kontena/cli/services/{add_env_command.rb → envs/add_command.rb} +4 -4
- data/lib/kontena/cli/services/{envs_command.rb → envs/list_command.rb} +5 -5
- data/lib/kontena/cli/services/{remove_env_command.rb → envs/remove_command.rb} +4 -4
- data/lib/kontena/cli/services/list_command.rb +3 -2
- data/lib/kontena/cli/services/logs_command.rb +0 -2
- data/lib/kontena/cli/services/secret_command.rb +10 -0
- data/lib/kontena/cli/services/{add_secret_command.rb → secrets/link_command.rb} +4 -4
- data/lib/kontena/cli/services/{remove_secret_command.rb → secrets/unlink_command.rb} +4 -4
- data/lib/kontena/cli/services/services_helper.rb +35 -8
- data/lib/kontena/cli/services/stats_command.rb +6 -1
- data/lib/kontena/cli/services/update_command.rb +4 -0
- data/lib/kontena/cli/user/forgot_password_command.rb +16 -0
- data/lib/kontena/cli/user/reset_password_command.rb +23 -0
- data/lib/kontena/cli/user/verify_command.rb +22 -0
- data/lib/kontena/cli/user_command.rb +13 -0
- data/lib/kontena/cli/vault/list_command.rb +1 -1
- data/lib/kontena/cli/vpn_command.rb +0 -1
- data/lib/kontena/cli/whoami_command.rb +17 -3
- data/lib/kontena/machine/aws/cloudinit_master.yml +13 -4
- data/lib/kontena/machine/aws/common.rb +8 -13
- data/lib/kontena/machine/aws/master_provisioner.rb +6 -5
- data/lib/kontena/machine/azure/cloudinit_master.yml +0 -2
- data/lib/kontena/machine/digital_ocean.rb +1 -0
- data/lib/kontena/machine/digital_ocean/cloudinit.yml +0 -22
- data/lib/kontena/machine/digital_ocean/cloudinit_master.yml +14 -4
- data/lib/kontena/machine/digital_ocean/master_provisioner.rb +12 -9
- data/lib/kontena/machine/vagrant/cloudinit.yml +2 -0
- data/lib/kontena/scripts/completer +4 -4
- data/spec/kontena/cli/app/common_spec.rb +55 -7
- data/spec/kontena/cli/app/docker_helper_spec.rb +74 -0
- data/spec/kontena/cli/grids/trusted_subnets/add_command_spec.rb +38 -0
- data/spec/kontena/cli/grids/trusted_subnets/list_command_spec.rb +31 -0
- data/spec/kontena/cli/grids/trusted_subnets/remove_command_spec.rb +38 -0
- data/spec/kontena/cli/master/current_command_spec.rb +57 -0
- data/spec/kontena/cli/master/users/{add_role_command_spec.rb → roles/add_command_spec.rb} +3 -3
- data/spec/kontena/cli/master/users/{remove_role_command_spec.rb → roles/remove_command_spec.rb} +3 -3
- data/spec/kontena/cli/services/{add_secret_command_spec.rb → secrets/link_command_spec.rb} +4 -3
- data/spec/kontena/cli/services/{remove_secret_command_spec.rb → secrets/unlink_command_spec.rb} +4 -3
- data/spec/kontena/cli/services/services_helper_spec.rb +44 -0
- metadata +45 -26
- data/lib/kontena/cli/forgot_password_command.rb +0 -13
- data/lib/kontena/cli/reset_password_command.rb +0 -19
- data/lib/kontena/cli/users_command.rb +0 -15
- data/lib/kontena/cli/verify_account_command.rb +0 -13
@@ -29,9 +29,8 @@ write_files:
|
|
29
29
|
-e SSL_CERT="$SSL_CERT" \
|
30
30
|
-p 80:80 -p 443:443 kontena/haproxy:latest
|
31
31
|
coreos:
|
32
|
-
update:
|
33
|
-
reboot-strategy: off
|
34
32
|
units:
|
33
|
+
<% unless mongodb_uri -%>
|
35
34
|
- name: kontena-server-mongo.service
|
36
35
|
command: start
|
37
36
|
enable: true
|
@@ -55,7 +54,7 @@ coreos:
|
|
55
54
|
ExecStart=/usr/bin/docker run --name=kontena-server-mongo \
|
56
55
|
--volumes-from=kontena-server-mongo-data \
|
57
56
|
mongo:3.0 mongod --smallfiles
|
58
|
-
|
57
|
+
<% end -%>
|
59
58
|
- name: kontena-server-api.service
|
60
59
|
command: start
|
61
60
|
enable: true
|
@@ -67,9 +66,13 @@ coreos:
|
|
67
66
|
After=kontena-server-mongo.service
|
68
67
|
Description=Kontena Master
|
69
68
|
Documentation=http://www.kontena.io/
|
69
|
+
Before=kontena-server-haproxy.service
|
70
|
+
Wants=kontena-server-haproxy.service
|
70
71
|
Requires=network-online.target
|
71
72
|
Requires=docker.service
|
73
|
+
<% unless mongodb_uri -%>
|
72
74
|
Requires=kontena-server-mongo.service
|
75
|
+
<% end %>
|
73
76
|
|
74
77
|
[Service]
|
75
78
|
Restart=always
|
@@ -79,10 +82,16 @@ coreos:
|
|
79
82
|
ExecStartPre=-/usr/bin/docker rm kontena-server-api
|
80
83
|
ExecStartPre=/usr/bin/docker pull kontena/server:${KONTENA_VERSION}
|
81
84
|
ExecStart=/usr/bin/docker run --name kontena-server-api \
|
85
|
+
<% if mongodb_uri -%>
|
86
|
+
-e MONGODB_URI=<%= mongodb_uri %> \
|
87
|
+
<% else -%>
|
82
88
|
--link kontena-server-mongo:mongodb \
|
83
89
|
-e MONGODB_URI=mongodb://mongodb:27017/kontena_server \
|
90
|
+
<% end -%>
|
91
|
+
<% if auth_server %>
|
92
|
+
-e AUTH_API_URL=<%= auth_server %> \
|
93
|
+
<% end -%>
|
84
94
|
-e VAULT_KEY=${KONTENA_VAULT_KEY} -e VAULT_IV=${KONTENA_VAULT_IV} \
|
85
|
-
<% if auth_server %>-e AUTH_API_URL=<%= auth_server %><% end %> \
|
86
95
|
kontena/server:${KONTENA_VERSION}
|
87
96
|
|
88
97
|
- name: kontena-server-haproxy.service
|
@@ -97,6 +106,7 @@ coreos:
|
|
97
106
|
Documentation=http://www.kontena.io/
|
98
107
|
Requires=network-online.target
|
99
108
|
Requires=docker.service
|
109
|
+
Requires=kontena-server-api.service
|
100
110
|
|
101
111
|
[Service]
|
102
112
|
Restart=always
|
@@ -8,6 +8,7 @@ module Kontena
|
|
8
8
|
module DigitalOcean
|
9
9
|
class MasterProvisioner
|
10
10
|
include RandomName
|
11
|
+
include Machine::CertHelper
|
11
12
|
|
12
13
|
attr_reader :client, :http_client
|
13
14
|
|
@@ -25,6 +26,10 @@ module Kontena
|
|
25
26
|
if opts[:ssl_cert]
|
26
27
|
abort('Invalid ssl cert') unless File.exists?(File.expand_path(opts[:ssl_cert]))
|
27
28
|
ssl_cert = File.read(File.expand_path(opts[:ssl_cert]))
|
29
|
+
else
|
30
|
+
ShellSpinner "Generating self-signed SSL certificate" do
|
31
|
+
ssl_cert = generate_self_signed_cert
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
userdata_vars = {
|
@@ -32,7 +37,8 @@ module Kontena
|
|
32
37
|
auth_server: opts[:auth_server],
|
33
38
|
version: opts[:version],
|
34
39
|
vault_secret: opts[:vault_secret],
|
35
|
-
vault_iv: opts[:vault_iv]
|
40
|
+
vault_iv: opts[:vault_iv],
|
41
|
+
mongodb_uri: opts[:mongodb_uri]
|
36
42
|
}
|
37
43
|
|
38
44
|
droplet = DropletKit::Droplet.new(
|
@@ -52,11 +58,8 @@ module Kontena
|
|
52
58
|
sleep 5
|
53
59
|
end
|
54
60
|
end
|
55
|
-
|
56
|
-
|
57
|
-
else
|
58
|
-
master_url = "http://#{droplet.public_ip}"
|
59
|
-
end
|
61
|
+
|
62
|
+
master_url = "https://#{droplet.public_ip}"
|
60
63
|
Excon.defaults[:ssl_verify_peer] = false
|
61
64
|
@http_client = Excon.new("#{master_url}", :connect_timeout => 10)
|
62
65
|
|
@@ -65,7 +68,7 @@ module Kontena
|
|
65
68
|
end
|
66
69
|
|
67
70
|
puts "Kontena Master is now running at #{master_url}"
|
68
|
-
puts "Use #{"kontena login #{master_url}".colorize(:light_black)} to complete Kontena Master setup"
|
71
|
+
puts "Use #{"kontena login --name=#{droplet.name.sub('kontena-master-', '')} #{master_url}".colorize(:light_black)} to complete Kontena Master setup"
|
69
72
|
end
|
70
73
|
|
71
74
|
def user_data(vars)
|
@@ -74,7 +77,7 @@ module Kontena
|
|
74
77
|
end
|
75
78
|
|
76
79
|
def generate_name
|
77
|
-
"kontena-master-#{super}-#{rand(1..
|
80
|
+
"kontena-master-#{super}-#{rand(1..9)}"
|
78
81
|
end
|
79
82
|
|
80
83
|
def ssh_key(public_key)
|
@@ -88,7 +91,7 @@ module Kontena
|
|
88
91
|
end
|
89
92
|
|
90
93
|
def erb(template, vars)
|
91
|
-
ERB.new(template).result(OpenStruct.new(vars).instance_eval { binding })
|
94
|
+
ERB.new(template, nil, '%<>-').result(OpenStruct.new(vars).instance_eval { binding })
|
92
95
|
end
|
93
96
|
end
|
94
97
|
end
|
@@ -86,7 +86,7 @@ if words.size > 0
|
|
86
86
|
case words[0]
|
87
87
|
when 'grid'
|
88
88
|
completion.clear
|
89
|
-
sub_commands = %w(add-user audit-log create current list
|
89
|
+
sub_commands = %w(add-user audit-log create current list user remove show use)
|
90
90
|
if words[1]
|
91
91
|
completion.push(sub_commands) unless sub_commands.include?(words[1])
|
92
92
|
completion.push helper.grids
|
@@ -108,7 +108,7 @@ if words.size > 0
|
|
108
108
|
if words[1] && words[1] == 'use'
|
109
109
|
completion.push helper.master_names
|
110
110
|
elsif words[1] && words[1] == 'users'
|
111
|
-
users_sub_commands = %(invite list
|
111
|
+
users_sub_commands = %(invite list role)
|
112
112
|
completion.push users_sub_commands
|
113
113
|
elsif words[1]
|
114
114
|
completion.push(sub_commands) unless sub_commands.include?(words[1])
|
@@ -119,8 +119,8 @@ if words.size > 0
|
|
119
119
|
when 'service'
|
120
120
|
completion.clear
|
121
121
|
sub_commands = %w(containers create delete deploy list logs restart
|
122
|
-
scale show start stats stop update monitor
|
123
|
-
|
122
|
+
scale show start stats stop update monitor env
|
123
|
+
secret link unlink)
|
124
124
|
if words[1]
|
125
125
|
completion.push(sub_commands) unless sub_commands.include?(words[1])
|
126
126
|
completion.push helper.services
|
@@ -78,26 +78,74 @@ describe Kontena::Cli::Apps::Common do
|
|
78
78
|
|
79
79
|
describe '#extend_env_vars' do
|
80
80
|
it 'inherites env vars from upper level' do
|
81
|
-
from =
|
82
|
-
to =
|
81
|
+
from = ['FOO=bar']
|
82
|
+
to = nil
|
83
83
|
env_vars = subject.extend_env_vars(from, to)
|
84
84
|
expect(env_vars).to eq(['FOO=bar'])
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'overrides values' do
|
88
|
-
from =
|
89
|
-
to =
|
88
|
+
from = ['FOO=bar']
|
89
|
+
to = ['FOO=baz']
|
90
90
|
env_vars = subject.extend_env_vars(from, to)
|
91
91
|
expect(env_vars).to eq(['FOO=baz'])
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'combines variables' do
|
95
|
-
from =
|
96
|
-
to =
|
95
|
+
from = ['FOO=bar']
|
96
|
+
to = ['BAR=baz']
|
97
97
|
env_vars = subject.extend_env_vars(from, to)
|
98
98
|
expect(env_vars).to eq(['BAR=baz', 'FOO=bar'])
|
99
99
|
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '#extend_secrets' do
|
103
|
+
it 'inherites secrets from upper level' do
|
104
|
+
secret = {
|
105
|
+
'secret' => 'CUSTOMER_DB_PASSWORD',
|
106
|
+
'name' => 'MYSQL_PASSWORD',
|
107
|
+
'type' => 'env'
|
108
|
+
}
|
109
|
+
from = [secret]
|
110
|
+
to = nil
|
111
|
+
secrets = subject.extend_secrets(from, to)
|
112
|
+
expect(secrets).to eq([secret])
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'overrides secrets' do
|
116
|
+
from_secret = {
|
117
|
+
'secret' => 'CUSTOMER_DB_PASSWORD',
|
118
|
+
'name' => 'MYSQL_PASSWORD',
|
119
|
+
'type' => 'env'
|
120
|
+
}
|
100
121
|
|
122
|
+
to_secret = {
|
123
|
+
'secret' => 'CUSTOMER_DB_PASSWORD',
|
124
|
+
'name' => 'MYSQL_ROOT_PASSWORD',
|
125
|
+
'type' => 'env'
|
126
|
+
}
|
127
|
+
from = [from_secret]
|
128
|
+
to = [to_secret]
|
129
|
+
secrets = subject.extend_secrets(from, to)
|
130
|
+
expect(secrets).to eq([to_secret])
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'combines secrets' do
|
134
|
+
from_secret = {
|
135
|
+
'secret' => 'CUSTOMER_DB_PASSWORD',
|
136
|
+
'name' => 'MYSQL_PASSWORD',
|
137
|
+
'type' => 'env'
|
138
|
+
}
|
101
139
|
|
140
|
+
to_secret = {
|
141
|
+
'secret' => 'CUSTOMER_API_TOKEN',
|
142
|
+
'name' => 'API_TOKEN',
|
143
|
+
'type' => 'env'
|
144
|
+
}
|
145
|
+
from = [from_secret]
|
146
|
+
to = [to_secret]
|
147
|
+
secrets = subject.extend_secrets(from, to)
|
148
|
+
expect(secrets).to eq([to_secret, from_secret])
|
149
|
+
end
|
102
150
|
end
|
103
|
-
end
|
151
|
+
end
|
@@ -7,6 +7,45 @@ describe Kontena::Cli::Apps::DockerHelper do
|
|
7
7
|
Class.new { include Kontena::Cli::Apps::DockerHelper}.new
|
8
8
|
end
|
9
9
|
|
10
|
+
let(:services_with_valid_hooks) do
|
11
|
+
{
|
12
|
+
'test_service' => {
|
13
|
+
'build' => '.',
|
14
|
+
'image' => 'test_service',
|
15
|
+
'hooks' => {
|
16
|
+
'pre_build' => [
|
17
|
+
{ 'cmd' => "echo PREBUILD1", 'name' => 'hook1' },
|
18
|
+
{ 'cmd' => "echo PREBUILD2", 'name' => 'hook2' }
|
19
|
+
]
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:services_with_invalid_hook) do
|
26
|
+
{
|
27
|
+
'test_service' => {
|
28
|
+
'build' => '.',
|
29
|
+
'image' => 'test_service',
|
30
|
+
'hooks' => {
|
31
|
+
'pre_build' => [
|
32
|
+
{ 'cmd' => "echo PREBUILD1", 'name' => 'hook1' },
|
33
|
+
{ 'cmd' => "some_non_existing_command", 'name' => 'failing hook' },
|
34
|
+
]
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
let(:services_with_no_hook) do
|
41
|
+
{
|
42
|
+
'test_service' => {
|
43
|
+
'build' => '.',
|
44
|
+
'image' => 'test_service',
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
10
49
|
describe '#validate_image_name' do
|
11
50
|
context 'when image name is valid' do
|
12
51
|
it 'returns true' do
|
@@ -29,4 +68,39 @@ describe Kontena::Cli::Apps::DockerHelper do
|
|
29
68
|
end
|
30
69
|
end
|
31
70
|
end
|
71
|
+
|
72
|
+
describe '#run_pre_build_hook' do
|
73
|
+
|
74
|
+
context 'when hook defined' do
|
75
|
+
it 'runs the hook' do
|
76
|
+
allow(subject).to receive(:build_docker_image)
|
77
|
+
allow(subject).to receive(:push_docker_image)
|
78
|
+
expect(subject).to receive(:system).with("echo PREBUILD1"). and_return(true)
|
79
|
+
expect(subject).to receive(:system).with("echo PREBUILD2"). and_return(true)
|
80
|
+
|
81
|
+
subject.process_docker_images(services_with_valid_hooks)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'fails to run the hook' do
|
85
|
+
allow(subject).to receive(:build_docker_image)
|
86
|
+
allow(subject).to receive(:push_docker_image)
|
87
|
+
expect(subject).to receive(:system).with("echo PREBUILD1"). and_return(true)
|
88
|
+
expect(subject).to receive(:system).with("some_non_existing_command"). and_return(false)
|
89
|
+
|
90
|
+
expect {
|
91
|
+
subject.process_docker_images(services_with_invalid_hook)
|
92
|
+
}.to raise_error(SystemExit)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
context 'when no hook defined' do
|
96
|
+
it 'runs no hooks' do
|
97
|
+
allow(subject).to receive(:build_docker_image)
|
98
|
+
allow(subject).to receive(:push_docker_image)
|
99
|
+
expect(subject).not_to receive(:run_pre_build_hook)
|
100
|
+
|
101
|
+
subject.process_docker_images(services_with_no_hook)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
32
106
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative "../../../../spec_helper"
|
2
|
+
require "kontena/cli/grids/trusted_subnet_command"
|
3
|
+
require "kontena/cli/grids/trusted_subnets/add_command"
|
4
|
+
|
5
|
+
describe Kontena::Cli::Grids::TrustedSubnets::AddCommand do
|
6
|
+
|
7
|
+
include ClientHelpers
|
8
|
+
|
9
|
+
describe '#execute' do
|
10
|
+
it 'requires api url' do
|
11
|
+
expect(subject).to receive(:require_api_url).once
|
12
|
+
subject.run(['grid', 'subnet'])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'requires token' do
|
16
|
+
expect(subject).to receive(:require_token).and_return(token)
|
17
|
+
subject.run(['grid', 'subnet'])
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'requires grid as param' do
|
21
|
+
expect {
|
22
|
+
subject.run([])
|
23
|
+
}.to raise_error(Clamp::UsageError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'adds subnet to grid' do
|
27
|
+
allow(client).to receive(:get).with("grids/my-grid").and_return(
|
28
|
+
'trusted_subnets' => ['192.168.12.0/24']
|
29
|
+
)
|
30
|
+
expect(client).to receive(:put).with(
|
31
|
+
'grids/my-grid', hash_including({trusted_subnets: [
|
32
|
+
'192.168.12.0/24', '10.12.0.0/19'
|
33
|
+
]})
|
34
|
+
)
|
35
|
+
subject.run(['my-grid', '10.12.0.0/19'])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "../../../../spec_helper"
|
2
|
+
require "kontena/cli/grids/trusted_subnet_command"
|
3
|
+
require "kontena/cli/grids/trusted_subnets/list_command"
|
4
|
+
|
5
|
+
describe Kontena::Cli::Grids::TrustedSubnets::ListCommand do
|
6
|
+
|
7
|
+
include ClientHelpers
|
8
|
+
|
9
|
+
describe '#execute' do
|
10
|
+
it 'requires api url' do
|
11
|
+
expect(subject).to receive(:require_api_url).once
|
12
|
+
subject.run(['grid'])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'requires token' do
|
16
|
+
expect(subject).to receive(:require_token).and_return(token)
|
17
|
+
subject.run(['grid'])
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'requires grid as param' do
|
21
|
+
expect {
|
22
|
+
subject.run([])
|
23
|
+
}.to raise_error(Clamp::UsageError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'requests grid details from master' do
|
27
|
+
expect(client).to receive(:get).with("grids/test-grid")
|
28
|
+
subject.run(['test-grid'])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative "../../../../spec_helper"
|
2
|
+
require "kontena/cli/grids/trusted_subnet_command"
|
3
|
+
require "kontena/cli/grids/trusted_subnets/remove_command"
|
4
|
+
|
5
|
+
describe Kontena::Cli::Grids::TrustedSubnets::RemoveCommand do
|
6
|
+
|
7
|
+
include ClientHelpers
|
8
|
+
|
9
|
+
describe '#execute' do
|
10
|
+
it 'requires api url' do
|
11
|
+
expect(subject).to receive(:require_api_url).once
|
12
|
+
subject.run(['grid', 'subnet'])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'requires token' do
|
16
|
+
expect(subject).to receive(:require_token).and_return(token)
|
17
|
+
subject.run(['grid', 'subnet'])
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'requires grid as param' do
|
21
|
+
expect {
|
22
|
+
subject.run([])
|
23
|
+
}.to raise_error(Clamp::UsageError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'removes subnet from grid' do
|
27
|
+
allow(client).to receive(:get).with("grids/my-grid").and_return(
|
28
|
+
'trusted_subnets' => ['192.168.12.0/24', '192.168.50.0/24']
|
29
|
+
)
|
30
|
+
expect(client).to receive(:put).with(
|
31
|
+
'grids/my-grid', hash_including({trusted_subnets: [
|
32
|
+
'192.168.12.0/24'
|
33
|
+
]})
|
34
|
+
)
|
35
|
+
subject.run(['my-grid', '192.168.50.0/24'])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative "../../../spec_helper"
|
2
|
+
require 'kontena/cli/master/current_command'
|
3
|
+
|
4
|
+
describe Kontena::Cli::Master::CurrentCommand do
|
5
|
+
let(:settings) do
|
6
|
+
{'current_server' => 'alias',
|
7
|
+
'servers' => [
|
8
|
+
{'name' => 'some_master', 'url' => 'some_master'},
|
9
|
+
{'name' => 'alias', 'url' => 'someurl', 'token' => '123456'}
|
10
|
+
]
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:subject) { described_class.new(File.basename($0)) }
|
15
|
+
|
16
|
+
describe '#execute' do
|
17
|
+
it 'puts master name and URL' do
|
18
|
+
allow(subject).to receive(:settings).and_return(settings)
|
19
|
+
|
20
|
+
expect {
|
21
|
+
subject.run([])
|
22
|
+
}.to output(/alias.*someurl/).to_stdout
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'only outputs name if name-flag is set' do
|
26
|
+
allow(subject).to receive(:settings).and_return(settings)
|
27
|
+
|
28
|
+
expect {
|
29
|
+
subject.run(['--name'])
|
30
|
+
}.to output("alias\n").to_stdout
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'does not raise error when logged in' do
|
34
|
+
allow(subject).to receive(:settings).and_return(settings)
|
35
|
+
|
36
|
+
expect {
|
37
|
+
subject.run([])
|
38
|
+
}.to_not raise_error
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'raises error when not logged in' do
|
42
|
+
allow(subject).to receive(:settings).and_return(
|
43
|
+
{
|
44
|
+
'current_server' => nil,
|
45
|
+
'servers' => [
|
46
|
+
{'name' => 'some_master', 'url' => 'some_master'},
|
47
|
+
{'name' => 'alias', 'url' => 'someurl', 'token' => '123456'}
|
48
|
+
]
|
49
|
+
}
|
50
|
+
)
|
51
|
+
|
52
|
+
expect {
|
53
|
+
subject.run([])
|
54
|
+
}.to raise_error(ArgumentError)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|