pi 0.1.23 → 0.1.24

Sign up to get free protection for your applications and to get access to all the features.
@@ -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