pi 0.1.33 → 0.1.34

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.
data/README CHANGED
@@ -59,7 +59,7 @@ Try 'pi help [command]' or 'pi help options' for more information.
59
59
  Currently available pi commands are:
60
60
 
61
61
  User
62
- login [url] [--user,--password] Login
62
+ login [env] [--user,--password] Login
63
63
  logout Logs current user out of the system
64
64
  info List system information
65
65
  user Display user information
@@ -144,16 +144,19 @@ Currently available pi commands are:
144
144
  4. Example
145
145
 
146
146
  wangjing@wangjing-pc:~$ pi login
147
- Attempting login to 'http://staging.samsungcloud.org'? [Yn]:
147
+ 1: www
148
+ 2: staging
149
+ 3: qa
150
+ Select CloudPi Environment [www]: 1
148
151
  User: wangjing
149
152
  Password: *******
150
- Successfully logged into [http://staging.samsungcloud.org]
153
+ Successfully logged into [http://api.samsungcloud.org]
151
154
 
152
- wangjing@wangjing-pc:~$ pi login staging.samsungcloud.org --user wangjing --password cloudpi
153
- Successfully logged into [http://staging.samsungcloud.org]
155
+ wangjing@wangjing-pc:~$ pi login www --user wangjing --password cloudpi
156
+ Successfully logged into [http://api.samsungcloud.org]
154
157
 
155
158
  wangjing@wangjing-pc:~$ pi version
156
- pi 0.1.32
159
+ pi 0.1.34
157
160
 
158
161
  wangjing@wangjing-pc:~$ pi info
159
162
 
@@ -170,7 +173,7 @@ Try 'pi help [command]' or 'pi help options' for more information.
170
173
  Currently available pi commands are:
171
174
 
172
175
  User
173
- login [url] [--user,--password] Login
176
+ login [env] [--user,--password] Login
174
177
  logout Logs current user out of the system
175
178
  info List system information
176
179
  user Display user information
@@ -763,12 +766,6 @@ Successfully logged out of [http://api.staging.samsungcloud.org]
763
766
 
764
767
  5. Common Exception
765
768
 
766
- ubuntu@admin:~$ pi login
767
- Attempting login to 'http://api.staging.samsungcloud.org'? [Yn]: n
768
- Please input URL: http://test.org
769
- Host is not available or is not valid: 'http://test.org'
770
- Problem with login, Cannot access target (getaddrinfo: Name or service not known), try again.
771
-
772
769
  ubuntu@admin:~$ pi github
773
770
  Please input your name: ruanzhimin
774
771
  Please input your email: ruanzhimin@gmail.com
data/lib/cli.rb CHANGED
@@ -11,7 +11,7 @@ module PI
11
11
  autoload :Runner, "#{ROOT}/cli/runner"
12
12
  autoload :ChooseHelper, "#{ROOT}/cli/choose_helper"
13
13
  autoload :InteractHelper, "#{ROOT}/cli/interact_helper"
14
-
14
+
15
15
  module Command
16
16
  autoload :Base, "#{ROOT}/cli/commands/base"
17
17
  autoload :Projects, "#{ROOT}/cli/commands/projects"
@@ -1,7 +1,7 @@
1
1
  require "set"
2
2
  module PI::Cli
3
3
  module ChooseHelper
4
-
4
+
5
5
  YES_SET = Set.new(["y", "Y", "yes", "YES"])
6
6
  NO_SET = Set.new(["n", "N", "no", "NO"])
7
7
  DEFAULTS = {
@@ -13,7 +13,7 @@ module PI::Cli
13
13
  "isDebug" => false,
14
14
  "needMonitor" => false
15
15
  }
16
-
16
+
17
17
  def total_opts
18
18
  all_opts = Hash.new
19
19
  all_opts = {
@@ -40,7 +40,7 @@ module PI::Cli
40
40
  :graceful => @options[:graceful]
41
41
  }
42
42
  end
43
-
43
+
44
44
  def choose_project
45
45
  projects = client.projects
46
46
  err "No Projects" if projects.nil? || projects.empty?
@@ -54,9 +54,9 @@ module PI::Cli
54
54
  display "#{useproject}"
55
55
  projects.each do |p|
56
56
  return p if p[:name] == useproject
57
- end
57
+ end
58
58
  end
59
-
59
+
60
60
  def choose_target
61
61
  targets = client.targets
62
62
  err "No Targets" if targets.nil? || targets.empty?
@@ -70,13 +70,13 @@ module PI::Cli
70
70
  display "#{usetarget}"
71
71
  targets.each do |p|
72
72
  return p if p[:name] == usetarget
73
- end
73
+ end
74
74
  end
75
-
75
+
76
76
  def select_apps
77
77
  choices = ["all","project","target"]
78
- select_type = ask"Select application by", :choices => choices, :indexed => true
79
- display "Select application by #{select_type}"
78
+ select_type = ask"Select application by", :choices => choices, :indexed => true
79
+ display "Select application by #{select_type}"
80
80
  case select_type
81
81
  when "all"
82
82
  app = client.apps
@@ -93,7 +93,7 @@ module PI::Cli
93
93
  end
94
94
  end
95
95
  end
96
-
96
+
97
97
  def choose_app
98
98
  apps = select_apps
99
99
  err "No application!" if apps.nil? || apps.empty?
@@ -107,7 +107,7 @@ module PI::Cli
107
107
  apps.each do |a|
108
108
  if a[:name] == appname
109
109
  flag = true
110
- return a
110
+ return a
111
111
  end
112
112
  end
113
113
  if flag == false
@@ -115,11 +115,11 @@ module PI::Cli
115
115
  next
116
116
  end
117
117
  }
118
-
118
+
119
119
  end
120
-
120
+
121
121
  def choose_app_help(appid_or_appname)
122
- target = @options[:target]
122
+ target = @options[:target]
123
123
  target_not_all = true
124
124
  appid = nil
125
125
  if appid_or_appname =~ /^[1-9]\d*$/
@@ -127,14 +127,14 @@ module PI::Cli
127
127
  app = client.app_get_byid(appid)
128
128
  err"The application is not found!" if app.nil?
129
129
  return target_not_all, app, appid
130
- elsif appid_or_appname == nil
130
+ elsif appid_or_appname == nil
131
131
  if target.nil?
132
132
  app = choose_app
133
133
  return target_not_all, app, appid
134
- else
135
- err "Not enough arguments"
134
+ else
135
+ err "Not enough arguments"
136
136
  end
137
- else
137
+ else
138
138
  appname = appid_or_appname
139
139
  err "Not enough arguments" if target == nil
140
140
  if target != "all"
@@ -147,28 +147,28 @@ module PI::Cli
147
147
  else
148
148
  apps = client.app_search_target_is_all(appname)
149
149
  err "The application '#{appname}' is not found!" if apps.size == 0
150
- target_not_all = false
151
- return target_not_all, apps, appid
150
+ target_not_all = false
151
+ return target_not_all, apps, appid
152
152
  end
153
- end
154
- end
155
-
153
+ end
154
+ end
155
+
156
156
  def choose_app_help_target_not_all(appid_or_appname)
157
- target = @options[:target]
158
- appid = nil
157
+ target = @options[:target]
158
+ appid = nil
159
159
  if appid_or_appname =~ /^[1-9]\d*$/
160
160
  appid = appid_or_appname
161
161
  app = client.app_get_byid(appid)
162
162
  err"The application is not found!" if app.nil?
163
163
  return app, appid
164
- elsif appid_or_appname == nil
164
+ elsif appid_or_appname == nil
165
165
  if target.nil?
166
166
  app = choose_app
167
167
  return app, appid
168
- else
169
- err "Not enough arguments"
168
+ else
169
+ err "Not enough arguments"
170
170
  end
171
- else
171
+ else
172
172
  appname = appid_or_appname
173
173
  err "Not enough arguments" if target == nil
174
174
  # targets = client.targets
@@ -176,10 +176,10 @@ module PI::Cli
176
176
  # err "Invalid target" unless targets.include?(target)
177
177
  app = client.app_search(target, appname)
178
178
  err "The application '#{appname}' is not found!" if app.nil?
179
- return app, appid
180
- end
181
- end
182
-
179
+ return app, appid
180
+ end
181
+ end
182
+
183
183
  def choose_serviceid
184
184
  services = client.services
185
185
  err "No services" if services.nil? || services.empty?
@@ -194,7 +194,7 @@ module PI::Cli
194
194
  end
195
195
  return serviceid
196
196
  end
197
-
197
+
198
198
  def choose_dnsid
199
199
  dns = client.dns
200
200
  err "No DNS" if dns.nil? || dns.empty?
@@ -209,21 +209,21 @@ module PI::Cli
209
209
  end
210
210
  return dnsid
211
211
  end
212
-
212
+
213
213
  def get_graceful(app)
214
214
  graceful = @options[:graceful]
215
215
  graceful = ask "Need graceful?", :default => DEFAULTS["graceful"] unless graceful
216
216
  end
217
-
217
+
218
218
  # def check_status(uuid)
219
- # for i in 1..13 do
219
+ # for i in 1..13 do
220
220
  # result = client.app_message(uuid)
221
- # break result unless result[:text].empty?
222
- # sleep(10)
223
- # end
224
- # return result
221
+ # break result unless result[:text].empty?
222
+ # sleep(10)
223
+ # end
224
+ # return result
225
225
  # end
226
-
226
+
227
227
  def check_status(uuid)
228
228
  result = client.app_message(uuid)
229
229
  if not result[:text].empty?
@@ -233,21 +233,21 @@ module PI::Cli
233
233
  check_status(uuid)
234
234
  end
235
235
  end
236
-
236
+
237
237
  def check_version_name_valid?(version)
238
238
  version.size > 30 ? false : true
239
239
  end
240
-
240
+
241
241
  # only [a-zA-Z0-9] for project name and app name (size <=18)
242
242
  def check_name_valid?(name)
243
243
  (name =~ /^[a-zA-Z0-9]{1,18}$/) ? true : false
244
244
  end
245
245
 
246
- #Env name can't start with 'vcap_', 'VCAP_', 'vmc_' & 'VMC_', and can include 'a-zA-Z`~!@#$%^&*()_+-{}' only. The max length of name is 18
246
+ #Env name can't start with 'vcap_', 'VCAP_', 'vmc_' & 'VMC_', and can include 'a-zA-Z`~!@#$%^&*()_+-{}' only. The max length of name is 18
247
247
  def check_envname_valid?(name)
248
248
  #(name =~ /\b(?!vcap_|vmc_|VCAP_|VMC_)\D+\b/ && name.size <= 18) ? true : false
249
- if name =~ /[0-9]/
250
- display "Digital cannot be included in Env name".red
249
+ unless name =~ /^[a-zA-Z_][[:alnum:]_]*$/
250
+ display "Env name must be started with \"a-zA-Z_\", and can include \"a-zA-Z_0-9\"".red
251
251
  return false
252
252
  end
253
253
  if name =~ /^vcap_/i
@@ -258,22 +258,18 @@ module PI::Cli
258
258
  display "Env name cannot be started with \"vmc_\" or \"VMC_\"".red
259
259
  return false
260
260
  end
261
- # if not name =~ /^[a-zA-Z\`\~\!\@\#\$\%\^\&\*\(\)\_\+\-\{\}]{0,18}$/
262
- # display "the input is illegal!".red
263
- # return false
264
- # end
265
261
  if name.size > 18
266
262
  display "Invalid name length. The max length of name is 18"
267
263
  return false
268
264
  end
269
265
  return true
270
266
  end
271
-
272
- #not include number, ', ", \, and size <= 18
267
+
268
+ #not include number, ', ", \, =,and size <= 18
273
269
  def check_envvalue_valid?(value)
274
270
  #(value =~ /^[^\'\"\\]+$/ && value.size <= 18) ? true : false
275
271
  (value =~ /^[^\'\"\\=]{1,18}$/) ? true : false
276
272
  end
277
-
273
+
278
274
  end
279
275
  end
@@ -14,7 +14,7 @@ module PI::Cli::Command
14
14
  "needMonitor" => false,
15
15
  "probe" => false
16
16
  }
17
-
17
+
18
18
  def apps
19
19
  all_opts = total_opts
20
20
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(projectid|target)/i}
@@ -23,8 +23,8 @@ module PI::Cli::Command
23
23
  end
24
24
  client.check_login_status
25
25
  projectid = @options[:projectid]
26
- target = @options[:target]
27
- projectid = 0 if projectid == "all" || projectid == nil
26
+ target = @options[:target]
27
+ projectid = 0 if projectid == "all" || projectid == nil
28
28
  target = nil if target == "all"
29
29
  app_sum = client.app_sum(projectid, target)
30
30
  total_app = Integer(app_sum[1])
@@ -32,34 +32,34 @@ module PI::Cli::Command
32
32
  pageNum = -1
33
33
  numPerPage = -1
34
34
  if total_app >= 50
35
- puts "Total applications: #{total_app}."
36
- numPerPage = nil
35
+ puts "Total applications: #{total_app}."
36
+ numPerPage = nil
37
37
  loop{
38
38
  numPerPage = ask "Number per page"
39
39
  if not numPerPage =~ /^[1-9]\d*$/
40
- display "Invalid Number! Please input number from 1 to #{total_app}".red
40
+ display "Invalid Number! Please input number from 1 to #{total_app}".red
41
41
  numPerPage =nil
42
42
  next
43
43
  else
44
44
  break
45
45
  end
46
- }
46
+ }
47
47
  numPerPage = numPerPage.to_i
48
48
  maxpage = (total_app.to_f/numPerPage).ceil
49
49
  loop{
50
50
  pageNum = ask "Page number"
51
51
  if not pageNum =~ /^[1-9]\d*$/
52
- display "Invalid Number! Please input number from 1 to #{maxpage}".red
52
+ display "Invalid Number! Please input number from 1 to #{maxpage}".red
53
53
  pageNum =nil
54
54
  next
55
55
  else
56
56
  break
57
57
  end
58
- }
59
- pageNum = pageNum.to_i
60
- end
58
+ }
59
+ pageNum = pageNum.to_i
60
+ end
61
61
  apps = client.apps(projectid, target, pageNum, numPerPage)
62
- return display "No Applications" if apps.nil? || apps.empty?
62
+ return display "No Applications" if apps.nil? || apps.empty?
63
63
  return display JSON.pretty_generate(apps) if @options[:json]
64
64
  apps.sort! {|a, b| a[:name] <=> b[:name] }
65
65
  apps_table = table do |t|
@@ -78,42 +78,42 @@ module PI::Cli::Command
78
78
  end
79
79
  client.check_login_status
80
80
  binarylist, deployType, instances = nil, nil, nil
81
-
82
- if appname
81
+
82
+ if appname
83
83
  if not check_name_valid?(appname)
84
- err "Invalid application name '#{appname}'."
84
+ err "Invalid application name '#{appname}'."
85
85
  end
86
86
  end
87
-
87
+
88
88
  # choose the target
89
- targets = client.targets
89
+ targets = client.targets
90
90
  err "No Targets!" if targets.nil? || targets.empty?
91
91
  target = ask "Select Target", :choices => targets.collect { |t| t[:name] }, :indexed => true
92
92
  display "Selected Target: ",false
93
93
  display "#{target}"
94
94
  target_memory = client.target_memory(target)
95
-
96
- loop{
95
+
96
+ loop{
97
97
  appname = ask "Application Name" unless appname
98
98
  if not check_name_valid?(appname)
99
- display "Invalid application name '#{appname}'.".red
99
+ display "Invalid application name '#{appname}'.".red
100
100
  appname =nil
101
101
  next
102
- else if app_exists?(target, appname)
103
- display "Application '#{appname}' already exists.".red
104
- appname =nil
105
- next
106
- else
102
+ else if app_exists?(target, appname)
103
+ display "Application '#{appname}' already exists.".red
104
+ appname =nil
105
+ next
106
+ else
107
107
  break
108
108
  end
109
109
  end
110
- }
111
-
110
+ }
111
+
112
112
  # choose the project
113
113
  useproject = choose_project
114
114
  projectname = useproject[:name]
115
115
  projectid = useproject[:id]
116
-
116
+
117
117
  # choose the tag
118
118
  if useproject[:runtime] =~ /^(ruby)/i
119
119
  deployType = "git"
@@ -134,42 +134,42 @@ module PI::Cli::Command
134
134
  tag = ""
135
135
  else
136
136
  err "Invalid Input"
137
- end
137
+ end
138
138
  else
139
139
  deployType = "binary"
140
140
  binarylist = client.project_binary(projectid)
141
141
  err "No version!" if binarylist.nil? || binarylist.empty?
142
142
  tag = ask "Select Version", :choices => binarylist.collect { |b| b[:versionName] }, :indexed => true
143
143
  display "Selected Version: ",false
144
- display "#{tag}"
145
- end
144
+ display "#{tag}"
145
+ end
146
146
  # URL combination
147
147
  user = client.user_info
148
148
  url = "#{appname}.#{user[:userName]}.#{target}.samsungpaas.com"
149
- display "URL: #{url}"
149
+ display "URL: #{url}"
150
150
  # choose the mem
151
151
  mem = ask "Memory reservation", :default => DEFAULTS["mem"], :choices => ["64M", "128M", "256M", "512M", "1G", "2G"]
152
152
  # Set to MB number
153
153
  mem_quota = mem_choice_to_quota(mem)
154
-
154
+
155
155
  target_memory = Integer(target_memory[1])
156
156
  max_instance = (target_memory.to_f/mem.to_i).floor
157
157
  display ("Available memory: #{target_memory} M, maximum instances: #{max_instance}")
158
158
  loop{
159
159
  instances = ask "How many instances(from 1 to #{max_instance})?", :default => DEFAULTS["instances"]
160
160
  if not instances.to_s =~ /^[1-9]\d*$/
161
- display "Invalid Number!".red
162
- instances =nil
163
- next
161
+ display "Invalid Number!".red
162
+ instances =nil
163
+ next
164
164
  else if instances < 1 || instances > max_instance
165
- display "Invalid Number! Please input number from 1 to #{max_instance}".red
166
- instances =nil
167
- next
165
+ display "Invalid Number! Please input number from 1 to #{max_instance}".red
166
+ instances =nil
167
+ next
168
168
  else
169
169
  break
170
170
  end
171
171
  end
172
- }
172
+ }
173
173
  isDebug = false
174
174
  isDebug = ask "Need debug?", :default => DEFAULTS["isDebug"] if deployType == "binary"
175
175
  isDebug = (isDebug == false ? "no" : "yes")
@@ -178,9 +178,9 @@ module PI::Cli::Command
178
178
  probe = false
179
179
  probe = ask "Need JMX monitoring?", :default => DEFAULTS["probe"] if deployType == "binary"
180
180
  probe = (probe == false ? "no" : "yes")
181
- # needMonitor = ask "Need monitor?", :default => DEFAULTS["needMonitor"]
181
+ # needMonitor = ask "Need monitor?", :default => DEFAULTS["needMonitor"]
182
182
  # needMonitor = (needMonitor == false ? "no" : "yes")
183
-
183
+
184
184
  manifest = {
185
185
  :targetName => target,
186
186
  :name => "#{appname}",
@@ -197,23 +197,23 @@ module PI::Cli::Command
197
197
  :needMonitor => "no",
198
198
  :probe => probe
199
199
  }
200
-
200
+
201
201
  display "Creating application \"#{appname}\": ",false
202
-
203
- t = Thread.new do
202
+
203
+ t = Thread.new do
204
204
  loop do
205
- display '.', false
205
+ display '.', false
206
206
  sleep (1)
207
207
  break unless t.alive?
208
208
  end
209
209
  end
210
-
210
+
211
211
  tmp = client.create_app(manifest)
212
212
  uuid = tmp[1]
213
213
  result = check_status(uuid)
214
214
  Thread.kill(t)
215
215
  end
216
-
216
+
217
217
  def delete_app(appid_or_appname=nil)
218
218
  all_opts = total_opts
219
219
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target)/i}
@@ -221,64 +221,64 @@ module PI::Cli::Command
221
221
  err "Invalid options" if value != nil
