pi 0.1.23 → 0.1.24

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.
@@ -1,37 +1,13 @@
1
- require "interact"
2
1
  module PI::Cli::Command
3
2
  class Dns < Base
4
3
  include PI::Cli::ChooseHelper
5
- include Interactive
4
+ include PI::Cli::InteractHelper
6
5
 
7
- def usable_dns(appname=nil)
8
- unless appname
9
- useproject = choose_project
10
- projectid = useproject[:id]
11
- useapp = choose_app(projectid)
12
- appname = useapp[:name]
13
- end
14
- dns = client.usable_dns(appname)
15
- return display JSON.pretty_generate(dns) if @options[:json]
16
- return display "No Dns" if dns.nil? || dns.empty?
17
- dns.sort! {|a, b| a[:name] <=> b[:name] }
18
- dns_table = table do |t|
19
- t.headings = 'Name'
20
- dns.each do |s|
21
- t << [s[:name]]
22
- end
23
- end
24
- display dns_table
25
- end
26
-
27
- def app_dns(appname=nil)
28
- unless appname
29
- useproject = choose_project
30
- projectid = useproject[:id]
31
- useapp = choose_app(projectid)
32
- appname = useapp[:name]
33
- end
34
- dns = client.app_dns(appname)
6
+ def app_dns(appid_or_appname=nil)
7
+ client.check_login_status
8
+ app = choose_app_help_target_not_all(appid_or_appname)
9
+
10
+ dns = client.app_dns(app[:id])
35
11
  return display JSON.pretty_generate(dns) if @options[:json]
36
12
  return display "No DNS!" if dns.nil? || dns.empty?
37
13
  dns_table = table do |t|
@@ -43,26 +19,21 @@ module PI::Cli::Command
43
19
  display dns_table
44
20
  end
45
21
 
46
- def map_dns(appname=nil)
47
- unless appname
48
- useproject = choose_project
49
- projectid = useproject[:id]
50
- useapp = choose_app(projectid)
51
- appname = useapp[:name]
52
- end
53
- app = client.app_get_byname(appname)
54
- err "The application is not found! App name :#{appname}" unless (appname == app[:name] ? true : false)
55
-
56
- dns = client.usable_dns(appname)
22
+ def map_dns(appid_or_appname=nil)
23
+ client.check_login_status
24
+ app = choose_app_help_target_not_all(appid_or_appname)
25
+ dns = client.usable_dns(app[:id])
57
26
  err "No usable dns!" if dns.nil? || dns.empty?
58
27
  choices = Array.new
59
28
  dns.each do |s|
60
29
  choices << s[:name]
61
30
  end
62
- manifest = ask "Select dns, indexed list?", :choices => choices, :indexed => true
63
- manifest = manifest.to_a
31
+ manifest = asks "Select dns, indexed list?", :choices => choices, :indexed => true
64
32
  display "Selected dns: ",false
65
- display "#{manifest}"
33
+ manifest.each do |m|
34
+ display "#{m} ",false
35
+ end
36
+ display "\n"
66
37
  display "Mapping dns: ",false
67
38
 
68
39
  t = Thread.new do
@@ -73,47 +44,41 @@ module PI::Cli::Command
73
44
  end
74
45
  end
75
46
 
76
- client.map_dns(appname,manifest)
47
+ client.map_dns(app[:id],manifest)
77
48
  Thread.kill(t)
78
49
  display "OK".green
79
50
  end
80
51
 
81
- def unmap_dns(appname=nil)
82
- unless appname
83
- useproject = choose_project
84
- projectid = useproject[:id]
85
- useapp = choose_app(projectid)
86
- appname = useapp[:name]
87
- end
88
- app = client.app_get_byname(appname)
89
- err "The application is not found! App name :#{appname}" unless (appname == app[:name] ? true : false)
90
- dns = client.app_dns(appname)
91
- err "No mapped dns!" if dns.nil? || dns.empty?
92
- usedns = nil
93
- choose do |menu|
94
- display "=============DNS============"
95
- menu.prompt = "Select DNS: "
96
- menu.select_by = :index_or_name
97
- dns.each do |d|
98
- menu.choice("#{d}") { usedns = d }
99
- end
100
- end
52
+ def unmap_dns(appid_or_appname=nil)
53
+ client.check_login_status
54
+ app = choose_app_help_target_not_all(appid_or_appname)
55
+ dns = client.app_dns(app[:id])
56
+ err "No mapped dns!" if dns.nil? || dns.empty?
57
+ urls = asks "Select DNS", :choices => dns, :indexed => true
101
58
  display "Selected DNS: ",false
