app42 0.5.5 → 0.5.6

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.
@@ -17,6 +17,7 @@ module Message
17
17
  LATEST_S_WAIT = "\nOperation is in progress, Please wait..."
18
18
  LATEST_S_INTERRUPT = "\nYour request is being processed. Please check the request status after sometime."
19
19
  NOT_A_VALID_NUM = "Instance(s) count should be a valid number and greater than zero."
20
+ NOT_A_VALID_KONTENA = "Kontena(s) count should be a valid number and greater than zero."
20
21
  REQUEST_PROGRESS = "\nYour request is in progress. Please check the request status after sometime."
21
22
  LOG_MESSAGE = "Please visit below URL(s) to access app logs"
22
23
 
@@ -26,6 +27,7 @@ module Message
26
27
  BIND_NOTE = "Please Provide Source IP\n(For public access, use '0.0.0.0')"
27
28
  UNBIND_NOTE = "Please Provide Source IP"
28
29
  ACCESS_TIME_NOTE = "Please provide the time duration(in hours) you want to bind IP(0 for unlimited access)"
30
+ GIT_URL_NOT_VALID = "App git url is not valid."
29
31
 
30
32
  # REST CLIENT EXCEPTION
31
33
  SERVER_ERROR = "Something went wrong. We will look into the issue. For further information, Please drop a mail to 'support@shephertz.com'."
@@ -7,6 +7,7 @@ module App42
7
7
  'version',
8
8
  'list',
9
9
  'deploy',
10
+ 'update',
10
11
  'setupinfra',
11
12
  'keys',
12
13
  'clearkeys',
@@ -30,10 +31,17 @@ module App42
30
31
  'supportedservices',
31
32
  'activities',
32
33
  'serviceinfo',
34
+ 'startservice',
35
+ 'restartservice',
36
+ 'stopservice',
33
37
  'resetservicepassword',
34
38
  'bindip',
35
39
  'unbindip',
36
- 'bindinfo'
40
+ 'bindinfo',
41
+ 'setupcloudapi',
42
+ 'deletecloudapi',
43
+ 'setupinfo',
44
+ 'setups'
37
45
  ]
38
46
 
39
47
  end
@@ -48,7 +48,7 @@ module App42
48
48
  end
49
49
 
50
50
 
51
- def request_failed?(status)
51
+ def request_failed?(status) #:nodoc:
52
52
  # TODO, if more than one error code
53
53
  # APP42_HTTP_ERROR_CODES.detect{|error_code| status >= error_code}
54
54
  APP42_HTTP_ERROR_CODES.include? status
@@ -60,8 +60,6 @@ module App42
60
60
  desc = body["details"].gsub("\"","'")
61
61
  # TODO, may need later
62
62
  # app42_client_info
63
- # FIXME, should be proper message
64
- # message "#{body["message"]}: #{body["details"]}", true, 'red'
65
63
  message "#{body["details"]}", true, 'red'
66
64
  exit!
67
65
  else
@@ -96,7 +94,7 @@ module App42
96
94
  what.nil? ? (resource_url = "/#{resource}") : (resource_url = "/#{resource}/#{what}")
97
95
  end
98
96
 
99
- # will build signature using requested params and Secret key
97
+ # Generate signature using requested params and Secret key
100
98
  #
101
99
  # @params +requested params+
102
100
  #
@@ -166,6 +164,49 @@ module App42
166
164
  end
167
165
  end
168
166
 
167
+ # checks transaction status of setup cloud API
168
+ #
169
+ #REVIEW, need to verify FAILED use case
170
+ def check_transaction_status_of_setup transaction_id, previous_completed, what
171
+ begin
172
+ flag = false
173
+ message "#{Message::LATEST_S_WAIT}", false, 'green'
174
+ while flag == false do
175
+ response = status_call transaction_id
176
+ re_try ||= 1
177
+
178
+ if response["success"] == true && response["transactionStatus"] == "COMPLETED"
179
+ print_new_line
180
+ message "#{response["message"]}", true, 'green'
181
+ return true
182
+ elsif response["success"] == true && response["transactionStatus"] == "INPROGRESS"
183
+ if previous_completed != response["completed"]
184
+ print_new_line
185
+ puts Paint["#{response["completed"]} out of #{response["requested"]} #{what}", :green]
186
+ previous_completed = response["completed"]
187
+ end
188
+ show_wait_spinner{
189
+ sleep rand(4)+2
190
+ }
191
+ unless what.to_s == 'Uploaded'
192
+ if(re_try += 1 ) >= 250
193
+ message "#{Message::REQUEST_PROGRESS}", true, 'red'
194
+ exit!
195
+ end
196
+ end
197
+ else response["success"] == true && response["transactionStatus"] == "FAILED"
198
+ print_new_line
199
+ message "#{response["message"]}", true, 'red'
200
+ exit!
201
+ end
202
+ sleep 5
203
+ end
204
+ rescue Interrupt
205
+ message "#{Message::LATEST_S_INTERRUPT}", true, 'red'
206
+ exit!
207
+ end
208
+ end
209
+
169
210
  # rest call for transaction status check