222
222
  end
223
223
  client.check_login_status
224
- app, appid = choose_app_help_target_not_all(appid_or_appname)
224
+ app, appid = choose_app_help_target_not_all(appid_or_appname)
225
225
  appid = (appid == nil ? app[:id] : appid)
226
-
226
+
227
227
  display "Deleting application: ",false
228
-
229
- t = Thread.new do
228
+
229
+ t = Thread.new do
230
230
  loop do
231
- display '.', false
231
+ display '.', false
232
232
  sleep (1)
233
233
  break unless t.alive?
234
234
  end
235
235
  end
236
-
236
+
237
237
  client.delete_app(appid)
238
238
  Thread.kill(t)
239
239
  display "OK".green
240
240
  end
241
-
241
+
242
242
  def start_app(appid_or_appname=nil)
243
243
  all_opts = total_opts
244
244
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target)/i}
245
245
  all_opts_except_valid_opts.each_value do |value|
246
246
  err "Invalid options" if value != nil
247
247
  end
248
- client.check_login_status
249
- target_not_all, app, appid = choose_app_help(appid_or_appname)
248
+ client.check_login_status
249
+ target_not_all, app, appid = choose_app_help(appid_or_appname)
250
250
  if target_not_all
251
251
  appid = (appid == nil ? app[:id] : appid)