102
- display "#{usedns}"
103
- manifest = [usedns]
104
- display "Unmapping dns: ",false
105
-
59
+ urls.each do |m|
60
+ display "#{m} ",false
61
+ end
62
+ display "\n"
63
+ urls.each do |url|
64
+ do_unmap_dns(app[:id], url)
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def do_unmap_dns(appid, url)
71
+ display "Unmapping dns '#{url}': ",false
106
72
  t = Thread.new do
107
73
  loop do
108
74
  display '.', false
109
75
  sleep (1)
110
76
  break unless t.alive?
111
77
  end
112
- end
113
-
114
- client.unmap_dns(appname,manifest)
78
+ end
79
+ client.unmap_dns(appid, url)
115
80
  Thread.kill(t)
116
- display "OK".green
81
+ display "OK".green
117
82
  end
118
83
 
119
84
  end
@@ -2,141 +2,131 @@ require 'digest/sha1'
2
2
  require 'fileutils'
3
3
  require 'tempfile'
4
4
  require 'tmpdir'
5
- require 'set'
6
5
 
7
6
  module PI::Cli::Command
8
7
 
9
8
  class Projects < Base
10
9
  include PI::Cli::ChooseHelper
10
+ include PI::Cli::InteractHelper
11
11
 
12
12
  def projects
13
- projects = client.projects
14
- # size = projects.size-1
15
- # if size >= 100
16
- # new_range_projects = Array.new
17
- # puts "Total projects: #{size}"
18
- # start = ask("start number:", Integer) { |q| q.in = 0..size }
19
- # stop = ask("stop number:", Integer) { |q| q.in = 0..size }
20
- # start.upto(stop) do |i|
21
- # new_range_projects << projects[i]
22
- # i += 1
23
- # end
24
- # new_range_projects_table = table do |t|
25
- # t.headings = 'Name', 'Runtime', 'Framework', 'Git Type','GitUrl', 'Description'
26
- # new_range_projects.each do |project|
27
- # t << [project[:name], project[:runtime] ,project[:framework], project[:repositoryType], project[:gitUrl],project[:description]]
28
- # end
29
- # end
30
- # display new_range_projects_table
31
- # else
13
+ client.check_login_status
14
+ user = client.user_info
15
+ proj_sum = client.project_sum
16
+ total_proj = Integer(proj_sum[1])
17
+ return display "No Projects" if total_proj == 0
18
+ pageNum = -1
19
+ numPerPage = -1
20
+ if total_proj >= 50
21
+ puts "Total projects: #{total_proj}."
22
+ numPerPage = nil
23
+ loop{
24
+ numPerPage = ask "Number per page"
25
+ if not numPerPage =~ /^[1-9]\d*$/
26
+ display "Invalid Number! Please input number from 1 to #{total_proj}"
27
+ numPerPage =nil
28
+ next
29
+ else
30
+ break
31
+ end
32
+ }
33
+ numPerPage = numPerPage.to_i
34
+ maxpage = (total_proj.to_f/numPerPage).ceil
35
+ loop{
36
+ pageNum = ask "Page number"
37
+ if not pageNum =~ /^[1-9]\d*$/
38
+ display "Invalid Number! Please input number from 1 to #{maxpage}"
39
+ pageNum =nil
40
+ next
41
+ else
42
+ break
43
+ end
44
+ }
45
+ pageNum = pageNum.to_i
46
+ end
47
+ projects = client.projects(pageNum, numPerPage)
48
+ return display "No Projects" if projects.nil? || projects.empty?
32
49
  return display JSON.pretty_generate(projects) if @options[:json]
33
- return display "No Projects" if projects.nil? || projects.empty?
34
50
  projects.sort! {|a, b| a[:name] <=> b[:name] }
35
51
  display "\n"
36
52
  projects_table = table do |t|
37
- t.headings = 'Name', 'Runtime', 'Framework', 'Git Type','GitUrl', 'ID', 'Description'
53
+ t.headings = 'Name', 'Runtime', 'Framework', 'Git Type','GitUrl', 'Description'
38
54
  projects.each do |project|
39
- t << [project[:name], project[:runtime] ,project[:framework], project[:repositoryType], project[:gitUrl],project[:id],project[:description]]
55
+ t << [project[:name], project[:runtime], project[:framework], project[:repositoryType], project[:gitUrl], project[:description]]
40
56
  end
41
57
  end
42
58
  display projects_table
43
59
  end
44
60
 
