ubalo 0.0.17 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/bin/ubalo +54 -41
  2. data/lib/ubalo.rb +50 -40
  3. data/lib/ubalo/version.rb +1 -1
  4. metadata +10 -10
data/bin/ubalo CHANGED
@@ -90,7 +90,7 @@ command :pods do |c|
90
90
  puts " (none)"
91
91
  else
92
92
  your_pods.each do |pod|
93
- puts Ubalo.format_pod(pod, false)
93
+ puts Ubalo.format_pod(pod)
94
94
  end
95
95
  end
96
96
 
@@ -100,7 +100,7 @@ command :pods do |c|
100
100
  puts " (none)"
101
101
  else
102
102
  other_pods.each do |pod|
103
- puts Ubalo.format_pod(pod, true)
103
+ puts Ubalo.format_pod(pod)
104
104
  end
105
105
  end
106
106
  end
@@ -123,7 +123,7 @@ def process_download response, destination_path=nil
123
123
  name = response.fetch('name')
124
124
  fullname = response.fetch('fullname')
125
125
  url = response.fetch('url')
126
- files = response.fetch('current_version').fetch('files')
126
+ files = response.fetch('files')
127
127
  destination_path ||= name
128
128
 
129
129
  if File.exists?(destination_path)
@@ -168,8 +168,8 @@ command :create do |c|
168
168
 
169
169
  c.desc "Pod name"
170
170
  c.flag :name
171
- c.desc "Pod type"
172
- c.flag :type
171
+ c.desc "Pod template"
172
+ c.flag :template
173
173
 
174
174
  c.action do |global_options,options,args|
175
175
  if options.name
@@ -187,20 +187,22 @@ command :create do |c|
187
187
  end
188
188
 
189
189
  templates = ubalo.available_templates
190
- if options['type']
191
- pod_type = options['type']
192
- unless templates.include? pod_type
193
- raise UbaloMessage, "Invalid pod type"
190
+ template_names = templates.map{|t| t['name']}
191
+
192
+ if options['template']
193
+ template_name = options['template']
194
+ unless template_names.include? template_name
195
+ raise UbaloMessage, "Invalid template name"
194
196
  end
195
197
  else
196
- pod_type = hl.choose do |menu|
197
- menu.prompt = "New pod type: "
198
- menu.choices(*templates.keys)
198
+ template_name = hl.choose do |menu|
199
+ menu.prompt = "Template for your new pod: "
200
+ menu.choices(*template_names)
199
201
  end
200
202
  end
201
203
 
202
- $stderr.print "Creating a new #{pod_type} pod called #{pod_name}..."
203
- response = ubalo.create_pod(pod_name, templates.fetch(pod_type))
204
+ $stderr.print "Creating a new #{template_name} pod called #{pod_name}..."
205
+ response = ubalo.create_pod(pod_name, template_name)
204
206
 
205
207
  fullname, destination_path = process_download(response)
206
208
 
@@ -209,6 +211,26 @@ command :create do |c|
209
211
  end
210
212
  end
211
213
 
214
+ desc 'Delete a pod'
215
+ arg_name '<pod name>'
216
+ command :delete do |c|
217
+ c.action do |global_options,options,args|
218
+ pod_name = normalize_pod_name(args.shift)
219
+
220
+ hl.choose do |menu|
221
+ menu.prompt = "Are you sure you want to delete #{pod_name}? "
222
+ menu.choice :yes do
223
+ $stderr.print "Deleting #{pod_name}..."
224
+ response = ubalo.delete_pod(pod_name)
225
+ $stderr.puts " done."
226
+ end
227
+ menu.choice :no do
228
+ raise UbaloMessage, "Cancelled! No changes made to #{pod_name}."
229
+ end
230
+ end
231
+ end
232
+ end
233
+
212
234
  desc 'Run a pod'
213
235
  arg_name '<pod name>'
214
236
  command :run do |c|
@@ -292,21 +314,23 @@ command :stop do |c|
292
314
  end
293
315
  end
294
316
 
295
- desc 'Upload your ssh key (defaults to ~/.ssh/id_rsa.pub)'
317
+ desc 'Add an ssh key (defaults to ~/.ssh/id_rsa.pub)'
296
318
  arg_name '<file containing ssh key>'
297
319
  command :add_key do |c|
298
320
  c.action do |global_options,options,args|
299
321
  public_key_file = args.shift
300
- public_key_file ||= File.expand_path('~/.ssh/id_rsa.pub')
322
+ public_key_file ||= '~/.ssh/id_rsa.pub'
301
323
 
302
- puts ubalo.upload_key(File.read(public_key_file)).fetch('message')
324
+ response = ubalo.upload_key(File.read(File.expand_path(public_key_file)))
325
+ puts "Success! Key uploaded."
303
326
  end
304
327
  end
305
328
 
306
329
  desc 'Clear your ssh key'
307
330
  command :clear_key do |c|
308
331
  c.action do |global_options,options,args|