252
- return display "The application '#{app[:name]}'(target:#{app[:targetName]}) has already started.".yellow if app[:status] == "STARTED"
253
- do_start_app(app, appid)
252
+ return display "The application '#{app[:name]}'(target:#{app[:targetName]}) has already started.".yellow if app[:status] == "STARTED"
253
+ do_start_app(app, appid)
254
254
  else
255
255
  app.each do |a|
256
- next display "The application '#{a[:name]}'(target:#{a[:targetName]}) has already started.".yellow if a[:status] == "STARTED"
256
+ next display "The application '#{a[:name]}'(target:#{a[:targetName]}) has already started.".yellow if a[:status] == "STARTED"
257
257
  do_start_app(a, a[:id])
258
258
  end
259
259
  end
260
260
  end
261
-
261
+
262
262
  def stop_app(appid_or_appname=nil)
263
263
  all_opts = total_opts
264
264
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|graceful)/i}
265
265
  all_opts_except_valid_opts.each_value do |value|
266
266
  err "Invalid options" if value != nil
267
267
  end
268
- client.check_login_status
269
- target_not_all, app, appid = choose_app_help(appid_or_appname)
268
+ client.check_login_status
269
+ target_not_all, app, appid = choose_app_help(appid_or_appname)
270
270
  if target_not_all
