ubalo 0.0.15 → 0.0.16
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/bin/ubalo +7 -11
- data/lib/ubalo.rb +44 -14
- metadata +10 -10
data/bin/ubalo
CHANGED
@@ -381,17 +381,15 @@ command :clear_keys do |c|
|
|
381
381
|
end
|
382
382
|
end
|
383
383
|
|
384
|
-
desc '
|
385
|
-
arg_name '<pod name>'
|
384
|
+
desc 'Edit your environment'
|
386
385
|
command :edit do |c|
|
387
386
|
c.action do |global_options,options,args|
|
388
|
-
|
389
|
-
ubalo.ssh(
|
387
|
+
username = args.first || local_username
|
388
|
+
ubalo.ssh(username)
|
390
389
|
end
|
391
390
|
end
|
392
391
|
|
393
|
-
desc 'Copy files to or from
|
394
|
-
arg_name '<pod name>'
|
392
|
+
desc 'Copy files to or from your environment'
|
395
393
|
command :cp do |c|
|
396
394
|
c.desc 'copy recursively'
|
397
395
|
c.switch :r
|
@@ -400,13 +398,11 @@ command :cp do |c|
|
|
400
398
|
opts = ""
|
401
399
|
opts << " -r" if options.r
|
402
400
|
|
403
|
-
|
404
|
-
|
405
|
-
ssh_path, environ = ubalo.ssh_path(normalize_pod_name(pod_name))
|
406
|
-
"#{ssh_path}"
|
401
|
+
scp_args = args.join(" ").gsub(/ubalo(?=:)/) do
|
402
|
+
ubalo.ssh_path
|
407
403
|
end
|
408
404
|
|
409
|
-
ubalo.scp(
|
405
|
+
ubalo.scp(local_username, opts, scp_args)
|
410
406
|
end
|
411
407
|
end
|
412
408
|
|
data/lib/ubalo.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'time'
|
1
2
|
require 'rest-client'
|
2
3
|
require 'json'
|
3
4
|
require 'open3'
|
@@ -52,7 +53,7 @@ end
|
|
52
53
|
class Ubalo
|
53
54
|
class << self
|
54
55
|
def format_task task
|
55
|
-
"#{task['label']} #{"(#{task['state']})".lfit(10)} - #{task['pod_name']} (#{task['
|
56
|
+
"#{task['label']} #{"(#{task['state']})".lfit(10)} - #{task['pod_name']} (#{time_ago_in_words task['submitted_at']})"
|
56
57
|
end
|
57
58
|
|
58
59
|
def format_pod pod, with_username
|
@@ -63,6 +64,30 @@ class Ubalo
|
|
63
64
|
end
|
64
65
|
" #{name} - #{pod['language']}"
|
65
66
|
end
|
67
|
+
|
68
|
+
private
|
69
|
+
def pluralize count, word
|
70
|
+
if count == 1
|
71
|
+
"#{count} #{word}"
|
72
|
+
else
|
73
|
+
"#{count} #{word}s"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def time_ago_in_words time
|
78
|
+
seconds = Time.now - Time.parse(time)
|
79
|
+
case
|
80
|
+
when seconds < 60
|
81
|
+
"#{pluralize seconds.floor, "second"} ago"
|
82
|
+
when seconds/60 < 60
|
83
|
+
"#{pluralize (seconds/60).floor, "minute"} ago"
|
84
|
+
when seconds/60/60 < 24
|
85
|
+
"#{pluralize (seconds/60/60).floor, "hour"} ago"
|
86
|
+
else
|
87
|
+
"#{pluralize (seconds/60/60/24).floor, "day"} ago"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
66
91
|
end
|
67
92
|
|
68
93
|
attr_reader :base_url
|
@@ -149,29 +174,28 @@ class Ubalo
|
|
149
174
|
post(:upload_code, {:pod_name => name, :code => code})
|
150
175
|
end
|
151
176
|
|
152
|
-
def ssh_path
|
153
|
-
h = get(:ssh_path
|
154
|
-
|
177
|
+
def ssh_path
|
178
|
+
h = get(:ssh_path)
|
179
|
+
h.fetch('ssh_path')
|
155
180
|
end
|
156
181
|
|
157
182
|
def pods
|
158
183
|
get(:pods)
|
159
184
|
end
|
160
185
|
|
161
|
-
def ssh(
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
Process.spawn({'UBALO_ENVIRON' => environ}, ssh_command)
|
186
|
+
def ssh(username)
|
187
|
+
puts "Opening an ssh connection to edit the environment belonging to #{username}."
|
188
|
+
ssh_command = "ssh -o SendEnv='UBALO_DISTRIBUTION_OWNER TERM' -tq #{ssh_path}"
|
189
|
+
Process.spawn({'UBALO_DISTRIBUTION_OWNER' => username}, ssh_command)
|
166
190
|
pid, status = Process.wait2
|
167
191
|
unless status.success?
|
168
192
|
abort "Error running ssh"
|
169
193
|
end
|
170
194
|
end
|
171
195
|
|
172
|
-
def scp(
|
173
|
-
scp_command =
|
174
|
-
Process.spawn({'
|
196
|
+
def scp(username, opts, args)
|
197
|
+
scp_command = "scp -o SendEnv=UBALO_DISTRIBUTION_OWNER #{opts} #{args}"
|
198
|
+
Process.spawn({'UBALO_DISTRIBUTION_OWNER' => username}, scp_command)
|
175
199
|
pid, status = Process.wait2
|
176
200
|
unless status.success?
|
177
201
|
abort "Error running cp"
|
@@ -190,7 +214,13 @@ class Ubalo
|
|
190
214
|
puts " pod: #{result['pod_name']}"
|
191
215
|
puts " arg: #{result['arg']}"
|
192
216
|
puts " state: #{result['state']}"
|
193
|
-
|
217
|
+
case result['exit_type']
|
218
|
+
when 'exited'
|
219
|
+
puts "status: #{result['exit_result']}"
|
220
|
+
when 'terminated'
|
221
|
+
puts "terminated with signal: #{result['exit_result']}"
|
222
|
+
end
|
223
|
+
|
194
224
|
if result['stdout']
|
195
225
|
puts "stdout:"
|
196
226
|
puts result['stdout'].indent
|
@@ -221,7 +251,7 @@ class Ubalo
|
|
221
251
|
def push pod_url, contents
|
222
252
|
url_post("#{pod_url}/api/push", :contents => contents)
|
223
253
|
end
|
224
|
-
|
254
|
+
|
225
255
|
def pull pod_url
|
226
256
|
url_get("#{pod_url}/api/pull")['contents']
|
227
257
|
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.
|
4
|
+
version: 0.0.16
|
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:
|
12
|
+
date: 2012-01-03 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gli
|
16
|
-
requirement: &
|
16
|
+
requirement: &70254281845560 !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: *
|
24
|
+
version_requirements: *70254281845560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: highline
|
27
|
-
requirement: &
|
27
|
+
requirement: &70254281845120 !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: *
|
35
|
+
version_requirements: *70254281845120
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: json
|
38
|
-
requirement: &
|
38
|
+
requirement: &70254281844640 !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: *
|
46
|
+
version_requirements: *70254281844640
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rest-client
|
49
|
-
requirement: &
|
49
|
+
requirement: &70254281844000 !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: *
|
57
|
+
version_requirements: *70254281844000
|
58
58
|
description: CLI and API client for Ubalo
|
59
59
|
email: dev@ubalo.com
|
60
60
|
executables:
|