309
- puts ubalo.clear_key.fetch('message')
332
+ ubalo.clear_key
333
+ puts "Success! Key cleared."
310
334
  end
311
335
  end
312
336
 
@@ -324,7 +348,7 @@ command :push do |c|
324
348
 
325
349
  print "Uploading changes to #{filenames.first}... "
326
350
  result = ubalo.push(local_config.fetch('pod_url'), contents)
327
- puts result.fetch('message')
351
+ puts "Code changes saved."
328
352
  end
329
353
  end
330
354
 
@@ -365,25 +389,6 @@ command :pull do |c|
365
389
  end
366
390
  end
367
391
 
368
- desc 'Add an ssh key (defaults to ~/.ssh/id_rsa.pub)'
369
- arg_name '<file containing ssh key>'
370
- command :add_key do |c|
371
- c.action do |global_options,options,args|
372
- public_key_file = args.shift
373
- public_key_file ||= File.expand_path('~/.ssh/id_rsa.pub')
374
-
375
- response = ubalo.upload_key(File.read(public_key_file))
376
- puts response.fetch('message')
377
- end
378
- end
379
-
380
- desc 'Clear all ssh keys'
381
- command :clear_keys do |c|
382
- c.action do |global_options,options,args|
383
- puts ubalo.clear_keys.fetch('message')
384
- end
385
- end
386
-
387
392
  desc 'Edit your environment'
388
393
  command :edit do |c|
389
394
  c.action do |global_options,options,args|
@@ -421,10 +426,18 @@ end
421
426
 
422
427
  desc 'Enter username and password for access'
423
428
  command :login do |c|
429
+ c.desc "Username"
430
+ c.flag :username
431
+ c.desc "Password"
432
+ c.flag :password
433
+
424
434
  c.action do |global_options,options,args|
425
- puts "Please enter your Ubalo details for command-line access."
426
- login = hl.ask(" login: "){|q| q.echo = true}
427
- password = hl.ask(" password: "){|q| q.echo = false}
435
+ unless options[:username] and options[:password]
436
+ puts "Please enter your Ubalo details for command-line access."
437
+ end
438
+
439
+ login = options[:username] || hl.ask(" login: "){|q| q.echo = true}
440
+ password = options[:password] || hl.ask(" password: "){|q| q.echo = false}
428
441
 
429
442
  response = ubalo.get_authorization(login, password)
430
443
  ubalo.authorization = response.fetch('authorization')