271
- appid = (appid == nil ? app[:id] : appid)
272
- # return display "The application '#{app[:name]}'(target:#{app[:targetName]}) has already stopped.".yellow if app[:status] == "STOPPED"
273
- do_stop_app(app, appid)
271
+ appid = (appid == nil ? app[:id] : appid)
272
+ # return display "The application '#{app[:name]}'(target:#{app[:targetName]}) has already stopped.".yellow if app[:status] == "STOPPED"
273
+ do_stop_app(app, appid)
274
274
  else
275
275
  app.each do |a|
276
- next display "The application '#{a[:name]}'(target:#{a[:targetName]}) has already stopped.".yellow if a[:status] == "STOPPED"
276
+ next display "The application '#{a[:name]}'(target:#{a[:targetName]}) has already stopped.".yellow if a[:status] == "STOPPED"
277
277
  do_stop_app(a, a[:id])
278
278
  end
279
279
  end
280
280
  end
281
-
281
+
282
282
  def restart_app(appid_or_appname=nil)
283
283
  all_opts = total_opts
284
284
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|graceful)/i}
@@ -286,17 +286,17 @@ module PI::Cli::Command
286
286
  err "Invalid options" if value != nil
287
287
  end
288
288
  client.check_login_status
289
- target_not_all, app, appid = choose_app_help(appid_or_appname)
290
- if target_not_all
291
- appid = (appid == nil ? app[:id] : appid)
292
- do_restart_app(app, appid)
289
+ target_not_all, app, appid = choose_app_help(appid_or_appname)
290
+ if target_not_all
291
+ appid = (appid == nil ? app[:id] : appid)
292
+ do_restart_app(app, appid)
293
293
  else
294
294
  app.each do |a|
295
295
  do_restart_app(a, a[:id])
296
296
  end
297
297
  end
298
298
  end
299
-
299
+
300
300
  def scale_app(appid_or_appname=nil)
301
301
  all_opts = total_opts
302
302
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|instance)/i}
@@ -304,46 +304,46 @@ module PI::Cli::Command
304
304
  err "Invalid options" if value != nil
305
305
  end
306
306
  client.check_login_status
307
- instance = @options[:instance]
308
- app, appid = choose_app_help_target_not_all(appid_or_appname)
309
- appid = (appid == nil ? app[:id] : appid)
307
+ instance = @options[:instance]
308
+ app, appid = choose_app_help_target_not_all(appid_or_appname)
309
+ appid = (appid == nil ? app[:id] : appid)
310
310
  target_memory = client.target_memory(app[:targetName])
311
311
  target_memory = Integer(target_memory[1])
312
312
  max_instance = (target_memory.to_f/app[:memory].to_i).floor
313
- display ("Available memory: #{target_memory} M, maximum instances: #{max_instance}")
314
- loop{
315
- instance = ask "Current instance: #{app[:instances]}, Instance number" unless instance
313
+ display ("Available memory: #{target_memory} M, maximum instances: #{max_instance}")
314
+ loop{
315
+ instance = ask "Current instance: #{app[:instances]}, instance number" unless instance
316
316
  if not instance.to_s =~ /^[1-9]\d*$/
317
- display "Invalid Number!".red
318
- instance =nil
317
+ display "Invalid Number!".red
318
+ instance =nil
319
319
  next
320
320
  else if instance.to_i < 1 || instance.to_i > max_instance
321
- display "Invalid Number! Please input number from 1 to #{max_instance}".red
322
- instance =nil
321
+ display "Invalid Number! Please input number from 1 to #{max_instance}".red
322
+ instance =nil
323
323
  next
324
324
  else
325
325
  break
326
326
  end
327
327
  end
328
- }
328
+ }
329
329
  err "Don't need scale application" if instance.to_s == app[:instances].to_s
330
- # graceful = get_graceful(app)
330
+ # graceful = get_graceful(app)
331
331
  display "Scaling application: ",false
332
-
333
- t = Thread.new do
332
+
333
+ t = Thread.new do
334
334
  loop do
335
- display '.', false
335
+ display '.', false
336
336
  sleep (1)
337
337
  break unless t.alive?
338
338
  end
339
339
  end
340
-
340
+
341
341
  tmp = client.scale_app(appid, instance)
342
342
  uuid = tmp[1]
343
343
  result = check_status(uuid)
344
- Thread.kill(t)
344
+ Thread.kill(t)
345
345
  end
346
-
346
+
347
347
  def update_app(appid_or_appname=nil)
348
348
  all_opts = total_opts
349
349
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|ver|graceful)/i}
@@ -352,9 +352,9 @@ module PI::Cli::Command
352
352
  end
353
353
  client.check_login_status
354
354
  tag = @options[:ver]
355
- app, appid = choose_app_help_target_not_all(appid_or_appname)
356
- appid = (appid == nil ? app[:id] : appid)
357
- if app[:deployType] == "git"
355
+ app, appid = choose_app_help_target_not_all(appid_or_appname)
356
+ appid = (appid == nil ? app[:id] : appid)
357
+ if app[:deployType] == "git"
358
358
  tags = client.project_tags(app[:projectId])
359
359
  err "No tags!" if tags.nil? || tags.empty?
360
360
  if tag
@@ -363,7 +363,7 @@ module PI::Cli::Command
363
363
  tag = ask "Select Tag", :choices => tags, :indexed => true
364
364
  end
365
365
  err "Don't need update application!" if tag == app[:tag]
366
- else
366
+ else
367
367
  tags = client.project_binary(app[:projectId])
368
368
  err "No version!" if tags.nil? || tags.empty?
369
369
  if tag
@@ -372,26 +372,26 @@ module PI::Cli::Command
372
372
  else
373
373
  tag = ask "Select Version", :choices => tags.collect { |b| b[:versionName] }, :indexed => true
374
374
  end
375
- err "Don't need update application!" if tag == app[:tag]
375
+ err "Don't need update application!" if tag == app[:tag]
376
376
  end
377
377
  graceful = get_graceful(app)
378
378
  # lazy = get_lazy(app)
379
379
  display "Updating application: ",false
380
-
381
- t = Thread.new do
380
+
381
+ t = Thread.new do
382
382
  loop do
383
- display '.', false
383
+ display '.', false
384
384
  sleep (1)
385
385
  break unless t.alive?
386
386
  end
387
387
  end
388
-
389
- tmp = client.update_app(appid,tag,graceful)
388
+
389
+ tmp = client.update_app(appid,tag,graceful)
390
390
  uuid = tmp[1]
391
391
  result = check_status(uuid)
392
- Thread.kill(t)
392
+ Thread.kill(t)
393
393
  end
394
-
394
+
395
395
  def status(appid_or_appname=nil)
396
396
  all_opts = total_opts
397
397
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target)/i}
@@ -399,7 +399,7 @@ module PI::Cli::Command
399
399
  err "Invalid options" if value != nil
400
400
  end
401
401
  client.check_login_status
402
- app, appid = choose_app_help_target_not_all(appid_or_appname)
402
+ app, appid = choose_app_help_target_not_all(appid_or_appname)
403
403
  appid = (appid == nil ? app[:id] : appid)
404
404
  status = client.status(appid)
405
405
  return display JSON.pretty_generate(status) if @options[:json]
@@ -412,7 +412,7 @@ module PI::Cli::Command
412
412
  end
413
413
  display status_table
414
414
  end
415
-
415
+
416
416
  def app_env(appid_or_appname=nil)
417
417
  all_opts = total_opts
418
418
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target)/i}
@@ -420,9 +420,9 @@ module PI::Cli::Command
420
420
  err "Invalid options" if value != nil
421
421
  end
422
422
  client.check_login_status
423
- app, appid = choose_app_help_target_not_all(appid_or_appname)
423
+ app, appid = choose_app_help_target_not_all(appid_or_appname)
424
424
  appid = (appid == nil ? app[:id] : appid)
425
- env = client.app_env(appid)
425
+ env = client.app_env(appid)
426
426
  return display JSON.pretty_generate(env) if @options[:json]
427
427
  return display "No Environments!" if env.nil? || env.empty?
428
428
  env.sort! {|a, b| a[:name] <=> b[:name] }
@@ -434,7 +434,7 @@ module PI::Cli::Command
434
434
  end
435
435
  display env_table
436
436
  end
437
-
437
+
438
438
  def create_env(appid_or_appname=nil)
439
439
  all_opts = total_opts
440
440
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|name|value)/i}
@@ -444,33 +444,33 @@ module PI::Cli::Command
444
444
  client.check_login_status
445
445
  name = @options[:name]
446
446
  value = @options[:value]
447
- app, appid = choose_app_help_target_not_all(appid_or_appname)
447
+ app, appid = choose_app_help_target_not_all(appid_or_appname)
448
448
  appid = (appid == nil ? app[:id] : appid)
