Module: Central::Cli::Services::ServicesHelper
- Includes:
- Common
- Included in:
- Apps::Common, AddEnvCommand, AddSecretCommand, ContainersCommand, CreateCommand, DeleteCommand, DeployCommand, Envs::AddCommand, Envs::ListCommand, Envs::RemoveCommand, EnvsCommand, LinkCommand, ListCommand, LogsCommand, MonitorCommand, RemoveCommand, RemoveEnvCommand, RemoveSecretCommand, RestartCommand, ScaleCommand, Central::Cli::Services::Secrets::LinkCommand, Central::Cli::Services::Secrets::UnlinkCommand, ShowCommand, StartCommand, StatsCommand, StopCommand, UnlinkCommand, UpdateCommand
- Defined in:
- lib/central/cli/services/services_helper.rb
Instance Method Summary
collapse
-
#create_service(token, stack_id, data) ⇒ Object
-
#delete_service(token, service_id) ⇒ Object
-
#deploy_service(token, service_id, data) ⇒ Object
-
#get_service(token, service_id) ⇒ Object
-
#int_to_filesize(int) ⇒ Object
-
#parse_image(image) ⇒ String
-
#parse_links(link_options) ⇒ Array<Hash>
-
#parse_log_opts(log_opts) ⇒ Hash
-
#parse_memory(memory) ⇒ Integer
-
#parse_ports(port_options) ⇒ Array<Hash>
-
#parse_relative_time(time) ⇒ Integer, NilClass
-
#parse_secrets(secret_opts) ⇒ Array<Hash>
-
#parse_service_id(service_id) ⇒ String
-
#restart_service(token, service_id) ⇒ Object
-
#scale_service(token, service_id, instances) ⇒ Object
-
#show_service(token, service_id) ⇒ Object
-
#start_service(token, service_id) ⇒ Object
-
#stop_service(token, service_id) ⇒ Object
-
#update_service(token, service_id, data) ⇒ Object
-
#wait_for_deploy_to_finish(token, name) ⇒ Object
Methods included from Common
#access_token=, #add_master, #api_url, #api_url=, #clear_current_stack, #client, #current_master, #current_master=, #current_master_index, #current_stack, #current_stack=, #ensure_custom_ssl_ca, #require_api_url, #require_current_stack, #require_token, #reset_client, #save_settings, #settings, #settings_filename
Instance Method Details
#create_service(token, stack_id, data) ⇒ Object
14
15
16
|
# File 'lib/central/cli/services/services_helper.rb', line 14
def create_service(token, stack_id, data)
client(token).post("stacks/#{stack_id}/services", data)
end
|
#delete_service(token, service_id) ⇒ Object
238
239
240
241
|
# File 'lib/central/cli/services/services_helper.rb', line 238
def delete_service(token, service_id)
param = parse_service_id(service_id)
client(token).delete("services/#{param}")
end
|
#deploy_service(token, service_id, data) ⇒ Object
200
201
202
203
|
# File 'lib/central/cli/services/services_helper.rb', line 200
def deploy_service(token, service_id, data)
param = parse_service_id(service_id)
client(token).post("services/#{param}/deploy", data)
end
|
#get_service(token, service_id) ⇒ Object
36
37
38
39
|
# File 'lib/central/cli/services/services_helper.rb', line 36
def get_service(token, service_id)
param = parse_service_id(service_id)
client(token).get("services/#{param}")
end
|
#int_to_filesize(int) ⇒ Object
348
349
350
351
352
353
354
355
356
|
# File 'lib/central/cli/services/services_helper.rb', line 348
def int_to_filesize(int)
{
'B' => 1000,
'KB' => 1000 * 1000,
'MB' => 1000 * 1000 * 1000,
'GB' => 1000 * 1000 * 1000 * 1000,
'TB' => 1000 * 1000 * 1000 * 1000 * 1000
}.each_pair { |e, s| return "#{(int.to_i / (s / 1000))}#{e}" if int < s }
end
|
#parse_image(image) ⇒ String
301
302
303
304
|
# File 'lib/central/cli/services/services_helper.rb', line 301
def parse_image(image)
image = "#{image}:latest" unless image.include?(':')
image
end
|
#parse_links(link_options) ⇒ Array<Hash>
271
272
273
274
275
276
277
278
279
280
281
282
283
|
# File 'lib/central/cli/services/services_helper.rb', line 271
def parse_links(link_options)
link_options.map do|l|
service_name, alias_name = l.split(':')
if service_name.nil?
fail ArgumentError.new("Invalid link value #{l}")
end
alias_name = service_name if alias_name.nil?
{
name: service_name,
alias: alias_name
}
end
end
|
#parse_log_opts(log_opts) ⇒ Hash
309
310
311
312
313
314
315
316
|
# File 'lib/central/cli/services/services_helper.rb', line 309
def parse_log_opts(log_opts)
opts = {}
log_opts.each do |opt|
key, value = opt.split('=')
opts[key] = value
end
opts
end
|
#parse_memory(memory) ⇒ Integer
287
288
289
290
291
292
293
294
295
296
297
|
# File 'lib/central/cli/services/services_helper.rb', line 287
def parse_memory(memory)
if memory.end_with?('k')
memory.to_i * 1024
elsif memory.end_with?('m')
memory.to_i * 1024 * 1024
elsif memory.end_with?('g')
memory.to_i * 1024 * 1024 * 1024
else
memory.to_i
end
end
|
#parse_ports(port_options) ⇒ Array<Hash>
255
256
257
258
259
260
261
262
263
264
265
266
267
|
# File 'lib/central/cli/services/services_helper.rb', line 255
def parse_ports(port_options)
port_options.map do|p|
node_port, container_port, protocol = p.split(':')
if node_port.nil? || container_port.nil?
fail ArgumentError.new("Invalid port value #{p}")
end
{
container_port: container_port,
node_port: node_port,
protocol: protocol || 'tcp'
}
end
end
|
#parse_relative_time(time) ⇒ Integer, NilClass
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
|
# File 'lib/central/cli/services/services_helper.rb', line 331
def parse_relative_time(time)
if time.end_with?('min')
time.to_i * 60
elsif time.end_with?('h')
time.to_i * 60 * 60
elsif time.end_with?('d')
time.to_i * 60 * 60 * 24
else
time = time.to_i
if time == 0
nil
else
time
end
end
end
|
#parse_secrets(secret_opts) ⇒ Array<Hash>
320
321
322
323
324
325
326
327
|
# File 'lib/central/cli/services/services_helper.rb', line 320
def parse_secrets(secret_opts)
secrets = []
secret_opts.each do |s|
secret, name, type = s.split(':')
secrets << { secret: secret, name: name, type: type }
end
secrets
end
|
#parse_service_id(service_id) ⇒ String
245
246
247
248
249
250
251
|
# File 'lib/central/cli/services/services_helper.rb', line 245
def parse_service_id(service_id)
param = if service_id.to_s.include?('/')
service_id
else
"#{current_stack}/#{service_id}"
end
end
|
#restart_service(token, service_id) ⇒ Object
231
232
233
234
|
# File 'lib/central/cli/services/services_helper.rb', line 231
def restart_service(token, service_id)
param = parse_service_id(service_id)
client(token).post("services/#{param}/restart", {})
end
|
#scale_service(token, service_id, instances) ⇒ Object
29
30
31
32
|
# File 'lib/central/cli/services/services_helper.rb', line 29
def scale_service(token, service_id, instances)
param = parse_service_id(service_id)
client(token).post("services/#{param}/scale", instances: instances)
end
|
#show_service(token, service_id) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
# File 'lib/central/cli/services/services_helper.rb', line 43
def show_service(token, service_id)
service = get_service(token, service_id)
stack = service['id'].split('/')[0]
puts "#{service['id']}:"
puts " status: #{service['state']}"
puts " image: #{service['image']}"
puts " stateful: #{service['stateful'] == true ? 'yes' : 'no'}"
puts " scaling: #{service['container_count']}"
puts " strategy: #{service['strategy']}"
puts ' deploy_opts:'
puts " min_health: #{service['deploy_opts']['min_health']}"
if service['deploy_opts']['wait_for_port']
puts " wait_for_port: #{service['deploy_opts']['wait_for_port']}"
end
if service['deploy_opts']['interval']
puts " interval: #{service['deploy_opts']['interval']}"
end
puts " dns: #{service['name']}.#{stack}.central.local"
if service['affinity'].to_a.size > 0
puts ' affinity: '
service['affinity'].to_a.each do |a|
puts " - #{a}"
end
end
unless service['cmd'].to_s.empty?
if service['cmd']
puts " cmd: #{service['cmd'].join(' ')}"
else
puts ' cmd: '
end
end
if service['hooks'].to_a.size > 0
puts ' hooks: '
service['hooks'].to_a.each do |hook|
puts " - name: #{hook['name']}"
puts " type: #{hook['type']}"
puts " cmd: #{hook['cmd']}"
puts " oneshot: #{hook['oneshot']}"
end
end
if service['secrets'].to_a.size > 0
puts ' secrets: '
service['secrets'].to_a.each do |s|
puts " - secret: #{s['secret']}"
puts " name: #{s['name']}"
puts " type: #{s['type']}"
end
end
if service['env'].to_a.size > 0
puts ' env: '
service['env'].to_a.each do |e|
if e.length > 50
puts " - #{e[0..50]}..."
else
puts " - #{e}"
end
end
end
puts " net: #{service['net']}" unless service['net'].to_s.empty?
if service['ports'].to_a.size > 0
puts ' ports:'
service['ports'].to_a.each do |p|
puts " - #{p['node_port']}:#{p['container_port']}/#{p['protocol']}"
end
end
if service['volumes'].to_a.size > 0
puts ' volumes:'
service['volumes'].to_a.each do |v|
puts " - #{v}"
end
end
if service['volumes_from'].to_a.size > 0
puts ' volumes_from:'
service['volumes_from'].to_a.each do |v|
puts " - #{v}"
end
end
if service['links'].to_a.size > 0
puts ' links: '
service['links'].to_a.each do |l|
puts " - #{l['alias']}"
end
end
if service['cap_add'].to_a.size > 0
puts ' cap_add:'
service['cap_add'].to_a.each do |c|
puts " - #{c}"
end
end
if service['cap_drop'].to_a.size > 0
puts ' cap_drop:'
service['cap_drop'].to_a.each do |c|
puts " - #{c}"
end
end
unless service['log_driver'].to_s.empty?
puts " log_driver: #{service['log_driver']}"
puts ' log_opts:'
service['log_opts'].each do |opt, value|
puts " #{opt}: #{value}"
end
end
unless service['memory'].to_s.empty?
puts " memory: #{int_to_filesize(service['memory'])}"
end
unless service['memory_swap'].to_s.empty?
puts " memory_swap: #{int_to_filesize(service['memory_swap'])}"
end
puts " pid: #{service['pid']}" unless service['pid'].to_s.empty?
puts ' instances:'
result = client(token).get("services/#{parse_service_id(service_id)}/containers")
result['containers'].each do |container|
puts " #{container['name']}:"
puts " rev: #{container['deploy_rev']}"
puts " node: #{begin
container['node']['name']
rescue
'unknown'
end}"
puts " dns: #{container['name']}.#{stack}.central.local"
puts " ip: #{container['overlay_cidr'].to_s.split('/')[0]}"
puts " public ip: #{begin
container['node']['public_ip']
rescue
'unknown'
end}"
if container['status'] == 'unknown'
puts " status: #{container['status'].colorize(:yellow)}"
else
puts " status: #{container['status']}"
end
if container['state']['error'] && container['state']['error'] != ''
puts " reason: #{container['state']['error']}"
end
end
end
|
#start_service(token, service_id) ⇒ Object
217
218
219
220
|
# File 'lib/central/cli/services/services_helper.rb', line 217
def start_service(token, service_id)
param = parse_service_id(service_id)
client(token).post("services/#{param}/start", {})
end
|
#stop_service(token, service_id) ⇒ Object
224
225
226
227
|
# File 'lib/central/cli/services/services_helper.rb', line 224
def stop_service(token, service_id)
param = parse_service_id(service_id)
client(token).post("services/#{param}/stop", {})
end
|
#update_service(token, service_id, data) ⇒ Object
21
22
23
24
|
# File 'lib/central/cli/services/services_helper.rb', line 21
def update_service(token, service_id, data)
param = parse_service_id(service_id)
client(token).put("services/#{param}", data)
end
|
#wait_for_deploy_to_finish(token, name) ⇒ Object
207
208
209
210
211
212
213
|
# File 'lib/central/cli/services/services_helper.rb', line 207
def wait_for_deploy_to_finish(token, name)
ShellSpinner ' ' do
until client(token).get("services/#{name}")['state'] != 'deploying'
sleep 1
end
end
end
|