170
211
  def status_call transaction_id
171
212
  begin
@@ -244,7 +285,7 @@ module App42
244
285
  end
245
286
 
246
287
  # Check whether +app OR service+ name is valid OR not
247
- # +app OR service+ name lenght should not be more than 30 character
288
+ # +app OR service+ name length should not be more than 30 character
248
289
  # And should not contain any special character
249
290
  def validate_app_and_service_name name, str
250
291
  if str.match(App42::REGEX) || str.length > 30
@@ -255,8 +296,20 @@ module App42
255
296
  end
256
297
  end
257
298
 
299
+ # Check whether +setup+ name is valid OR not
300
+ # +setup+ name length should not be more than 30 character
301
+ # And should not contain any special character
302
+ def validate_setup_name name, str
303
+ if str.match(App42::REGEX) || str.length > 30
304
+ message "#{name} should not contain any special character or white space and length should be less than 30.", true, 'red'
305
+ return false
306
+ else
307
+ return str
308
+ end
309
+ end
310
+
258
311
  # Check whether +database name+ is valid OR not
259
- # +database name+ lenght should not be more than 64 character
312
+ # +database name+ length should not be more than 64 character
260
313
  # And should not contain any special character
261
314
  def validate_database_name name, str
262
315
  if str.match(App42::DBNAME_REGEX) || str.length > 64 || (numeric_including_zero? str)
@@ -270,6 +323,18 @@ module App42
270
323
  end
271
324
  end
272
325
 
326
+ # Check whether +vm config+ is valid OR not
327
+ # +vm config+ should be a valid number
328
+ # And should not contain any special character
329
+ def validate_vm_config kontena
330
+ unless numeric?(kontena)
331
+ message "#{Message::NOT_A_VALID_KONTENA}", true, 'red'
332
+ false
333
+ else
334
+ return kontena
335
+ end
336
+ end
337
+
273
338
  # rest call to server to check whether +application+ exist OR not.
274
339
  # return true if +application+ exist else display ERROR message and exit
275
340
  def is_app_exist? app_name
@@ -301,6 +366,32 @@ module App42
301
366
  exit!
302
367
  end
303
368
  end
369
+
370
+ # rest call to server to check whether +setup name+ exist OR not.
371
+ # return true if +setup name+ exist else display ERROR message and exit
372
+ def is_setup_name_exist? setup_name
373
+ query_params = params
374
+ query_params.store('setupName', setup_name)
375
+
376
+ response = build_get_request query_params, 'setup', 'availability'
377
+ unless response["success"]
378
+ return true
379
+ else
380
+ message "Setup name with the name #{setup_name} does not exist.", true, 'red'
381
+ exit!
382
+ end
383
+ end
384
+
385
+ # Check whether +git URL+ is valid OR not
386
+ # given +git URL+ must end with +.git+ extension
387
+ def validate_git_url git_url
388
+ unless git_url.include?('.git')
389
+ message "#{Message::GIT_URL_NOT_VALID}", true, 'red'
390
+ return false
391
+ else
392
+ return git_url
393
+ end
394
+ end
304
395
 
305
396
  end
306
397
  end
@@ -14,13 +14,11 @@ module App42
14
14
  @exception_msg = nil
15
15
  end
16
16
 
17
- #
18
17
  # @param signature
19
18
  # @param url
20
19
  # @param params
21
20
  # @return
22
21
  # @rescue Exception
23
- #
24
22
  def get(signature, url, params)
25
23
  params.store("signature", signature)
26
24
  resource, json_obj = "", nil
@@ -98,14 +96,12 @@ module App42
98
96
  exit!