449
-
450
- loop{
449
+
450
+ loop{
451
451
  name = ask "Environment Name" unless name
452
452
  if not check_envname_valid?(name)
453
- name =nil
453
+ name =nil
454
454
  next
455
455
  else if env_exists?(appid,name)
456
- display "Environment '#{name}' already exists.".red
457
- name =nil
458
- next
456
+ display "Environment '#{name}' already exists.".red
457
+ name =nil
458
+ next
459
459
  else
460
460
  break
461
461
  end
462
462
  end
463
- }
463
+ }
464
464
  loop{
465
465
  value = ask "Environment Value" unless value
466
466
  if not check_envvalue_valid?(value)
467
- display "Invalid environment value '#{value}'.".red
467
+ display "Invalid environment value '#{value}'.".red
468
468
  value =nil
469
469
  next
470
470
  else
471
471
  break
472
472
  end
473
- }
473
+ }
474
474
  manifest = {
475
475
  :name => name,
476
476
  :value => value
@@ -478,7 +478,7 @@ module PI::Cli::Command
478
478
  client.create_env(appid, manifest)
479
479
  display "OK".green
480
480
  end
481
-
481
+
482
482
  def delete_env(appid_or_appname=nil)
483
483
  all_opts = total_opts
484
484
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|name)/i}
@@ -501,22 +501,22 @@ module PI::Cli::Command
501
501
  end
502
502
  display "\n"
503
503
  end
504
-
504
+
505
505
  delete_envs = Array.new
506
506
  envs.each do |e|
507
507
  name.each do |n|
508
508
  delete_envs.push("#{n}=#{e[:value]}") if n == e[:name]
509
- end
510
- end
509
+ end
510
+ end
511
511
  err " The environment is not exist!" if delete_envs.nil? || delete_envs.empty?
512
512
 
513
513
  delete_envs.each do |env|
514
- display "Deleting environment '#{env}': ",false
514
+ display "Deleting environment '#{env}': ",false
515
515
  client.delete_env(appid, env)
516
516
  display "OK".green
517
- end
517
+ end
518
518
  end
519
-
519
+
520
520
  def app_log(appid_or_appname=nil)
521
521
  all_opts = total_opts
522
522
  all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target|instanceid|file)/i}
@@ -527,7 +527,7 @@ module PI::Cli::Command
527
527
  instanceindex = @options[:instanceid]
528
528
  file = @options[:file]
529
529
  app, appid = choose_app_help_target_not_all(appid_or_appname)
530
- appid = (appid == nil ? app[:id] : appid)
530
+ appid = (appid == nil ? app[:id] : appid)
531
531
  max_index = app[:instances]-1
532
532
  instanceindex = ask "Select instance index(from 0 to #{max_index})", :default => 0 unless instanceindex
533
533
  unless file
@@ -545,7 +545,7 @@ module PI::Cli::Command
545
545
  display "\n"
546
546
  display logs[1]
547
547
  end
548
-
548
+
549
549
  # def app_debug(appid_or_appname=nil)
550
550
  # all_opts = total_opts
551
551
  # all_opts_except_valid_opts = all_opts.delete_if{ |key,value| key.to_s =~ /(target)/i}
@@ -573,19 +573,19 @@ module PI::Cli::Command
573
573
  # end
574
574
  # display debug_table
575
575
  # end
576
-
577
- private
578
-
576
+
577
+ private
578
+
579
579
  def app_exists?(target, appname)
580
580
  app = client.app_search(target,appname)
581
- app.nil? ? false : true
581
+ app.nil? ? false : true
582
582
  end
583
-
583
+
584
584
  def env_exists?(appid, envname)
585
585
  env = client.env_verify(appid, envname)
586
- "true" == env[1] ? false : true
586
+ "true" == env[1] ? false : true
587
587
  end
588
-
588
+
589
589
  def do_start_app(app, appid)
590
590
  display "Starting application '#{app[:name]}'(target:#{app[:targetName]}): ",false
591
591
  t = Thread.new do
@@ -600,15 +600,15 @@ module PI::Cli::Command
600
600
  result = check_status(uuid)
601
601
  Thread.kill(t)
602
602
  end
603
-
603
+
604
604
  def do_stop_app(app, appid)
605
605
  graceful = get_graceful(app)
606
606
  display "Stoping application '#{app[:name]}'(target:#{app[:targetName]}): ",false
607
607
  client.stop_app(appid, graceful)
608
608
  display "OK".green
609
609
  end
610
-
611
- def do_restart_app(app, appid)
610
+
611
+ def do_restart_app(app, appid)
612
612
  graceful = get_graceful(app)
613
613
  # lazy = get_lazy(app)
614
614
  display "Restart application '#{app[:name]}'(target:#{app[:targetName]}): ",false
@@ -624,11 +624,11 @@ module PI::Cli::Command
624
624
  result = check_status(uuid)
625
625
  Thread.kill(t)
626
626
  end
627
-
627
+
628
628
  def mem_choice_to_quota(mem_choice)
629
629
  (mem_choice =~ /(\d+)M/i) ? mem_quota = $1.to_i : mem_quota = mem_choice.to_i * 1024
630
630
  mem_quota
631
631
  end
632
-
632
+
633
633
  end
634
634
  end