kontena-cli 0.12.3 → 0.13.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 +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
|