45
- def create_project(projectname=nil)
61
+ def create_project(project=nil)
62
+ client.check_login_status
46
63
  loop{
47
- unless projectname
48
- projectname = ask "Project Name"
49
- err "Project Name required." if projectname.nil? || projectname.empty?
64
+ unless project
65
+ project = ask "Project Name"
66
+ err "Project Name required." if project.nil? || project.empty?
50
67
  end
51
- if project_exists?(projectname)
52
- display "Project '#{projectname}' already exists."
53
- projectname =nil
68
+ if not check_name_valid?(project)
69
+ display "Invalid project name '#{project}'."
70
+ project =nil
54
71
  next
55
- else
72
+ else if project_exists?(project)
73
+ display "Project '#{project}' already exists."
74
+ project =nil
75
+ next
76
+ else
56
77
  break
78
+ end
57
79
  end
58
- }
80
+ }
59
81
 
60
- runtime = nil
61
82
  runtimes = client.runtimes
62
- choose do |menu|
63
- display "=============Runtime============"
64
- menu.prompt = "Select Runtime: "
65
- menu.select_by = :index_or_name
66
- runtimes.each do |rt|
67
- menu.choice(rt) { runtime = rt }
68
- end
69
- end
83
+ err "No Runtimes" if runtimes.nil? || runtimes.empty?
84
+ runtime = ask "Select Runtime", :choices => runtimes, :indexed => true
70
85
  display "Selected Runtime: ",false
71
- display "#{runtime}".green
86
+ display "#{runtime}"
72
87
 
73
- framework = nil
74
88
  frameworks = client.frameworks(runtime)
75
89
  err "No Frameworks" if frameworks.nil? || frameworks.empty?
76
- choose do |menu|
77
- display "=============Frameworks============"
78
- menu.prompt = "Select Framework: "
79
- menu.select_by = :index_or_name
80
- frameworks.each do |fk|
81
- menu.choice(fk) { framework = fk }
82
- end
83
- end
90
+ framework = ask "Select Framework", :choices => frameworks, :indexed => true
84
91
  display "Selected Framework: ",false
85
- display "#{framework}".green
92
+ display "#{framework}"
86
93
 
87
- description = ask "Please enter in the description"
94
+ description = ask "Please enter in the description", :default => nil unless description
88
95
 
89
96
  github_info = client.github_info
90
97
 
91
98
  if github_info[:name].empty?
92
99
  manifest = {
93
- :name => "#{projectname}",
100
+ :name => "#{project}",
94
101
  :runtime => "#{runtime}",
95
102
  :framework => "#{framework}",
96
103
  :description => "#{description}"
97
104
  }
98
- else
99
- repositoryType = nil
105
+ else
100
106
  repositoryTypes =["cloudpi","github"]
101
- choose do |menu|
102
- display "=============Repository Types============"
103
- menu.prompt = "Select Repository Type: "
104
- menu.select_by = :index_or_name
105
- repositoryTypes.each do |rt|
106
- menu.choice(rt) { repositoryType = rt }
107
- end
108
- end
107
+ repositoryType = ask "Select Repository Type", :choices => repositoryTypes, :indexed => true
109
108
  display "Selected Repository Type: ",false
110
- display "#{repositoryType}".green
109
+ display "#{repositoryType}"
111
110
 
112
111
  if repositoryType == "github"
113
- isNew =nil
114
112
  isNew = "yes"
115
- publishType = nil
116
113
  publishTypes =["public","private"]
117
- choose do |menu|
118
- display "=============Publish Types============"
119
- menu.prompt = "Select publish Type: "
120
- menu.select_by = :index_or_name
121
- publishTypes.each do |pt|
122
- menu.choice(pt) { publishType = pt }
123
- end
114
+ publishType = ask "Select Publish Type", :choices => publishTypes, :indexed => true
115
+ display "Selected publish Type: ",false
116
+ display "#{publishType}"
124
117
  end
