kontena-cli 0.9.3 → 0.10.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 +3 -2
- data/lib/kontena/cli/app_command.rb +6 -2
- data/lib/kontena/cli/apps/build_command.rb +0 -1
- data/lib/kontena/cli/apps/common.rb +1 -0
- data/lib/kontena/cli/apps/deploy_command.rb +17 -13
- data/lib/kontena/cli/apps/init_command.rb +1 -2
- data/lib/kontena/cli/apps/list_command.rb +13 -5
- data/lib/kontena/cli/apps/logs_command.rb +22 -13
- data/lib/kontena/cli/apps/monitor_command.rb +91 -0
- data/lib/kontena/cli/apps/remove_command.rb +0 -2
- data/lib/kontena/cli/apps/scale_command.rb +32 -0
- data/lib/kontena/cli/apps/show_command.rb +22 -0
- data/lib/kontena/cli/apps/start_command.rb +0 -1
- data/lib/kontena/cli/apps/stop_command.rb +0 -1
- data/lib/kontena/cli/common.rb +12 -0
- data/lib/kontena/cli/containers/inspect_command.rb +8 -3
- data/lib/kontena/cli/etcd/common.rb +8 -0
- data/lib/kontena/cli/etcd/get_command.rb +4 -0
- data/lib/kontena/cli/etcd/list_command.rb +4 -0
- data/lib/kontena/cli/etcd/mkdir_command.rb +5 -0
- data/lib/kontena/cli/etcd/remove_command.rb +5 -0
- data/lib/kontena/cli/etcd/set_command.rb +5 -0
- data/lib/kontena/cli/grid_command.rb +2 -0
- data/lib/kontena/cli/grids/env_command.rb +22 -0
- data/lib/kontena/cli/grids/logs_command.rb +12 -1
- data/lib/kontena/cli/node_command.rb +2 -0
- data/lib/kontena/cli/nodes/ssh_command.rb +30 -0
- data/lib/kontena/cli/service_command.rb +4 -0
- data/lib/kontena/cli/services/create_command.rb +9 -0
- data/lib/kontena/cli/services/deploy_command.rb +1 -7
- data/lib/kontena/cli/services/envs_command.rb +19 -0
- data/lib/kontena/cli/services/list_command.rb +15 -3
- data/lib/kontena/cli/services/monitor_command.rb +57 -0
- data/lib/kontena/cli/services/scale_command.rb +2 -6
- data/lib/kontena/cli/services/services_helper.rb +94 -43
- data/lib/kontena/cli/services/update_command.rb +12 -1
- data/lib/kontena/machine/aws/cloudinit_master.yml +2 -2
- data/lib/kontena/machine/azure/cloudinit_master.yml +2 -2
- data/lib/kontena/machine/digital_ocean/cloudinit_master.yml +2 -2
- data/lib/kontena/scripts/completer +4 -2
- data/spec/kontena/cli/app/deploy_command_spec.rb +24 -7
- data/spec/kontena/cli/app/scale_spec.rb +64 -0
- data/spec/kontena/cli/services/services_helper_spec.rb +0 -7
- metadata +12 -2
@@ -8,7 +8,7 @@ module Kontena::Cli::Services
|
|
8
8
|
parameter "NAME", "Service name"
|
9
9
|
|
10
10
|
option "--image", "IMAGE", "Docker image to use"
|
11
|
-
option ["-p", "--ports"], "
|
11
|
+
option ["-p", "--ports"], "PORT", "Publish a service's port to the host", multivalued: true
|
12
12
|
option ["-e", "--env"], "ENV", "Set environment variables", multivalued: true
|
13
13
|
option ["-l", "--link"], "LINK", "Add link to another service in the form of name:alias", multivalued: true
|
14
14
|
option ["-a", "--affinity"], "AFFINITY", "Set service affinity", multivalued: true
|
@@ -24,6 +24,11 @@ module Kontena::Cli::Services
|
|
24
24
|
option "--net", "NET", "Network mode"
|
25
25
|
option "--log-driver", "LOG_DRIVER", "Set logging driver"
|
26
26
|
option "--log-opt", "LOG_OPT", "Add logging options", multivalued: true
|
27
|
+
option "--deploy-strategy", "STRATEGY", "Deploy strategy to use (ha, random)"
|
28
|
+
option "--deploy-wait-for-port", "PORT", "Wait for port to respond when deploying"
|
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
|
+
option "--pid", "PID", "Pid namespace to use"
|
31
|
+
|
27
32
|
|
28
33
|
def execute
|
29
34
|
require_api_url
|
@@ -38,6 +43,7 @@ module Kontena::Cli::Services
|
|
38
43
|
# @return [Hash]
|
39
44
|
def parse_service_data_from_options
|
40
45
|
data = {}
|
46
|
+
data[:strategy] = deploy_strategy if deploy_strategy
|
41
47
|
data[:ports] = parse_ports(ports_list) unless ports_list.empty?
|
42
48
|
data[:links] = parse_links(link_list) unless link_list.empty?
|
43
49
|
data[:memory] = parse_memory(memory) if memory
|
@@ -55,6 +61,11 @@ module Kontena::Cli::Services
|
|
55
61
|
data[:net] = net if net
|
56
62
|
data[:log_driver] = log_driver if log_driver
|
57
63
|
data[:log_opts] = parse_log_opts(log_opt_list)
|
64
|
+
data[:deploy_opts] = {}
|
65
|
+
data[:deploy_opts][:min_health] = deploy_min_health.to_f if deploy_min_health
|
66
|
+
data[:deploy_opts][:wait_for_port] = deploy_wait_for_port.to_i if deploy_wait_for_port
|
67
|
+
data.delete(:deploy_opts) if data[:deploy_opts].empty?
|
68
|
+
data[:pid] = pid if pid
|
58
69
|
data
|
59
70
|
end
|
60
71
|
end
|
@@ -24,7 +24,7 @@ write_files:
|
|
24
24
|
fi
|
25
25
|
/usr/bin/docker run --name=kontena-server-haproxy \
|
26
26
|
--link kontena-server-api:kontena-server-api \
|
27
|
-
-e SSL_CERT="$SSL_CERT"
|
27
|
+
-e SSL_CERT="$SSL_CERT" \
|
28
28
|
-p 80:80 -p 443:443 kontena/haproxy:latest
|
29
29
|
coreos:
|
30
30
|
update:
|
@@ -102,4 +102,4 @@ coreos:
|
|
102
102
|
ExecStartPre=-/usr/bin/docker stop kontena-server-haproxy
|
103
103
|
ExecStartPre=-/usr/bin/docker rm kontena-server-haproxy
|
104
104
|
ExecStartPre=/usr/bin/docker pull kontena/haproxy:latest
|
105
|
-
ExecStart=/opt/bin/kontena-haproxy.sh
|
105
|
+
ExecStart=/opt/bin/kontena-haproxy.sh
|
@@ -24,7 +24,7 @@ write_files:
|
|
24
24
|
fi
|
25
25
|
/usr/bin/docker run --name=kontena-server-haproxy \
|
26
26
|
--link kontena-server-api:kontena-server-api \
|
27
|
-
-e SSL_CERT="$SSL_CERT"
|
27
|
+
-e SSL_CERT="$SSL_CERT" \
|
28
28
|
-p 80:80 -p 443:443 kontena/haproxy:latest
|
29
29
|
coreos:
|
30
30
|
update:
|
@@ -102,4 +102,4 @@ coreos:
|
|
102
102
|
ExecStartPre=-/usr/bin/docker stop kontena-server-haproxy
|
103
103
|
ExecStartPre=-/usr/bin/docker rm kontena-server-haproxy
|
104
104
|
ExecStartPre=/usr/bin/docker pull kontena/haproxy:latest
|
105
|
-
ExecStart=/opt/bin/kontena-haproxy.sh
|
105
|
+
ExecStart=/opt/bin/kontena-haproxy.sh
|
@@ -24,7 +24,7 @@ write_files:
|
|
24
24
|
fi
|
25
25
|
/usr/bin/docker run --name=kontena-server-haproxy \
|
26
26
|
--link kontena-server-api:kontena-server-api \
|
27
|
-
-e SSL_CERT="$SSL_CERT"
|
27
|
+
-e SSL_CERT="$SSL_CERT" \
|
28
28
|
-p 80:80 -p 443:443 kontena/haproxy:latest
|
29
29
|
coreos:
|
30
30
|
update:
|
@@ -102,4 +102,4 @@ coreos:
|
|
102
102
|
ExecStartPre=-/usr/bin/docker stop kontena-server-haproxy
|
103
103
|
ExecStartPre=-/usr/bin/docker rm kontena-server-haproxy
|
104
104
|
ExecStartPre=/usr/bin/docker pull kontena/haproxy:latest
|
105
|
-
ExecStart=/opt/bin/kontena-haproxy.sh
|
105
|
+
ExecStart=/opt/bin/kontena-haproxy.sh
|
@@ -103,7 +103,8 @@ if words.size > 0
|
|
103
103
|
end
|
104
104
|
when 'service'
|
105
105
|
completion.clear
|
106
|
-
sub_commands = %w(containers create delete deploy list logs restart
|
106
|
+
sub_commands = %w(containers create delete deploy list logs restart
|
107
|
+
scale show start stats stop update monitor)
|
107
108
|
if words[1]
|
108
109
|
completion.push(sub_commands) unless sub_commands.include?(words[1])
|
109
110
|
completion.push helper.services
|
@@ -127,7 +128,8 @@ if words.size > 0
|
|
127
128
|
completion.push %w(add list delete)
|
128
129
|
when 'app'
|
129
130
|
completion.clear
|
130
|
-
sub_commands = %w(init build deploy start stop remove rm ps list
|
131
|
+
sub_commands = %w(init build deploy start stop remove rm ps list
|
132
|
+
logs monitor show)
|
131
133
|
if words[1]
|
132
134
|
completion.push(sub_commands) unless sub_commands.include?(words[1])
|
133
135
|
completion.push helper.yml_services
|
@@ -147,11 +147,12 @@ yml
|
|
147
147
|
:env=>["MYSQL_ADMIN_PASSWORD=password", "TEST_ENV_VAR=test", "TEST_ENV_VAR2=test3"],
|
148
148
|
:container_count=>2,
|
149
149
|
:stateful=>false,
|
150
|
+
:strategy=>'ha',
|
150
151
|
:links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
|
151
152
|
:ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
|
152
153
|
}
|
153
154
|
|
154
|
-
expect(subject).to receive(:create_service).with('1234567', '1', data)
|
155
|
+
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
155
156
|
subject.run([])
|
156
157
|
end
|
157
158
|
end
|
@@ -171,11 +172,12 @@ yml
|
|
171
172
|
:env=>["MYSQL_ADMIN_PASSWORD=password", "TEST_ENV_VAR=test"],
|
172
173
|
:container_count=>2,
|
173
174
|
:stateful=>false,
|
175
|
+
:strategy=>'ha',
|
174
176
|
:links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
|
175
177
|
:ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
|
176
178
|
}
|
177
179
|
|
178
|
-
expect(subject).to receive(:create_service).with('1234567', '1', data)
|
180
|
+
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
179
181
|
subject.run([])
|
180
182
|
end
|
181
183
|
end
|
@@ -190,18 +192,25 @@ yml
|
|
190
192
|
:env=> nil,
|
191
193
|
:container_count=>2,
|
192
194
|
:stateful=>false,
|
195
|
+
:strategy=>'ha',
|
193
196
|
:links=>[{:name => "kontena-test-mysql", :alias => "db"}, {:name => "loadbalancer", :alias => "loadbalancer"}],
|
194
197
|
:ports=>[{:container_port => "80", :node_port => "80", :protocol => "tcp"}]
|
195
198
|
}
|
196
199
|
|
197
|
-
expect(subject).to receive(:create_service).with('1234567', '1', data)
|
200
|
+
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
198
201
|
subject.run([])
|
199
202
|
end
|
200
203
|
|
201
204
|
it 'creates mysql service before wordpress' do
|
202
205
|
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
203
|
-
data = {
|
204
|
-
|
206
|
+
data = {
|
207
|
+
:name =>"kontena-test-mysql",
|
208
|
+
:image=>'mysql:5.6',
|
209
|
+
:env=>["MYSQL_ROOT_PASSWORD=kontena-test_secret"],
|
210
|
+
:container_count=>nil,
|
211
|
+
:stateful=>true,
|
212
|
+
}
|
213
|
+
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
205
214
|
|
206
215
|
subject.run([])
|
207
216
|
end
|
@@ -215,10 +224,11 @@ yml
|
|
215
224
|
:env=>["WORDPRESS_DB_PASSWORD=kontena-test_secret"],
|
216
225
|
:container_count=>2,
|
217
226
|
:stateful=>true,
|
227
|
+
:strategy=>'ha',
|
218
228
|
:links=>[{:name=>"kontena-test-mysql", :alias=>"mysql"}],
|
219
229
|
:ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
|
220
230
|
}
|
221
|
-
expect(subject).to receive(:create_service).with('1234567', '1', data)
|
231
|
+
expect(subject).to receive(:create_service).with('1234567', '1', hash_including(data))
|
222
232
|
|
223
233
|
subject.run([])
|
224
234
|
end
|
@@ -226,7 +236,7 @@ yml
|
|
226
236
|
it 'deploys services' do
|
227
237
|
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
228
238
|
expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-mysql', {})
|
229
|
-
expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-wordpress', {
|
239
|
+
expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-wordpress', {})
|
230
240
|
subject.run([])
|
231
241
|
end
|
232
242
|
|
@@ -242,4 +252,11 @@ yml
|
|
242
252
|
end
|
243
253
|
end
|
244
254
|
end
|
255
|
+
|
256
|
+
describe '#parse_data' do
|
257
|
+
it 'adds empty hooks hash if not defined' do
|
258
|
+
data = {'image' => 'foo/bar:latest'}
|
259
|
+
subject.send(:parse_data, data)
|
260
|
+
end
|
261
|
+
end
|
245
262
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require_relative "../../../spec_helper"
|
2
|
+
require "kontena/cli/apps/scale_command"
|
3
|
+
|
4
|
+
describe Kontena::Cli::Apps::ScaleCommand do
|
5
|
+
|
6
|
+
let(:subject) do
|
7
|
+
described_class.new(File.basename($0))
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:settings) do
|
11
|
+
{'server' => {'url' => 'http://kontena.test', 'token' => token}}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:token) do
|
15
|
+
'1234567'
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:kontena_yml) do
|
19
|
+
yml_content = <<yml
|
20
|
+
wordpress:
|
21
|
+
image: wordpress:latest
|
22
|
+
instances: 2
|
23
|
+
yml
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:kontena_yml_no_instances) do
|
27
|
+
yml_content = <<yml
|
28
|
+
wordpress:
|
29
|
+
image: wordpress:latest
|
30
|
+
yml
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#execute' do
|
34
|
+
before(:each) do
|
35
|
+
allow(subject).to receive(:settings).and_return(settings)
|
36
|
+
allow(subject).to receive(:current_dir).and_return("kontena-test")
|
37
|
+
allow(File).to receive(:exists?).and_return(true)
|
38
|
+
allow(File).to receive(:read).with("#{Dir.getwd}/kontena.yml").and_return(kontena_yml)
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when service already contains instances property' do
|
42
|
+
it 'aborts execution' do
|
43
|
+
expect{
|
44
|
+
subject.run(['wordpress', 3])
|
45
|
+
}.to raise_error(SystemExit)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when service not found in YML' do
|
50
|
+
it 'aborts execution' do
|
51
|
+
expect{
|
52
|
+
subject.run(['mysql', 3])
|
53
|
+
}.to raise_error(SystemExit)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'scales given service' do
|
58
|
+
allow(File).to receive(:read).with("#{Dir.getwd}/kontena.yml").and_return(kontena_yml_no_instances)
|
59
|
+
expect(subject).to receive(:scale_service).with('1234567','kontena-test-wordpress',3)
|
60
|
+
subject.run(['wordpress', 3])
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -47,13 +47,6 @@ module Kontena::Cli::Services
|
|
47
47
|
expect(client).to receive(:post).with('services/test-grid/1/deploy', {'strategy' => 'ha'})
|
48
48
|
subject.deploy_service(token, '1', {'strategy' => 'ha'})
|
49
49
|
end
|
50
|
-
|
51
|
-
it 'polls Kontena Server until service is running' do
|
52
|
-
allow(client).to receive(:post).with('services/test-grid/1/deploy', anything)
|
53
|
-
expect(client).to receive(:get).with('services/test-grid/1').twice.and_return({'state' => 'deploying'}, {'state' => 'running'})
|
54
|
-
|
55
|
-
subject.deploy_service(token, '1', {'strategy' => 'ha'})
|
56
|
-
end
|
57
50
|
end
|
58
51
|
|
59
52
|
describe '#parse_ports' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kontena-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kontena, Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -137,7 +137,10 @@ files:
|
|
137
137
|
- lib/kontena/cli/apps/kontena_yml_generator.rb
|
138
138
|
- lib/kontena/cli/apps/list_command.rb
|
139
139
|
- lib/kontena/cli/apps/logs_command.rb
|
140
|
+
- lib/kontena/cli/apps/monitor_command.rb
|
140
141
|
- lib/kontena/cli/apps/remove_command.rb
|
142
|
+
- lib/kontena/cli/apps/scale_command.rb
|
143
|
+
- lib/kontena/cli/apps/show_command.rb
|
141
144
|
- lib/kontena/cli/apps/start_command.rb
|
142
145
|
- lib/kontena/cli/apps/stop_command.rb
|
143
146
|
- lib/kontena/cli/common.rb
|
@@ -145,6 +148,7 @@ files:
|
|
145
148
|
- lib/kontena/cli/containers/exec_command.rb
|
146
149
|
- lib/kontena/cli/containers/inspect_command.rb
|
147
150
|
- lib/kontena/cli/deploy_command.rb
|
151
|
+
- lib/kontena/cli/etcd/common.rb
|
148
152
|
- lib/kontena/cli/etcd/get_command.rb
|
149
153
|
- lib/kontena/cli/etcd/list_command.rb
|
150
154
|
- lib/kontena/cli/etcd/mkdir_command.rb
|
@@ -162,6 +166,7 @@ files:
|
|
162
166
|
- lib/kontena/cli/grids/common.rb
|
163
167
|
- lib/kontena/cli/grids/create_command.rb
|
164
168
|
- lib/kontena/cli/grids/current_command.rb
|
169
|
+
- lib/kontena/cli/grids/env_command.rb
|
165
170
|
- lib/kontena/cli/grids/list_command.rb
|
166
171
|
- lib/kontena/cli/grids/list_users_command.rb
|
167
172
|
- lib/kontena/cli/grids/logs_command.rb
|
@@ -202,6 +207,7 @@ files:
|
|
202
207
|
- lib/kontena/cli/nodes/list_command.rb
|
203
208
|
- lib/kontena/cli/nodes/remove_command.rb
|
204
209
|
- lib/kontena/cli/nodes/show_command.rb
|
210
|
+
- lib/kontena/cli/nodes/ssh_command.rb
|
205
211
|
- lib/kontena/cli/nodes/update_command.rb
|
206
212
|
- lib/kontena/cli/nodes/vagrant/create_command.rb
|
207
213
|
- lib/kontena/cli/nodes/vagrant/restart_command.rb
|
@@ -222,8 +228,10 @@ files:
|
|
222
228
|
- lib/kontena/cli/services/create_command.rb
|
223
229
|
- lib/kontena/cli/services/delete_command.rb
|
224
230
|
- lib/kontena/cli/services/deploy_command.rb
|
231
|
+
- lib/kontena/cli/services/envs_command.rb
|
225
232
|
- lib/kontena/cli/services/list_command.rb
|
226
233
|
- lib/kontena/cli/services/logs_command.rb
|
234
|
+
- lib/kontena/cli/services/monitor_command.rb
|
227
235
|
- lib/kontena/cli/services/remove_env_command.rb
|
228
236
|
- lib/kontena/cli/services/restart_command.rb
|
229
237
|
- lib/kontena/cli/services/scale_command.rb
|
@@ -277,6 +285,7 @@ files:
|
|
277
285
|
- spec/kontena/cli/app/common_spec.rb
|
278
286
|
- spec/kontena/cli/app/deploy_command_spec.rb
|
279
287
|
- spec/kontena/cli/app/docker_helper_spec.rb
|
288
|
+
- spec/kontena/cli/app/scale_spec.rb
|
280
289
|
- spec/kontena/cli/common_spec.rb
|
281
290
|
- spec/kontena/cli/deploy_command_spec.rb
|
282
291
|
- spec/kontena/cli/login_command_spec.rb
|
@@ -312,6 +321,7 @@ test_files:
|
|
312
321
|
- spec/kontena/cli/app/common_spec.rb
|
313
322
|
- spec/kontena/cli/app/deploy_command_spec.rb
|
314
323
|
- spec/kontena/cli/app/docker_helper_spec.rb
|
324
|
+
- spec/kontena/cli/app/scale_spec.rb
|
315
325
|
- spec/kontena/cli/common_spec.rb
|
316
326
|
- spec/kontena/cli/deploy_command_spec.rb
|
317
327
|
- spec/kontena/cli/login_command_spec.rb
|