99
97
  end
100
98
 
101
- #
102
99
  # @param signature
103
100
  # @param url
104
101
  # @param params
105
102
  # @param bodyPayload
106
103
  # @return
107
104
  # @rescue Exception
108
- #
109
105
  def post(signature, url, params, body)
110
106
  params.store("signature", signature)
111
107
  resource = ""
@@ -181,14 +177,12 @@ module App42
181
177
  exit!
182
178
  end
183
179
 
184
- #
185
180
  # @param signature
186
181
  # @param url
187
182
  # @param params
188
183
  # @param bodyPayload
189
184
  # @return
190
185
  # @rescue Exception
191
- #
192
186
  def put(signature, url, params, body)
193
187
  params.store("signature", signature)
194
188
  resource = ""
@@ -264,13 +258,11 @@ module App42
264
258
  exit!
265
259
  end
266
260
 
267
- #
268
261
  # @param signature
269
262
  # @param url
270
263
  # @param params
271
264
  # @return
272
265
  # @rescue Exception
273
- #
274
266
  def delete(signature, url, params)
275
267
  params.store("signature", signature)
276
268
  resource = ""
@@ -7,7 +7,7 @@ module App42
7
7
  module Command
8
8
  class App < Base
9
9
 
10
- # will collect all required attributes for new VM spawn
10
+ # collect all required attributes for new VM spawn
11
11
  def setup_infra
12
12
  app_name = get_app_name_and_check_app_url_availability
13
13
  vm_type = get_vm_types
@@ -15,37 +15,60 @@ module App42
15
15
  app_name, source_url = get_app_source app_name, iaas, vm_type
16
16
  end
17
17
 
18
- # will collect all required attributes for app deploy
18
+ # collect all required attributes for app deploy
19
19
  def deploy
20
20
  @options[:name] = get_app_name if @options[:name].nil?
21
21
  response = interactive_get 'info', 'app/uploadtypes' if is_app_exist? @options[:name]
22
22
  app_source_type = response['sourceTypes']
23
23
 
24
24
  if response['sourceTypes'].count > 1
25
- # TODO, for future release
26
- # get_git_url
25
+ source_type = ask_app_source response['sourceTypes']
26
+ if source_type == 'Source'
27
+ git_url = get_git_url
28
+ status = upload_binary @options[:name], source_type, git_url if validate_git_url git_url
29
+ else
30
+ status = get_binary_url @options[:name]
31
+ end
27
32
  else
28
33
  status = get_binary_url @options[:name]
29
34
  end
30
35
  exit! if status
31
36
  end
32
37
 
38
+ # collect all required attributes for app update
39
+ def update
40
+ @options[:name] = get_app_name if @options[:name].nil?
41
+ response = interactive_get 'info', 'app/uploadtypes' if is_app_exist? @options[:name]
42
+ app_source_type = response['sourceTypes']
43
+
44
+ if response['sourceTypes'].count > 1
45
+ source_type = ask_app_source response['sourceTypes']
46
+ if source_type == 'Source'
47
+ status = update_binary @options[:name]
48
+ else
49
+ status = get_binary_url @options[:name]
50
+ end
51
+ else
52
+ status = get_binary_url @options[:name]
53
+ end
54
+ exit! if status
55
+ end
56
+
33
57
  # @param app_name
34
- # @return binary
35
- # @return deployment path
58
+ #
59
+ # collect app source type
36
60
  #
61
+ # pass app name, app source and source url to binary upload methods
37
62
  def get_binary_url app_name
38
63
  app_source, source_url = collect_app_source app_name
39
64
  status = upload_binary app_name, app_source, source_url
40
65
  return status
41
66
  end
42
67
 
43
- #
44
68
  # @param app_name
45
69
  # @param iaas
46
70
  # @param vm_type
47
71
  # @return host name
48
- #
49
72
  def collect_vm_details app_name, iaas, vm_type
50
73
  runtime = get_runtime
51
74
  framework = get_framework iaas, vm_type, runtime
@@ -53,16 +76,14 @@ module App42
53
76
  os = get_os_for_app iaas, vm_type, runtime, framework, webserver
54
77
  # FIXME, may be configure out later
55
78
  # instance = get_instance 'new_vm'
56
- vmconfig = get_vmconfig 'info/app',vm_type, iaas
57
- setup_infra_res = App42::Command::Base.new.create_infrastructure app_name, iaas, vm_type, runtime, framework, webserver, os, vmconfig
79
+ kontena = get_vmconfig
80
+ setup_infra_res = App42::Command::Base.new.create_infrastructure app_name, iaas, vm_type, runtime, framework, webserver, os, kontena
58
81
  exit! if setup_infra_res
59
82
  end
60
83
 
61
- #
62
84
  # @param deployment path
63
85
  # @param app_name
64
- # @return true/SystemExit
65
- #
86
+ # @return binary name
66
87
  def is_binary_exist? source_url, app_name
67
88
  path = escape_path(source_url)
68
89
  app_file_name = nil
@@ -80,37 +101,31 @@ module App42
80
101
  return app_file_name
81
102
  end
82
103
 
83
- #
84
104
  # ask existing app url for deploy
85
- #
86
105
  def ask_existing_app_url
87
106
  input "Enter App URL", [], true
88
107
  end
89
108
 
90
109
  # @param app_source_url
110
+ # @return upload type
91
111
  def ask_app_source app_source_type
92
- input "Choose Source Type", app_source_type, true
112
+ input "Choose Upload Type", app_source_type, true
93
113
  end
94
114
 
95
- #
96
115
  # @param binary/git
97
116
  # @return path
98
- #
99
117
  def get_source_path app_source
100
118
  path = ask(Paint["#{app_source.capitalize} Deployment Path", :cyan])
101
119
  return path.strip
102
120
  end
103
121
 
104
- #
105
122
  # collect git URL from user
106
- #
107
- def get_git_url(prompt = Paint["Deployment Path?", :cyan])
123
+ def get_git_url(prompt = Paint["Enter Git URL?", :cyan])
108
124
  ask(prompt) {|q| q.each = true}
109
125
  end
110
126
 
111
- #
112
- # Will scale app by no of instance
113
- #
127
+ # read +app name+ and number of +instance+ from user
128
+ # then scale app by no of instance
114
129
  def scale
115
130
  @options[:name] = get_app_name if @options[:name].nil?
116
131
  @options[:instance] = get_instance __method__ if is_app_exist? @options[:name] and @options[:instance].nil?
@@ -118,9 +133,8 @@ module App42
118
133
  exit! if scale_or_descal_res
119
134
  end
120
135
 
121
- #
122
- # Will descale app by no of instance
123
- #
136
+ # read +app name+ and number of +instance+ from user
137
+ # then descale app by no of instance
124
138
  def descale
125
139
  @options[:name] = get_app_name if @options[:name].nil?
126
140
  @options[:instance] = get_instance __method__ if is_app_exist? @options[:name] and @options[:instance].nil?
@@ -130,7 +144,7 @@ module App42
130
144
 
131
145
  # app42 start
132
146
  #
133
- # will start the app, return true or error code/message
147
+ # start the app, return true or error code/message
134
148
  #
135
149
  def start
136
150
  @options[:name] = get_app_name if @options[:name].nil?
@@ -140,7 +154,7 @@ module App42
140
154
 
141
155
  # app42 stop
142
156
  #
143
- # will stop the app, return true or error code/message
157
+ # stop the app, return true or error code/message
144
158
  #
145
159
  def stop
146
160
  @options[:name] = get_app_name if @options[:name].nil?
@@ -148,9 +162,9 @@ module App42
148
162
  exit! if app_operation_req
149
163
  end
150
164
 
151
- # app42 start
165
+ # app42 restart
152
166
  #
153
- # will restart the app, return true or error code/message
167
+ # restart the app, return true or error code/message
154
168
  #
155
169
  def restart
156
170
  @options[:name] = get_app_name if @options[:name].nil?
@@ -158,8 +172,9 @@ module App42
158
172
  exit! if app_operation_req
159
173
  end
160
174
 
175
+ # app42 delete
161
176
  #
162
- # will delete the app, return true or error code/message
177
+ # delete the app, return true or error code/message
163
178
  #
164
179
  def delete
165
180
  @options[:name] = get_app_name if @options[:name].nil?
@@ -167,9 +182,7 @@ module App42
167
182
  exit! if app_operation_req
168
183
  end
169
184
 
170
- #
171
185
  # List deployed applications
172
- #
173
186
  def apps
174
187
  response = build_get_request params, 'app', nil
175
188
  rows, rows_header_final, rows_header = [], [], nil