app42 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +90 -58
- data/lib/app42/base/constants.rb +0 -1
- data/lib/app42/base/help.rb +271 -54
- data/lib/app42/base/message.rb +2 -0
- data/lib/app42/base/shell.rb +9 -1
- data/lib/app42/base/util.rb +97 -6
- data/lib/app42/client/app42_rest_client.rb +0 -8
- data/lib/app42/command/app.rb +47 -34
- data/lib/app42/command/authorize.rb +1 -1
- data/lib/app42/command/base.rb +208 -30
- data/lib/app42/command/client.rb +23 -2
- data/lib/app42/command/config.rb +14 -0
- data/lib/app42/command/info.rb +1 -1
- data/lib/app42/command/service.rb +23 -2
- data/lib/app42/command/setup.rb +89 -0
- data/lib/app42/version.rb +1 -1
- data/spec/app42/base/constants_spec.rb +1 -1
- data/spec/app42/command/app_spec.rb +4 -4
- data/spec/app42/command/info_spec.rb +5 -5
- data/spec/app42/command/service_spec.rb +4 -4
- metadata +2 -2
- data/TODO.txt +0 -36
data/lib/app42/command/base.rb
CHANGED
@@ -33,6 +33,17 @@ module App42
|
|
33
33
|
app_name = get_app_name
|
34
34
|
available = app_url_availability app_name
|
35
35
|
return available if available
|
36
|
+
end
|
37
|
+
|
38
|
+
# collect setup name from user
|
39
|
+
# if setup name will not available
|
40
|
+
# User can try 3 more times with different setup name
|
41
|
+
def get_setup_name_and_check_setup_url_availability
|
42
|
+
@aa_retry ||= 1
|
43
|
+
exit! if (@aa_retry += 1 ) >= 5
|
44
|
+
setup_name = get_setup_name
|
45
|
+
available = setup_url_availability setup_name
|
46
|
+
return available if available
|
36
47
|
end
|
37
48
|
|
38
49
|
# get supported virtual machine type by app42paas
|
@@ -68,6 +79,14 @@ module App42
|
|
68
79
|
valid_app_name ? (return valid_app_name) : get_app_name
|
69
80
|
end
|
70
81
|
|
82
|
+
# Ask setup name from user and
|
83
|
+
# will wait for user response (user will enter setup name)
|
84
|
+
def get_setup_name(prompt = Paint['Enter Setup Name', :cyan])
|
85
|
+
setup_name = ask(prompt) {|q| q.each = true}
|
86
|
+
valid_setup_name = validate_setup_name "Setup name", setup_name.strip
|
87
|
+
valid_setup_name ? (return valid_setup_name) : get_setup_name
|
88
|
+
end
|
89
|
+
|
71
90
|
# get supported runtime by app42paas
|
72
91
|
def get_runtime
|
73
92
|
runtime_hash = {}
|
@@ -142,16 +161,10 @@ module App42
|
|
142
161
|
end
|
143
162
|
|
144
163
|
# get supported vm configuration by app42paas
|
145
|
-
def get_vmconfig
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
vmconfig['vmconfig'].select {|each_vmcf| vmconfig_hash["#{each_vmcf['id']}"] = each_vmcf['memory'] + ' ' + each_vmcf['memoryUnit']}
|
150
|
-
vm_cf = input "Memory Limit", vmconfig_hash.values, true
|
151
|
-
|
152
|
-
vm_cf_id = nil
|
153
|
-
vmconfig_hash.each_pair{|vmcf| vm_cf_id = vmcf[0] if vmcf[1] == vm_cf}
|
154
|
-
return vm_cf_id
|
164
|
+
def get_vmconfig
|
165
|
+
kontena = input "Specify Kontena Power", [], true
|
166
|
+
valid = validate_vm_config kontena
|
167
|
+
valid ? (return valid) : get_vmconfig
|
155
168
|
end
|
156
169
|
|
157
170
|
# collect type of application source supported by app42paas
|
@@ -198,6 +211,25 @@ module App42
|
|
198
211
|
|
199
212
|
end
|
200
213
|
|
214
|
+
# check setup name availabilities
|
215
|
+
def setup_url_availability setup_name
|
216
|
+
query_params = params
|
217
|
+
query_params.store('setupName', setup_name)
|
218
|
+
|
219
|
+
response = with_progress(Paint["Checking Setup Name Availability", :yellow]) do |s|
|
220
|
+
build_get_request query_params, 'setup', 'availability'
|
221
|
+
end
|
222
|
+
|
223
|
+
if response["success"]
|
224
|
+
print_new_line
|
225
|
+
return setup_name
|
226
|
+
else
|
227
|
+
message "#{response['description']}", true, 'red'
|
228
|
+
get_setup_name_and_check_setup_url_availability
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
201
233
|
# check service availabilities
|
202
234
|
def service_name_availability service_name
|
203
235
|
query_params = params
|
@@ -217,17 +249,17 @@ module App42
|
|
217
249
|
end
|
218
250
|
|
219
251
|
# infrastructure setup call
|
220
|
-
def create_infrastructure app_name, iaas, vm_type, runtime, framework, webserver, os,
|
252
|
+
def create_infrastructure app_name, iaas, vm_type, runtime, framework, webserver, os, kontena
|
221
253
|
begin
|
222
254
|
body = {'app42' => {"request"=> {
|
223
|
-
"appName"
|
224
|
-
"iaas"
|
225
|
-
"vmType"
|
226
|
-
"runtime"
|
227
|
-
"framework"
|
228
|
-
"webServer"
|
229
|
-
"os"
|
230
|
-
"
|
255
|
+
"appName" => app_name,
|
256
|
+
"iaas" => iaas,
|
257
|
+
"vmType" => vm_type,
|
258
|
+
"runtime" => runtime,
|
259
|
+
"framework" => framework,
|
260
|
+
"webServer" => webserver,
|
261
|
+
"os" => os,
|
262
|
+
"kontenaPower" => kontena
|
231
263
|
}}}.to_json
|
232
264
|
|
233
265
|
query_params = params
|
@@ -259,6 +291,47 @@ module App42
|
|
259
291
|
end
|
260
292
|
end
|
261
293
|
|
294
|
+
# setup cloud API
|
295
|
+
def create_cloud_setup setup_name, iaas, vm_type, setup_type, flavour
|
296
|
+
begin
|
297
|
+
body = {'app42' => {"request"=> {
|
298
|
+
"setupName" => setup_name,
|
299
|
+
"iaas" => iaas,
|
300
|
+
"vmType" => vm_type,
|
301
|
+
"setupType" => setup_type,
|
302
|
+
"flavour" => flavour
|
303
|
+
}}}.to_json
|
304
|
+
|
305
|
+
query_params = params
|
306
|
+
query_params.store('body', body)
|
307
|
+
|
308
|
+
response = with_progress(Paint["Setting up the infrastructure", :yellow]) do |s|
|
309
|
+
build_post_request body, query_params, 'setup', nil
|
310
|
+
end
|
311
|
+
|
312
|
+
if response["success"] == true && response["transactionId"]
|
313
|
+
transaction_success = check_transaction_status_of_setup response["transactionId"], previous_completed = 0, 'created'
|
314
|
+
end
|
315
|
+
|
316
|
+
if transaction_success
|
317
|
+
transaction_params = params
|
318
|
+
transaction_params.store('setupName', setup_name)
|
319
|
+
host_response = build_get_request transaction_params, "setup", "#{setup_name}"
|
320
|
+
end
|
321
|
+
|
322
|
+
if host_response['success']
|
323
|
+
puts Paint["Your setup has been completed successfully, For details, Login you your AppHQ console.", :green]
|
324
|
+
return true
|
325
|
+
else
|
326
|
+
puts Paint["#{response['description']}", :red]
|
327
|
+
end
|
328
|
+
rescue Interrupt
|
329
|
+
puts Paint[" Command cancelled.", :red]
|
330
|
+
exit!
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
|
262
335
|
# Binary upload call
|
263
336
|
def upload_binary app_name, app_source, source_url
|
264
337
|
@code_flag ||= 1
|
@@ -268,21 +341,21 @@ module App42
|
|
268
341
|
query_params.store('appName', app_name)
|
269
342
|
message "#{Message::WAIT_FOR_WHILE}", true, 'green'
|
270
343
|
response = with_progress(Paint["Deploying Application", :yellow]) do |s|
|
271
|
-
@connection.multipart(signature(query_params), resource_url("app", "binary"), query_params, query_params, source_url)
|
344
|
+
@connection.multipart(signature(query_params), resource_url("app/deploy", "binary"), query_params, query_params, source_url)
|
272
345
|
end
|
273
346
|
else
|
274
347
|
body = {'app42' => {"request"=> {
|
275
348
|
"appName" => app_name,
|
276
|
-
"
|
349
|
+
"sourceType" => app_source,
|
277
350
|
"sourceUrl" => source_url,
|
278
351
|
}}}.to_json
|
279
|
-
|
352
|
+
|
280
353
|
query_params = params
|
281
354
|
query_params.store('body', body)
|
282
355
|
|
283
356
|
|
284
357
|
response = with_progress(Paint["Deploying Application", :yellow]) do |s|
|
285
|
-
build_put_request body, query_params, 'app', 'source'
|
358
|
+
build_put_request body, query_params, 'app/deploy', 'source'
|
286
359
|
end
|
287
360
|
end
|
288
361
|
|
@@ -306,6 +379,41 @@ module App42
|
|
306
379
|
return response
|
307
380
|
end
|
308
381
|
|
382
|
+
# Binary update call
|
383
|
+
def update_binary app_name
|
384
|
+
@code_flag ||= 1
|
385
|
+
begin
|
386
|
+
body = {'app42' => {"request"=> {
|
387
|
+
"appName" => app_name
|
388
|
+
}}}.to_json
|
389
|
+
|
390
|
+
query_params = params
|
391
|
+
query_params.store('body', body)
|
392
|
+
|
393
|
+
|
394
|
+
response = with_progress(Paint["Updating Application", :yellow]) do |s|
|
395
|
+
build_put_request body, query_params, 'app/update', 'source'
|
396
|
+
end
|
397
|
+
if response["success"] == true && response["transactionId"]
|
398
|
+
check_transaction_status response["transactionId"], previous_completed = 0, 'Uploaded'
|
399
|
+
end
|
400
|
+
|
401
|
+
if response['success']
|
402
|
+
exit!
|
403
|
+
else
|
404
|
+
puts Paint["#{response['description']}", :red]
|
405
|
+
exit 1 if ( @code_flag += 1 ) > 3
|
406
|
+
get_binary_url app_name
|
407
|
+
end
|
408
|
+
rescue Interrupt
|
409
|
+
puts Paint[" Command cancelled.", :red]
|
410
|
+
exit!
|
411
|
+
rescue Exception => e
|
412
|
+
puts e
|
413
|
+
end
|
414
|
+
return response
|
415
|
+
end
|
416
|
+
|
309
417
|
# It's common methods of app information like app state, info etc.
|
310
418
|
# methods expect +what+ as operation and +app_name+ as Application name
|
311
419
|
def app_information what, app_name
|
@@ -421,14 +529,14 @@ module App42
|
|
421
529
|
# ==== return
|
422
530
|
# will display service details in tabular form and
|
423
531
|
# will exist console
|
424
|
-
def create_service service, service_name ,database, vm_type, iaas,
|
532
|
+
def create_service service, service_name ,database, vm_type, iaas, kontena, os
|
425
533
|
body = {'app42' => {"request"=> {
|
426
|
-
"service"
|
427
|
-
"serviceName"
|
428
|
-
"vmType"
|
429
|
-
"database"
|
430
|
-
"iaas"
|
431
|
-
"
|
534
|
+
"service" => service,
|
535
|
+
"serviceName" => service_name,
|
536
|
+
"vmType" => vm_type,
|
537
|
+
"database" => database,
|
538
|
+
"iaas" => iaas,
|
539
|
+
"kontenaPower" => kontena,
|
432
540
|
"os" => os
|
433
541
|
}}}.to_json
|
434
542
|
|
@@ -498,6 +606,34 @@ module App42
|
|
498
606
|
end
|
499
607
|
end
|
500
608
|
|
609
|
+
# delete setup cloud API, as a
|
610
|
+
#
|
611
|
+
# ==== Parameters
|
612
|
+
# setup_name = setup_name provided by user
|
613
|
+
#
|
614
|
+
# ==== return
|
615
|
+
# true:: if cloud setup deleted
|
616
|
+
# OR
|
617
|
+
# ERROR message in case failed
|
618
|
+
def delete_clouldapi setup_name
|
619
|
+
begin
|
620
|
+
response = with_progress(Paint["Deleting Clould API", :yellow]) do |s|
|
621
|
+
query_params = params
|
622
|
+
query_params.store('setupName', setup_name)
|
623
|
+
build_delete_request query_params, "setup", "#{setup_name}"
|
624
|
+
end
|
625
|
+
|
626
|
+
transaction_success = check_transaction_status response["transactionId"], previous_completed = 0, 'deleted' if response["success"] == true && response["transactionId"]
|
627
|
+
|
628
|
+
response['success'] ? (return true) : (message "#{response['description']}", true, 'red')
|
629
|
+
rescue Interrupt
|
630
|
+
puts Paint[" Command cancelled.", :red]
|
631
|
+
exit!
|
632
|
+
rescue Exception => e
|
633
|
+
puts e
|
634
|
+
end
|
635
|
+
end
|
636
|
+
|
501
637
|
# reset service password and fetch service latest details
|
502
638
|
#
|
503
639
|
# ==== Parameters
|
@@ -542,6 +678,48 @@ module App42
|
|
542
678
|
end
|
543
679
|
end
|
544
680
|
|
681
|
+
|
682
|
+
# All application operation will take placed like app start, stop etc.
|
683
|
+
# expect +what+ as operation and +app_name+ as application name.
|
684
|
+
def service_operation what, service_name
|
685
|
+
begin
|
686
|
+
if what.to_s == 'stop'
|
687
|
+
response = with_progress(Paint[ "Stopping Service #{service_name}", :yellow]) do |s|
|
688
|
+
body = {'app42' => {"request"=> {
|
689
|
+
"serviceName" => service_name
|
690
|
+
}}}.to_json
|
691
|
+
|
692
|
+
query_params = params
|
693
|
+
query_params.store('body', body)
|
694
|
+
build_put_request body, query_params, "service", "#{what}" if what.to_s == 'stop'
|
695
|
+
end
|
696
|
+
else
|
697
|
+
response = with_progress(Paint["#{what.capitalize}ing Service #{service_name}", :yellow]) do |s|
|
698
|
+
body = {'app42' => {"request"=> {
|
699
|
+
"serviceName" => service_name
|
700
|
+
}}}.to_json
|
701
|
+
|
702
|
+
query_params = params
|
703
|
+
query_params.store('body', body)
|
704
|
+
build_put_request body, query_params, "service", "#{what}" if what.to_s == 'restart' || what.to_s == 'start'
|
705
|
+
end
|
706
|
+
end
|
707
|
+
|
708
|
+
if response["success"] == true && response["transactionId"]
|
709
|
+
if what.to_s == 'stop'
|
710
|
+
check_transaction_status response["transactionId"], previous_completed = 0, "#{what}ped"
|
711
|
+
else
|
712
|
+
check_transaction_status response["transactionId"], previous_completed = 0, "#{what}ed"
|
713
|
+
end
|
714
|
+
end
|
715
|
+
|
716
|
+
response['success'] ? (return true) : (message "#{response['description']}", true, 'red')
|
717
|
+
rescue Interrupt
|
718
|
+
puts Paint[" Command cancelled.", :red]
|
719
|
+
exit!
|
720
|
+
end
|
721
|
+
end
|
722
|
+
|
545
723
|
# Bind service to requested source IP and fetch service latest details
|
546
724
|
#
|
547
725
|
# ==== Parameters
|
data/lib/app42/command/client.rb
CHANGED
@@ -127,7 +127,7 @@ module App42
|
|
127
127
|
set_cmd(:app, :setup_infra)
|
128
128
|
|
129
129
|
when 'update'
|
130
|
-
set_cmd(:app, :
|
130
|
+
set_cmd(:app, :update)
|
131
131
|
|
132
132
|
when 'keys'
|
133
133
|
set_cmd(:user, :keys)
|
@@ -201,6 +201,15 @@ module App42
|
|
201
201
|
when 'deleteservice'
|
202
202
|
set_cmd(:service, :delete)
|
203
203
|
|
204
|
+
when 'startservice'
|
205
|
+
set_cmd(:service, :start)
|
206
|
+
|
207
|
+
when 'restartservice'
|
208
|
+
set_cmd(:service, :restart)
|
209
|
+
|
210
|
+
when 'stopservice'
|
211
|
+
set_cmd(:service, :stop)
|
212
|
+
|
204
213
|
when 'resetservicepassword'
|
205
214
|
set_cmd(:service, :reset_pass)
|
206
215
|
|
@@ -211,7 +220,19 @@ module App42
|
|
211
220
|
set_cmd(:service, :service_unbind)
|
212
221
|
|
213
222
|
when 'bindinfo'
|
214
|
-
set_cmd(:service, :service_bindInfo)
|
223
|
+
set_cmd(:service, :service_bindInfo)
|
224
|
+
|
225
|
+
when 'setupcloudapi'
|
226
|
+
set_cmd(:setup, :setup_cloud_api)
|
227
|
+
|
228
|
+
when 'deletecloudapi'
|
229
|
+
set_cmd(:setup, :delete_cloud_api)
|
230
|
+
|
231
|
+
when 'setupinfo'
|
232
|
+
set_cmd(:setup, :info)
|
233
|
+
|
234
|
+
when 'setups'
|
235
|
+
set_cmd(:setup, :setups)
|
215
236
|
|
216
237
|
else
|
217
238
|
puts Paint["app42: Unknown command [#{action}]", :red]
|
data/lib/app42/command/config.rb
CHANGED
@@ -33,6 +33,20 @@ module App42::Command
|
|
33
33
|
build_get_request params, 'info', 'runtimes'
|
34
34
|
end
|
35
35
|
|
36
|
+
#
|
37
|
+
# return list of setup type
|
38
|
+
#
|
39
|
+
def get_setup_type_fm_server
|
40
|
+
build_get_request params, 'info', 'setuptype'
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# return list of flavour
|
45
|
+
#
|
46
|
+
def get_flavour_type_fm_server
|
47
|
+
build_get_request params, 'info', 'flavour'
|
48
|
+
end
|
49
|
+
|
36
50
|
#
|
37
51
|
# return list of templates
|
38
52
|
#
|
data/lib/app42/command/info.rb
CHANGED
@@ -83,9 +83,9 @@ module App42::Command
|
|
83
83
|
|
84
84
|
os = get_os_for_service iaas, vm_type, service
|
85
85
|
|
86
|
-
|
86
|
+
kontena = get_vmconfig
|
87
87
|
|
88
|
-
create_service service, service_name , database, vm_type, iaas,
|
88
|
+
create_service service, service_name , database, vm_type, iaas, kontena, os
|
89
89
|
|
90
90
|
end
|
91
91
|
|
@@ -96,6 +96,27 @@ module App42::Command
|
|
96
96
|
exit! if response
|
97
97
|
end
|
98
98
|
|
99
|
+
# collect service name from user and proceed service start request
|
100
|
+
def start
|
101
|
+
@options[:service] = ask_service_name if @options[:service].nil?
|
102
|
+
response = service_operation __method__, @options[:service] if is_service_exist? @options[:service]
|
103
|
+
exit! if response
|
104
|
+
end
|
105
|
+
|
106
|
+
# collect service name from user and proceed service restart request
|
107
|
+
def restart
|
108
|
+
@options[:service] = ask_service_name if @options[:service].nil?
|
109
|
+
response = service_operation __method__, @options[:service] if is_service_exist? @options[:service]
|
110
|
+
exit! if response
|
111
|
+
end
|
112
|
+
|
113
|
+
# collect service name from user and proceed service stop request
|
114
|
+
def stop
|
115
|
+
@options[:service] = ask_service_name if @options[:service].nil?
|
116
|
+
response = service_operation __method__, @options[:service] if is_service_exist? @options[:service]
|
117
|
+
exit! if response
|
118
|
+
end
|
119
|
+
|
99
120
|
# collect service name from user and proceed service resetPassword request
|
100
121
|
def reset_pass
|
101
122
|
@options[:service] = ask_service_name if @options[:service].nil?
|