125
- display "Selected publish Type: ",false
126
- display "#{publishType}".green
127
- end
128
- manifest = {
129
- :name => "#{projectname}",
130
- :runtime => "#{runtime}",
131
- :framework => "#{framework}",
132
- :description => "#{description}",
133
- :repositoryType => "#{repositoryType}",
134
- :isNew => "#{isNew}",
135
- :publishType => "#{publishType}"
118
+ manifest = {
119
+ :name => "#{project}",
120
+ :runtime => "#{runtime}",
121
+ :framework => "#{framework}",
122
+ :description => "#{description}",
123
+ :repositoryType => "#{repositoryType}",
124
+ :isNew => "#{isNew}",
125
+ :publishType => "#{publishType}"
136
126
  }
137
127
  end
138
128
 
139
- display "Creating project \"#{projectname}\": ",false
129
+ display "Creating project \"#{project}\": ",false
140
130
 
141
131
  t = Thread.new do
142
132
  loop do
@@ -146,17 +136,18 @@ module PI::Cli::Command
146
136
  end
147
137
  end
148
138
 
149
- client.create_project(projectname, manifest)
139
+ client.create_project(project, manifest)
150
140
  Thread.kill(t)
151
141
  display "OK".green
152
142
  end
153
143
 
154
- def delete_project(projectname=nil)
155
- unless projectname
144
+ def delete_project(project=nil)
145
+ client.check_login_status
146
+ unless project
156
147
  useproject = choose_project
157
- projectname = useproject[:name]
148
+ project = useproject[:name]
158
149
  end
159
- display "Deleting project \"#{projectname}\": ",false
150
+ display "Deleting project \"#{project}\": ",false
160
151
 
161
152
  t = Thread.new do
162
153
  loop do
@@ -166,35 +157,48 @@ module PI::Cli::Command
166
157
  end
167
158
  end
168
159
 
169
- client.delete_project(projectname)
160
+ client.delete_project(project)
170
161
  Thread.kill(t)
171
162
  display 'OK'.green
172
163
  end
173
164
 
174
- def upload(projectname=nil)
175
- file, java_projects = nil, nil
176
- unless projectname
165
+ def upload(project=nil)
166
+ client.check_login_status
167
+ path = @options[:path]
168
+ if path
169
+ err "Not war file or path does not exist!" if not ((path =~ /\.(war)$/) && (File.exists? path))
170
+ end
171
+ version = @options[:ver]
172
+ description = @options[:desc]
177
173
  projects = client.projects
178
174
  err "No Projects" if projects.nil? || projects.empty?
179
- java_projects = projects.delete_if{ |p| p[:runtime] =~ /^(ruby)/i}
175
+ java_projects = projects.delete_if{ |p| p[:runtime] =~ /^(ruby)/i}
180
176
  java_projects.sort! {|a, b| a[:name] <=> b[:name] }
181
- choose do |menu|
182
- display "=============Project Name======="
183
- menu.prompt = "Select Project: "
184
- menu.select_by = :index_or_name
185
- projects.each do |project|
186
- menu.choice(project[:name]) { projectname = project[:name] }
187
- end
177
+ if project
178
+ flag = nil
179
+ java_projects.each do |j|
180
+ flag = true if project == j[:name]
181
+ end
182
+ err "The project is not found or not a java project! Project name :#{project}" unless flag
183
+ else
184
+ project_choices = Array.new
185
+ java_projects.each do |p|
186
+ project_choices << p[:name]
187
+ end
188
+ project = ask "Select Project", :choices => project_choices, :indexed => true
189
+ display "Selected Project: ",false
190
+ display "#{project}"
188
191
  end
189
- display "Selected Project: ",false
190
- display "#{projectname}".green
192
+ project = client.project_search(project)
193
+ project = project[:name]
194
+
195
+ if version
196
+ tmp = client.project_binary_existed(project,version)
197
+ err "Version '#{version}' already exists." if tmp.include?("true")
191
198
  end
192
-
193
- version = ask "Please enter the version"
194
- description = ask "Please enter in the description"
195
199
 
196
- path = nil
197
- loop{
200
+ unless path
201
+ loop{
198
202
  path = ask "Please enter the path of upload war file"
199
203
  if not ((path =~ /\.(war)$/) && (File.exists? path))
200
204
  display "Not war file or path does not exist!"
@@ -203,13 +207,29 @@ module PI::Cli::Command
203
207
  else
204
208
  break
205
209
  end
206
- }
207
-
210
+ }
211
+ end
212
+
213
+ unless version
214
+ loop{
215
+ version = ask "Please enter the version"
216
+ tmp = client.project_binary_existed(project,version)
217
+ if tmp.include?("true")
218
+ display "Version '#{version}' already exists."
219
+ version =nil
220
+ next
221
+ else
222
+ break
223
+ end
224
+ }
225
+ end
226
+
227
+ description = ask "Please enter in the description", :default => nil unless description
208
228
  upload_file = File.new(path, 'rb')
209
229
  manifest = {
210
- :projectName => "#{projectname}",
230
+ :projectName => "#{project}",
211
231
  :fileWAR => upload_file,
212
- :versionName => "#{version.downcase}",
232
+ :versionName => "#{version}",
213
233
  :description => "#{description}"
214
234
  }
215
235
  display "Uploading \"#{File.basename(path)}\": ",false
@@ -227,12 +247,36 @@ module PI::Cli::Command
227
247
  display 'OK'.green
228
248
  end
229
249
 
230
- def project_events(projectname=nil)
231
- unless projectname
250
+ def delete_binary(project=nil)
251
+ client.check_login_status
252
+ unless project
232
253
  useproject = choose_project
233
- projectname = useproject[:name]
234
- end
235
- events = client.project_events(projectname)
254
+ project = useproject[:name]
255
+ end
256
+ binary = client.project_binary(project)
257
+ err "No binary!" if binary.nil? || binary.empty?
258
+ choices = Array.new
259
+ binary.each do |b|
260
+ choices << b[:versionName]
261
+ end
262
+ binaryname = ask"Select Binary", :choices => choices, :indexed => true
263
+ display "Selected Binary: ",false
264
+ display "#{binaryname}"
265
+ binaryid = nil
266
+ binary.each do |b|
267
+ binaryid = b[:id].to_s if binaryname == b[:versionName]
268
+ end
269
+ client.delete_binary(binaryid)
270
+ display 'OK'.green
271
+ end
272
+
273
+ def project_events(project=nil)
274
+ client.check_login_status
275
+ unless project
276
+ useproject = choose_project
277
+ project = useproject[:name]
278
+ end
279
+ events = client.project_events(project)
236
280
  return display JSON.pretty_generate(events || []) if @options[:json]
237
281
  return display "No Events." if events.empty?
238
282
  events_table = table do |t|
@@ -244,12 +288,13 @@ module PI::Cli::Command
244
288
  display events_table
245
289
  end
246
290
 
247
- def project_tags(projectname=nil)
248
- unless projectname
291
+ def project_tags(project=nil)
292
+ client.check_login_status
293
+ unless project
249
294
  useproject = choose_project
250
- projectname = useproject[:name]
295
+ project = useproject[:name]
251
296
  end
252
- tags ||= client.project_tags(projectname)
297
+ tags ||= client.project_tags(project)
253
298
  return display JSON.pretty_generate(tags || []) if @options[:json]
254
299
  return display "No Tags." if tags.size == 0
255
300
  tags_table = table do |t|
@@ -260,28 +305,20 @@ module PI::Cli::Command
260
305
  display tags_table
261
306
  end
262
307
 
263
- def project_commits(projectname=nil)
264
- unless projectname
308
+ def project_commits(project=nil)
309
+ client.check_login_status
310
+ unless project
265
311
  useproject = choose_project
266
- projectname = useproject[:name]
312
+ project = useproject[:name]
267
313
  end
268
- tag =nil
269
- tags = client.project_tags(projectname)
314
+ tags = client.project_tags(project)
270
315
  return display JSON.pretty_generate(tags || []) if @options[:json]
271
- display "\n"
272
316
  return display "No Commits" if tags.nil? || tags.empty?
273
- choose do |menu|
274
- display "=============Tag======="
275
- menu.prompt = "Select Tag: "
276
- menu.select_by = :index_or_name
277
- tags.each do |t|
278
- menu.choice(t) { tag = t}
279
- end
280
- end
317
+ tag = ask "Select Tag", :choices => tags, :indexed => true
281
318
  display "Selected Tag: ",false
282
- display "#{tag}".green
319
+ display "#{tag}"
283
320
 
284
- commits = client.project_commits(projectname,tag)
321
+ commits = client.project_commits(project,tag)
285
322
  commits.sort! {|a, b| a[:date] <=> b[:date] }
286
323
  return display JSON.pretty_generate(commits || []) if @options[:json]
287
324
  return display "No Commits" if commits.nil? || commits.empty?
@@ -293,32 +330,14 @@ module PI::Cli::Command
293
330
  end
294
331
  display commits_table
295
332
  end
296
-
297
- def project_apps(projectname=nil)
298
- unless projectname
299
- useproject = choose_project
300
- projectname = useproject[:name]
301
- end
302
- apps = client.project_apps(projectname)
303
- return display JSON.pretty_generate(apps || []) if @options[:json]
304
- return display "No applications" if apps.nil? || apps.empty?
305
-
306
- apps.sort! {|a, b| a[:name] <=> b[:name] }
307
- apps_table = table do |t|
308
- t.headings = 'Target', 'AppName', 'URL', 'Tag', 'Status', 'Instances'
309
- apps.each do |app|
310
- t << [app[:targetName], app[:name], app[:url], app[:tag], app[:status], app[:instances]]
311
- end
312
- end
313
- display apps_table
314
- end
315
333
 
316
334
  private
317
335
 
318
336
  def project_exists?(projectname)
319
- project = client.project_get(projectname)
320
- projectname == project[:name] ? true : false
337
+ project = client.project_search(projectname)
338
+ project[:id] != 0 ? true : false
321
339
  end
340
+
322
341
 
323
342
  end
324
343
  end