data/lib/ubalo.rb CHANGED
@@ -56,13 +56,8 @@ class Ubalo
56
56
  "#{task['label']} #{"(#{task['state']})".lfit(10)} - #{task['pod_name']} (#{time_ago_in_words task['submitted_at']})"
57
57
  end
58
58
 
59
- def format_pod pod, with_username
60
- if with_username
61
- name = pod['fullname']
62
- else
63
- name = pod['name']
64
- end
65
- " #{name} - #{pod['language_name']}"
59
+ def format_pod pod
60
+ " #{pod.fetch('fullname')} - #{pod.fetch('language_name')}"
66
61
  end
67
62
 
68
63
  private
@@ -102,33 +97,44 @@ class Ubalo
102
97
  @base_url = base_url
103
98
  end
104
99
 
105
- def get(action, params={})
106
- url = "#{base_url}/api/#{action}"
107
- url_get(url, params)
100
+ def request(method, url, params)
101
+ if method == :get
102
+ response = RestClient.get url, add_headers(:params => params, :accept => :json)
103
+ elsif method == :post
104
+ response = RestClient.post url, params, add_headers(:accept => :json)
105
+ elsif method == :put
106
+ response = RestClient.put url, params, add_headers(:accept => :json)
107
+ elsif method == :delete
108
+ response = RestClient.delete url, add_headers(:accept => :json)
109
+ else
110
+ raise "don't understand request method #{method.inspect}"
111
+ end
112
+ parse(response)
108
113
  end
109
114
 
110
- def url_get url, params={}
111
- response = RestClient.get url, add_headers(:params => params, :accept => :json)
112
- parse(response)
115
+ def post(url, params={})
116
+ request(:post, url, params)
113
117
  end
114
118
 
115
- def post(action, params={})
116
- url = "#{base_url}/api/#{action}"
117
- url_post(url, params)
119
+ def get(url, params={})
120
+ request(:get, url, params)
118
121
  end
119
122
 
120
- def url_post(url, params={})
121
- response = RestClient.post url, params, add_headers(:accept => :json)
122
- parse(response)
123
+ def put(url, params={})
124
+ request(:put, url, params)
125
+ end
126
+
127
+ def delete(url)
128
+ request(:delete, url, {})
123
129
  end
124
130
 
125
131
  def whoami
126
- response = get(:whoami)
127
- "You are #{response['username']}, with role #{response['role']}. You have #{response['pod_count']} pods."
132
+ response = get("#{base_url}/user")
133
+ "You are #{response['username']}, with role #{response['role']}."
128
134
  end
129
135
 
130
136
  def tasks count
131
- get(:tasks, :count => count)
137
+ get("#{base_url}/api/tasks", :count => count)
132
138
  end
133
139
 
134
140
  def submit_task(pod_name, arg)
@@ -136,7 +142,7 @@ class Ubalo
136
142
  end
137
143
 
138
144
  def submit_task_json hash
139
- post(:submit_task, hash)
145
+ post("#{base_url}/api/submit_task", hash)
140
146
  end
141
147
 
142
148
  def wait_task(label, silent=false)
@@ -159,28 +165,28 @@ class Ubalo
159
165
  end
160
166
 
161
167
  def upload_key(key)
162
- post(:upload_key, :key => key)
168
+ put("#{base_url}/user", :user => {:ssh_key => key})
163
169
  end
164
170
 
165
171
  def clear_key
166
- post(:clear_key)
172
+ put("#{base_url}/user", :user => {:ssh_key => nil})
167
173
  end
168
174
 
169
- def download(name)
170
- get(:download, :pod_name => name)
175
+ def download(pod_name)
176
+ get("#{base_url}/pods/#{pod_name}/files")
171
177
  end
172
178
 
173
179
  def upload_code(name, code)
174
- post(:upload_code, {:pod_name => name, :code => code})
180
+ post("#{base_url}/api/upload_code", {:pod_name => name, :code => code})
175
181
  end
176
182
 
177
183
  def ssh_path
178
- h = get(:ssh_path)
184
+ h = get("#{base_url}/api/ssh_path")
179
185
  h.fetch('ssh_path')
180
186
  end
181
187
 
182
188
  def pods
183
- get(:pods)
189
+ get("#{base_url}/pods")
184
190
  end
185
191
 
186
192
  def ssh(username, action)
@@ -202,7 +208,7 @@ class Ubalo
202
208
  end
203
209
 
204
210
  def stop_task(label)
205
- post(:stop_task, {:label => label})
211
+ post("#{base_url}/api/stop_task", {:label => label})
206
212
  end
207
213
 
208
214
  def show_result(result, json=false)
@@ -236,23 +242,23 @@ class Ubalo
236
242
  end
237
243
 
238
244
  def get_authorization login, password
239
- post(:get_authorization, :user => {:login => login, :password => password})
245
+ post("#{base_url}/user/authorization", :user => {:login => login, :password => password})
240
246
  end
241
247
 
242
248
  def available_templates
243
- get(:available_templates)['templates']
249
+ get("#{base_url}/templates")
244
250
  end
245
251
 
246
- def create_pod name, pod_type
247
- post(:create_pod, :template => pod_type, :pod_name => name)
252
+ def create_pod name, template
253
+ post("#{base_url}/templates/#{template}/pods", :pod => {:name => name})
248
254
  end
249
255
 
250
256
  def push pod_url, contents
251
- url_post("#{pod_url}/api/push", :contents => contents)
257
+ post("#{pod_url}/files", :contents => contents)
252
258
  end
253
259
 
254
260
  def pull pod_url
255
- url_get("#{pod_url}/api/pull")['contents']
261
+ get("#{pod_url}/files")['files']
256
262
  end
257
263
 
258
264
  def check_task label
@@ -260,15 +266,19 @@ class Ubalo
260
266
  end
261
267
 
262
268
  def check_task_json hash
263
- get(:check_task, hash)
269
+ get("#{base_url}/api/check_task", hash)
264
270
  end
265
271
 
266
272
  def publish pod_name
267
- url_post("#{base_url}/pods/#{pod_name}/publish")
273
+ post("#{base_url}/pods/#{pod_name}/publish")
274
+ end
275
+
276
+ def delete_pod pod_name
277
+ delete("#{base_url}/pods/#{pod_name}")
268
278
  end
269
279
 
270
280
  def unpublish pod_name
271
- url_post("#{base_url}/pods/#{pod_name}/unpublish")
281
+ post("#{base_url}/pods/#{pod_name}/unpublish")
272
282
  end
273
283
 
274
284
  private
data/lib/ubalo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Ubalo
2
- VERSION = "0.0.17"
2
+ VERSION = "0.0.19"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ubalo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-12 00:00:00.000000000Z
12
+ date: 2012-01-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gli
16
- requirement: &70162737169520 !ruby/object:Gem::Requirement
16
+ requirement: &70217556672060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70162737169520
24
+ version_requirements: *70217556672060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: highline
27
- requirement: &70162737168820 !ruby/object:Gem::Requirement
27
+ requirement: &70217556671440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70162737168820
35
+ version_requirements: *70217556671440
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &70162737168140 !ruby/object:Gem::Requirement
38
+ requirement: &70217556670920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70162737168140
46
+ version_requirements: *70217556670920
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rest-client
49
- requirement: &70162737167480 !ruby/object:Gem::Requirement
49
+ requirement: &70217556670260 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.6.3
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70162737167480
57
+ version_requirements: *70217556670260
58
58
  description: CLI and API client for Ubalo
59
59
  email: dev@ubalo.com
60
60
  executables: