pi 0.1.19 → 0.1.20
Sign up to get free protection for your applications and to get access to all the features.
- data/README +50 -25
- data/lib/cli.rb +5 -0
- data/lib/cli/choose_helper.rb +50 -0
- data/lib/cli/commands/admin.rb +19 -0
- data/lib/cli/commands/apps.rb +566 -0
- data/lib/cli/commands/base.rb +2 -2
- data/lib/cli/commands/dns.rb +120 -0
- data/lib/cli/commands/projects.rb +85 -102
- data/lib/cli/commands/services.rb +134 -0
- data/lib/cli/commands/user.rb +14 -19
- data/lib/cli/runner.rb +112 -4
- data/lib/cli/usage.rb +24 -0
- data/lib/cli/version.rb +1 -1
- data/lib/pi/client.rb +151 -6
- data/lib/pi/const.rb +2 -0
- metadata +42 -21
data/lib/cli/commands/user.rb
CHANGED
@@ -3,26 +3,21 @@ require 'set'
|
|
3
3
|
module PI::Cli::Command
|
4
4
|
|
5
5
|
class User < Base
|
6
|
-
|
7
|
-
YES_SET = Set.new(["y", "Y", "yes", "YES"])
|
8
6
|
|
9
7
|
def login(url=nil)
|
10
8
|
unless url
|
11
|
-
url = ask
|
12
|
-
if
|
9
|
+
url = ask "Attempting login to '#{target_url}'?", :default => true
|
10
|
+
if url == true
|
13
11
|
url = "#{target_url}"
|
14
|
-
else
|
15
|
-
url =
|
16
|
-
else
|
17
|
-
url = ask("URL: ")
|
18
|
-
end
|
12
|
+
else
|
13
|
+
url = ask "Please input URL"
|
19
14
|
end
|
20
|
-
end
|
15
|
+
end
|
21
16
|
url = "#{target_url}" if url.nil? || url.empty?
|
22
|
-
eval("PI::Cli::Command::Misc").new().send("set_target", url)
|
17
|
+
eval("PI::Cli::Command::Misc").new().send("set_target", url)
|
23
18
|
tries ||= 0
|
24
|
-
user = ask
|
25
|
-
password = ask
|
19
|
+
user = ask "User"
|
20
|
+
password = ask "Password", :echo => '*'
|
26
21
|
err "Need a valid user" unless user
|
27
22
|
err "Need a password" unless password
|
28
23
|
login_and_save_token(user, password)
|
@@ -41,7 +36,7 @@ module PI::Cli::Command
|
|
41
36
|
say "Successfully logged out of [#{target_url}]".green
|
42
37
|
end
|
43
38
|
|
44
|
-
def info
|
39
|
+
def info
|
45
40
|
info = client.info
|
46
41
|
return display JSON.pretty_generate(info) if @options[:json]
|
47
42
|
display "\nName: #{info[:name]}"
|
@@ -83,8 +78,8 @@ module PI::Cli::Command
|
|
83
78
|
def password(newpassword=nil)
|
84
79
|
unless newpassword
|
85
80
|
loop{
|
86
|
-
newpassword = ask
|
87
|
-
newpassword2 = ask
|
81
|
+
newpassword = ask "New Password", :echo => '*'
|
82
|
+
newpassword2 = ask "Verify Password", :echo => '*'
|
88
83
|
if newpassword != newpassword2
|
89
84
|
display "Passwords did not match, try again"
|
90
85
|
newpassword =nil
|
@@ -99,9 +94,9 @@ module PI::Cli::Command
|
|
99
94
|
end
|
100
95
|
|
101
96
|
def github(name=nil)
|
102
|
-
name = ask
|
103
|
-
email = ask
|
104
|
-
password = ask
|
97
|
+
name = ask "Please input your name" unless name
|
98
|
+
email = ask "Please input your email"
|
99
|
+
password = ask "Please input your password", :echo => '*'
|
105
100
|
manifest = {
|
106
101
|
:name => "#{name}",
|
107
102
|
:password => "#{password}",
|
data/lib/cli/runner.rb
CHANGED
@@ -74,7 +74,9 @@ class PI::Cli::Runner
|
|
74
74
|
def parse_command!
|
75
75
|
# just return if already set, happends with -v, -h
|
76
76
|
return if @namespace && @action
|
77
|
-
|
77
|
+
|
78
|
+
# @help_only = false
|
79
|
+
|
78
80
|
verb = @args.shift
|
79
81
|
case verb
|
80
82
|
|
@@ -123,9 +125,17 @@ class PI::Cli::Runner
|
|
123
125
|
set_cmd(:misc, :version)
|
124
126
|
|
125
127
|
when 'help'
|
126
|
-
|
127
|
-
|
128
|
-
|
128
|
+
if @args.size == 0
|
129
|
+
display_help
|
130
|
+
break
|
131
|
+
else if @args == ["help"] && @args.size == 1
|
132
|
+
usage('pi help [command]')
|
133
|
+
else
|
134
|
+
@help_only = true
|
135
|
+
parse_command!
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
129
139
|
|
130
140
|
when 'options'
|
131
141
|
@args = @args.unshift('--options')
|
@@ -167,6 +177,104 @@ class PI::Cli::Runner
|
|
167
177
|
usage('pi project-apps [projectname]')
|
168
178
|
set_cmd(:projects, :project_apps, @args.size == 1 ? 1 : 0)
|
169
179
|
|
180
|
+
###############################################################################
|
181
|
+
# Applications
|
182
|
+
###############################################################################
|
183
|
+
|
184
|
+
when 'apps'
|
185
|
+
usage('pi apps [projectid]')
|
186
|
+
set_cmd(:apps, :apps, @args.size == 1 ? 1 : 0)
|
187
|
+
|
188
|
+
when 'create-app'
|
189
|
+
usage('pi create-app [appname]')
|
190
|
+
set_cmd(:apps, :create_app, @args.size == 1 ? 1 : 0)
|
191
|
+
|
192
|
+
when 'delete-app'
|
193
|
+
usage('pi delete-app [appid]')
|
194
|
+
set_cmd(:apps, :delete_app, @args.size == 1 ? 1 : 0)
|
195
|
+
|
196
|
+
when 'start-app'
|
197
|
+
usage('pi start-app [appid]')
|
198
|
+
set_cmd(:apps, :start_app, @args.size == 1 ? 1 : 0)
|
199
|
+
|
200
|
+
when 'stop-app'
|
201
|
+
usage('pi stop-app [appid]')
|
202
|
+
set_cmd(:apps, :stop_app, @args.size == 1 ? 1 : 0)
|
203
|
+
|
204
|
+
when 'restart-app'
|
205
|
+
usage('pi restart-app [appid]')
|
206
|
+
set_cmd(:apps, :restart_app, @args.size == 1 ? 1 : 0)
|
207
|
+
|
208
|
+
when 'scale-app'
|
209
|
+
usage('pi scale-app [appid]')
|
210
|
+
set_cmd(:apps, :scale_app, @args.size == 1 ? 1 : 0)
|
211
|
+
|
212
|
+
when 'update-app'
|
213
|
+
usage('pi update-app [appid]')
|
214
|
+
set_cmd(:apps, :update_app, @args.size == 1 ? 1 : 0)
|
215
|
+
|
216
|
+
when 'status'
|
217
|
+
usage('pi status [appname]')
|
218
|
+
set_cmd(:apps, :status, @args.size == 1 ? 1 : 0)
|
219
|
+
|
220
|
+
when 'app-env'
|
221
|
+
usage('pi app-env [appname]')
|
222
|
+
set_cmd(:apps, :app_env, @args.size == 1 ? 1 : 0)
|
223
|
+
|
224
|
+
when 'create-env'
|
225
|
+
usage('pi create-env [appname]')
|
226
|
+
set_cmd(:apps, :create_env, @args.size == 1 ? 1 : 0)
|
227
|
+
|
228
|
+
when 'delete-env'
|
229
|
+
usage('pi delete-env [appname]')
|
230
|
+
set_cmd(:apps, :delete_env, @args.size == 1 ? 1 : 0)
|
231
|
+
|
232
|
+
when 'app-log'
|
233
|
+
usage('pi app-log [appid]')
|
234
|
+
set_cmd(:apps, :app_log, @args.size == 1 ? 1 : 0)
|
235
|
+
|
236
|
+
###############################################################################
|
237
|
+
# Services
|
238
|
+
###############################################################################
|
239
|
+
|
240
|
+
when 'app-service'
|
241
|
+
usage('pi app-service [appname]')
|
242
|
+
set_cmd(:services, :app_service, @args.size == 1 ? 1 : 0)
|
243
|
+
|
244
|
+
when 'bind-service'
|
245
|
+
usage('pi bind-service [appname]')
|
246
|
+
set_cmd(:services, :bind_service, @args.size == 1 ? 1 : 0)
|
247
|
+
|
248
|
+
when 'unbind-service'
|
249
|
+
usage('pi unbind-service [appname]')
|
250
|
+
set_cmd(:services, :unbind_service, @args.size == 1 ? 1 : 0)
|
251
|
+
|
252
|
+
###############################################################################
|
253
|
+
# Dns
|
254
|
+
###############################################################################
|
255
|
+
|
256
|
+
when 'app-dns'
|
257
|
+
usage('pi app-dns [appname]')
|
258
|
+
set_cmd(:dns, :app_dns, @args.size == 1 ? 1 : 0)
|
259
|
+
|
260
|
+
when 'map-dns'
|
261
|
+
usage('pi map-dns [appname]')
|
262
|
+
set_cmd(:dns, :map_dns, @args.size == 1 ? 1 : 0)
|
263
|
+
|
264
|
+
when 'unmap-dns'
|
265
|
+
usage('pi unmap-dns [appname]')
|
266
|
+
set_cmd(:dns, :unmap_dns, @args.size == 1 ? 1 : 0)
|
267
|
+
|
268
|
+
###############################################################################
|
269
|
+
# Admin
|
270
|
+
###############################################################################
|
271
|
+
|
272
|
+
when 'users'
|
273
|
+
usage('pi users')
|
274
|
+
set_cmd(:admin, :users)
|
275
|
+
|
276
|
+
###############################################################################
|
277
|
+
|
170
278
|
when 'usage'
|
171
279
|
display basic_usage
|
172
280
|
exit(true)
|
data/lib/cli/usage.rb
CHANGED
@@ -47,6 +47,30 @@ Currently available pi commands are:
|
|
47
47
|
project-commits [projectname] List the commit log for the project
|
48
48
|
project-apps [projectname] List the applications for the project
|
49
49
|
upload [projectname] Upload the war package for java project
|
50
|
+
|
51
|
+
Application
|
52
|
+
apps List deployed applications for the project
|
53
|
+
create-app [appname] Create a new application
|
54
|
+
delete-app [appid] Delete the application
|
55
|
+
start-app [appid] Start the application
|
56
|
+
stop-app [appid] Stop the application
|
57
|
+
restart-app [appid] Restart the application
|
58
|
+
scale-app [appid] Scale the application instances up or down
|
59
|
+
update-app [appid] Update the application
|
60
|
+
status [appname] Display resource usage for the application
|
61
|
+
app-env [appid] Display the environments for the application
|
62
|
+
create-env [appid] Create the environment for the application
|
63
|
+
delete-env [appid] Delete the environment for the application
|
64
|
+
app-log [appid] List the logs for the application
|
65
|
+
|
66
|
+
Service
|
67
|
+
app-service [appname] Display the bind services for the application
|
68
|
+
bind-service [appname] Bind a service to an application
|
69
|
+
unbind-service [appname] Unbind a service to an application
|
70
|
+
DNS
|
71
|
+
app-dns [appname] Display the mapped urls for the application
|
72
|
+
map-dns [appname] Map the url for the application
|
73
|
+
unmap-dns [appname] Unmap the url for the application
|
50
74
|
USAGE
|
51
75
|
|
52
76
|
end
|
data/lib/cli/version.rb
CHANGED
data/lib/pi/client.rb
CHANGED
@@ -37,6 +37,10 @@ class PI::Client
|
|
37
37
|
# Users
|
38
38
|
#####################################################
|
39
39
|
|
40
|
+
def check_url
|
41
|
+
http_get
|
42
|
+
end
|
43
|
+
|
40
44
|
def login(user, password)
|
41
45
|
status, body, headers = json_post("#{PI::TOKEN_PATH}", {:password => password,:userName => user})
|
42
46
|
response_info = json_parse(body)
|
@@ -74,7 +78,7 @@ class PI::Client
|
|
74
78
|
end
|
75
79
|
|
76
80
|
def frameworks(runtime)
|
77
|
-
json_get("#{PI::INFO_PATH}/frameworks
|
81
|
+
json_get("#{PI::INFO_PATH}/frameworks?runtime=#{runtime}")
|
78
82
|
end
|
79
83
|
|
80
84
|
#####################################################
|
@@ -85,6 +89,10 @@ class PI::Client
|
|
85
89
|
json_get("#{PI::PROJECT_PATH}/list")
|
86
90
|
end
|
87
91
|
|
92
|
+
def project_get(projectname)
|
93
|
+
json_get("#{PI::PROJECT_PATH}/get?projectName=#{projectname}")
|
94
|
+
end
|
95
|
+
|
88
96
|
def create_project(name, manifest={})
|
89
97
|
status, body, headers = json_post("#{PI::PROJECT_PATH}/create", manifest)
|
90
98
|
end
|
@@ -113,7 +121,144 @@ class PI::Client
|
|
113
121
|
def project_apps(projectname)
|
114
122
|
json_get("#{PI::PROJECT_PATH}/apps/#{projectname}")
|
115
123
|
end
|
124
|
+
|
125
|
+
def project_binary(projectid)
|
126
|
+
json_get("#{PI::PROJECT_PATH}/binary/list?query=project_id%3D#{projectid}")
|
127
|
+
end
|
128
|
+
|
129
|
+
def project_branchs(projectname)
|
130
|
+
json_get("#{PI::PROJECT_PATH}/branchs/#{projectname}")
|
131
|
+
end
|
116
132
|
|
133
|
+
#####################################################
|
134
|
+
# applications
|
135
|
+
#####################################################
|
136
|
+
|
137
|
+
def apps(projectid, queryParam = nil)
|
138
|
+
queryParam = { :pageNum => -1, :NumPerPage => -1} unless queryParam
|
139
|
+
json_get("#{PI::APP_PATH}/list?projectId=#{projectid}&pageNum=#{queryParam[:pageNum]}&numPerPage=#{queryParam[:NumPerPage]}")
|
140
|
+
end
|
141
|
+
|
142
|
+
def app_sum(projectid)
|
143
|
+
http_get("#{PI::APP_PATH}/sum?projectId=#{projectid}")
|
144
|
+
end
|
145
|
+
|
146
|
+
def app_get_byname(appname)
|
147
|
+
json_get("#{PI::APP_PATH}/get?appName=#{appname}")
|
148
|
+
end
|
149
|
+
|
150
|
+
def app_get_byid(appid)
|
151
|
+
json_get("#{PI::APP_PATH}/get?appId=#{appid}")
|
152
|
+
end
|
153
|
+
|
154
|
+
def create_app(projectid,manifest={})
|
155
|
+
status, body, headers = json_post("#{PI::APP_PATH}/create?projectId=#{projectid}", manifest)
|
156
|
+
end
|
157
|
+
|
158
|
+
def target_memory(targetname)
|
159
|
+
http_get("#{PI::APP_PATH}/target/memory?targetName=#{targetname}")
|
160
|
+
end
|
161
|
+
|
162
|
+
def app_message(appname,message)
|
163
|
+
json_get("#{PI::APP_PATH}/message?appName=#{appname}&eventName=#{message}")
|
164
|
+
end
|
165
|
+
|
166
|
+
def delete_app(appid)
|
167
|
+
http_delete("#{PI::APP_PATH}/delete?appId=#{appid}",'application/json')
|
168
|
+
end
|
169
|
+
|
170
|
+
def start_app(appid)
|
171
|
+
json_get("#{PI::APP_PATH}/start?appId=#{appid}")
|
172
|
+
end
|
173
|
+
|
174
|
+
def stop_app(appid)
|
175
|
+
json_get("#{PI::APP_PATH}/stop?appId=#{appid}")
|
176
|
+
end
|
177
|
+
|
178
|
+
def scale_app(appid,instance)
|
179
|
+
json_get("#{PI::APP_PATH}/scale?appId=#{appid}&instance=#{instance}")
|
180
|
+
end
|
181
|
+
|
182
|
+
def update_app(appid,tag)
|
183
|
+
json_get("#{PI::APP_PATH}/rollback?appId=#{appid}&tag=#{tag}")
|
184
|
+
end
|
185
|
+
|
186
|
+
def status(appname)
|
187
|
+
json_get("#{PI::APP_PATH}/monitor?appName=#{appname}")
|
188
|
+
end
|
189
|
+
|
190
|
+
def app_env(appname)
|
191
|
+
json_get("#{PI::APP_PATH}/env/list?appName=#{appname}")
|
192
|
+
end
|
193
|
+
|
194
|
+
def create_env(appname,manifest=nil)
|
195
|
+
json_post("#{PI::APP_PATH}/env/save?appName=#{appname}",manifest)
|
196
|
+
end
|
197
|
+
|
198
|
+
def delete_env(appname,manifest=nil)
|
199
|
+
json_post("#{PI::APP_PATH}/env/delete?appName=#{appname}",manifest)
|
200
|
+
end
|
201
|
+
|
202
|
+
def env_verify(appname,name)
|
203
|
+
http_get("#{PI::APP_PATH}/env/verify?appName=#{appname}&name=#{name}")
|
204
|
+
end
|
205
|
+
|
206
|
+
def app_log(appid,filepath,instanceindex)
|
207
|
+
http_get("#{PI::APP_PATH}/logs?appId=#{appid}&filePath=#{filepath}&instanceIndex=#{instanceindex}")
|
208
|
+
end
|
209
|
+
|
210
|
+
#####################################################
|
211
|
+
# services
|
212
|
+
#####################################################
|
213
|
+
|
214
|
+
def usable_services(appname)
|
215
|
+
json_get("#{PI::APP_PATH}/service/usable?appName=#{appname}")
|
216
|
+
end
|
217
|
+
|
218
|
+
def app_service(appname)
|
219
|
+
json_get("#{PI::APP_PATH}/service/binded?appName=#{appname}")
|
220
|
+
end
|
221
|
+
|
222
|
+
def bind_service(appname, manifest=nil)
|
223
|
+
json_post("#{PI::APP_PATH}/service/bind?appName=#{appname}",manifest)
|
224
|
+
end
|
225
|
+
|
226
|
+
def unbind_service(appname, manifest=nil)
|
227
|
+
json_post("#{PI::APP_PATH}/service/unbind?appName=#{appname}",manifest)
|
228
|
+
end
|
229
|
+
|
230
|
+
#####################################################
|
231
|
+
# dns
|
232
|
+
#####################################################
|
233
|
+
|
234
|
+
def usable_dns(appname)
|
235
|
+
json_get("#{PI::APP_PATH}/url/usable?appName=#{appname}")
|
236
|
+
end
|
237
|
+
|
238
|
+
def app_dns(appname)
|
239
|
+
json_get("#{PI::APP_PATH}/url/mapped?appName=#{appname}")
|
240
|
+
end
|
241
|
+
|
242
|
+
def map_dns(appname, manifest=nil)
|
243
|
+
json_post("#{PI::APP_PATH}/url/map?appName=#{appname}",manifest)
|
244
|
+
end
|
245
|
+
|
246
|
+
def unmap_dns(appname, manifest=nil)
|
247
|
+
json_post("#{PI::APP_PATH}/url/unmap?appName=#{appname}",manifest)
|
248
|
+
end
|
249
|
+
|
250
|
+
#####################################################
|
251
|
+
# administration
|
252
|
+
#####################################################
|
253
|
+
|
254
|
+
def admin_domains
|
255
|
+
json_get("#{PI::ADMIN_PATH}/domains")
|
256
|
+
end
|
257
|
+
|
258
|
+
def admin_users(domainid)
|
259
|
+
json_get("#{PI::ADMIN_PATH}/users?query=domain_id%3D#{domainid}")
|
260
|
+
end
|
261
|
+
|
117
262
|
######################################################
|
118
263
|
|
119
264
|
private
|
@@ -162,7 +307,7 @@ class PI::Client
|
|
162
307
|
request(:delete, path,content_type)
|
163
308
|
end
|
164
309
|
|
165
|
-
def request(method, path, content_type = nil,
|
310
|
+
def request(method, path, content_type = nil, payload = nil, headers = {})
|
166
311
|
headers = headers.dup
|
167
312
|
headers['Authentication'] = @auth_token if @auth_token
|
168
313
|
if content_type
|
@@ -232,11 +377,11 @@ class PI::Client
|
|
232
377
|
|
233
378
|
def parse_error_message(status, body)
|
234
379
|
parsed_body = json_parse(body.to_s)
|
235
|
-
if parsed_body && parsed_body[:
|
236
|
-
desc = parsed_body[:
|
237
|
-
"
|
380
|
+
if parsed_body && parsed_body[:errorCode] && parsed_body[:errorDescription]
|
381
|
+
desc = parsed_body[:errorDescription].gsub("\"","'")
|
382
|
+
"\nError (#{parsed_body[:errorCode]}): #{desc}"
|
238
383
|
else
|
239
|
-
"
|
384
|
+
"\nError (HTTP #{status}): #{body}"
|
240
385
|
end
|
241
386
|
rescue JSON::ParserError
|
242
387
|
if body.nil? || body.empty?
|