right_chimp 2.1.10 → 2.1.12
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +19 -4
- data/chimp.gemspec +3 -0
- data/lib/right_chimp/Chimp.rb +20 -4
- data/lib/right_chimp/daemon/ChimpDaemon.rb +29 -0
- data/lib/right_chimp/exec/ExecRightScript.rb +11 -8
- data/lib/right_chimp/exec/Executor.rb +27 -28
- data/lib/right_chimp/objects/ChimpObjects.rb +11 -2
- data/lib/right_chimp/templates/all_jobs.erb +28 -3
- data/lib/right_chimp/templates/default.css +25 -0
- data/lib/right_chimp/version.rb +1 -1
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc15b41e6fcc5ea1696d6255206015000f9a31ee
|
4
|
+
data.tar.gz: 462e82c8dc41dfb152fa2218be76f8dbe04b1c1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0a8baa2ba2a7b35585d4d6c73a339d03d59cd21b7d02cb576f2f25f0f1fd502ee9d059f619b19d88628611563566de1fad78eddcdf02d274c19aab14df76d82
|
7
|
+
data.tar.gz: 7cc171141adc3b7c1204489c234e22e3e13ad6461591a47f68910ff31c5e87cbaa32c7d12b28d5e7cc7fbd669ed953a7fde5aedfd5d892ff73154d6a7520b70c
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
right_chimp (2.1.
|
4
|
+
right_chimp (2.1.12)
|
5
5
|
highline (~> 1.7.2)
|
6
6
|
nokogiri (~> 1.6.7.1)
|
7
7
|
progressbar (~> 0.11.0)
|
@@ -11,19 +11,31 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
+
binding_of_caller (0.7.2)
|
15
|
+
debug_inspector (>= 0.0.1)
|
16
|
+
coderay (1.1.0)
|
17
|
+
debug_inspector (0.0.2)
|
14
18
|
diff-lcs (1.1.3)
|
15
|
-
domain_name (0.5.
|
19
|
+
domain_name (0.5.20160128)
|
16
20
|
unf (>= 0.0.5, < 1.0.0)
|
17
21
|
highline (1.7.8)
|
18
22
|
http-cookie (1.0.2)
|
19
23
|
domain_name (~> 0.5)
|
20
24
|
json (1.8.3)
|
25
|
+
method_source (0.8.2)
|
21
26
|
mime-types (1.25.1)
|
22
27
|
mini_portile2 (2.0.0)
|
23
28
|
netrc (0.11.0)
|
24
|
-
nokogiri (1.6.7.
|
29
|
+
nokogiri (1.6.7.2)
|
25
30
|
mini_portile2 (~> 2.0.0.rc2)
|
26
31
|
progressbar (0.11.0)
|
32
|
+
pry (0.10.3)
|
33
|
+
coderay (~> 1.1.0)
|
34
|
+
method_source (~> 0.8.1)
|
35
|
+
slop (~> 3.4)
|
36
|
+
pry-stack_explorer (0.4.9.2)
|
37
|
+
binding_of_caller (>= 0.7)
|
38
|
+
pry (>= 0.9.11)
|
27
39
|
rake (10.4.2)
|
28
40
|
rest-client (1.8.0)
|
29
41
|
http-cookie (>= 1.0.2, < 2.0)
|
@@ -41,14 +53,17 @@ GEM
|
|
41
53
|
rspec-expectations (2.6.0)
|
42
54
|
diff-lcs (~> 1.1.2)
|
43
55
|
rspec-mocks (2.6.0)
|
56
|
+
slop (3.6.0)
|
44
57
|
unf (0.1.4)
|
45
58
|
unf_ext
|
46
|
-
unf_ext (0.0.7.
|
59
|
+
unf_ext (0.0.7.2)
|
47
60
|
|
48
61
|
PLATFORMS
|
49
62
|
ruby
|
50
63
|
|
51
64
|
DEPENDENCIES
|
65
|
+
pry
|
66
|
+
pry-stack_explorer
|
52
67
|
right_chimp!
|
53
68
|
rspec (~> 2.6.0)
|
54
69
|
|
data/chimp.gemspec
CHANGED
data/lib/right_chimp/Chimp.rb
CHANGED
@@ -223,7 +223,7 @@ module Chimp
|
|
223
223
|
}
|
224
224
|
}
|
225
225
|
|
226
|
-
|
226
|
+
Log.debug "[#{Chimp.get_job_uuid}] Found #{@servers.count} servers for that array query"
|
227
227
|
|
228
228
|
end
|
229
229
|
# The result will be stored (not returned) into @servers
|
@@ -332,7 +332,8 @@ module Chimp
|
|
332
332
|
[ '--group-concurrency', '-3', GetoptLong::REQUIRED_ARGUMENT ],
|
333
333
|
[ '--timing-log', '-4', GetoptLong::REQUIRED_ARGUMENT ],
|
334
334
|
[ '--timeout', '-5', GetoptLong::REQUIRED_ARGUMENT ],
|
335
|
-
[ '--noverify', '-6', GetoptLong::NO_ARGUMENT ]
|
335
|
+
[ '--noverify', '-6', GetoptLong::NO_ARGUMENT ],
|
336
|
+
[ '--exact-matching', '-8', GetoptLong::NO_ARGUMENT ]
|
336
337
|
)
|
337
338
|
|
338
339
|
opts.each do |opt, arg|
|
@@ -433,6 +434,8 @@ module Chimp
|
|
433
434
|
@timeout = arg
|
434
435
|
when '--noverify'
|
435
436
|
@verify = false
|
437
|
+
when '--exact-matching'
|
438
|
+
@exact = true
|
436
439
|
end
|
437
440
|
end
|
438
441
|
|
@@ -556,7 +559,11 @@ module Chimp
|
|
556
559
|
servers = []
|
557
560
|
all_instances = Connection.all_instances
|
558
561
|
|
559
|
-
|
562
|
+
if @exact
|
563
|
+
result = all_instances.select {|i| names.any? {|n| i['links']['deployment']['name'].eql? n }}
|
564
|
+
else
|
565
|
+
result = all_instances.select {|i| names.any? {|n| i['links']['deployment']['name'] =~ /#{n}/ }}
|
566
|
+
end
|
560
567
|
servers = result
|
561
568
|
|
562
569
|
return(servers)
|
@@ -577,7 +584,16 @@ module Chimp
|
|
577
584
|
result = Connection.client.server_arrays.index(:filter => ["name==#{array_name}"])
|
578
585
|
# Result is an array with all the server arrays
|
579
586
|
if result.size != 0
|
580
|
-
|
587
|
+
if @exact
|
588
|
+
#remove results that do not exactly match
|
589
|
+
result.each{ |r|
|
590
|
+
if array_names.include?(r.raw['name'])
|
591
|
+
arrays_hrefs += [ r.href ]
|
592
|
+
end
|
593
|
+
}
|
594
|
+
else
|
595
|
+
arrays_hrefs += result.collect(&:href)
|
596
|
+
end
|
581
597
|
else
|
582
598
|
if @ignore_errors
|
583
599
|
Log.debug "[#{Chimp.get_job_uuid}] Could not find array \"#{array_name}\""
|
@@ -199,6 +199,7 @@ module Chimp
|
|
199
199
|
def install_signal_handlers
|
200
200
|
['INT', 'TERM'].each do |signal|
|
201
201
|
trap(signal) do
|
202
|
+
puts "Terminating..."
|
202
203
|
self.quit
|
203
204
|
end
|
204
205
|
end
|
@@ -587,6 +588,34 @@ module Chimp
|
|
587
588
|
raise WEBrick::HTTPStatus::OK
|
588
589
|
end
|
589
590
|
|
591
|
+
#
|
592
|
+
# Attempt to return just 1 job data
|
593
|
+
#
|
594
|
+
if req.request_uri.path =~ /jobs\.json\/id\/*\w{6}$/
|
595
|
+
|
596
|
+
job_uid = File.basename(req.request_uri.path)
|
597
|
+
#instance the queue
|
598
|
+
queue = ChimpQueue.instance
|
599
|
+
|
600
|
+
my_hash = {}
|
601
|
+
|
602
|
+
#! Multiple servers WILL match for the same job_uuid
|
603
|
+
queue.group.each { |group|
|
604
|
+
#per each group, locate all jobs
|
605
|
+
group[1].get_jobs.each {|job|
|
606
|
+
my_hash[job.job_uuid] = { job.job_id => { "state" => job.results,
|
607
|
+
"server" => job.server.params["name"],
|
608
|
+
"audit_entry" => job.audit_entry_data,
|
609
|
+
}
|
610
|
+
}
|
611
|
+
}
|
612
|
+
}
|
613
|
+
|
614
|
+
resp.body = my_hash[job_uid].to_json
|
615
|
+
|
616
|
+
raise WEBrick::HTTPStatus::OK
|
617
|
+
end
|
618
|
+
|
590
619
|
|
591
620
|
#
|
592
621
|
# Check for static CSS files and serve them
|
@@ -3,34 +3,37 @@
|
|
3
3
|
#
|
4
4
|
module Chimp
|
5
5
|
class ExecRightScript < Executor
|
6
|
-
|
6
|
+
|
7
|
+
attr_accessor :audit_entry_data
|
8
|
+
|
7
9
|
def run
|
8
10
|
options = {:ignore_lock => true}.merge(@inputs)
|
9
|
-
|
11
|
+
|
10
12
|
if @timeout < 300
|
11
13
|
Log.error "timeout was less than 5 minutes! resetting to 5 minutes"
|
12
14
|
@timeout = 300
|
13
15
|
end
|
14
|
-
|
16
|
+
|
15
17
|
run_with_retry do
|
16
18
|
task=Task.new
|
17
19
|
task.tasker = @server.run_executable(@exec, options)
|
18
20
|
task.wait_for_state("completed", @timeout)
|
19
|
-
@results = task.
|
21
|
+
@results = task.state
|
22
|
+
@audit_entry_data = task.details
|
20
23
|
end
|
21
24
|
end
|
22
|
-
|
25
|
+
|
23
26
|
def describe_work
|
24
27
|
return "[#{@job_uuid}] ExecRightScript job_id=#{@job_id} script=\"#{@exec.params['right_script']['name']}\" server=\"#{@server.nickname}\""
|
25
28
|
end
|
26
|
-
|
29
|
+
|
27
30
|
def info
|
28
31
|
return @exec.params['right_script']['name']
|
29
32
|
end
|
30
|
-
|
33
|
+
|
31
34
|
def target
|
32
35
|
return @server.nickname
|
33
36
|
end
|
34
|
-
|
37
|
+
|
35
38
|
end
|
36
39
|
end
|
@@ -7,9 +7,9 @@ module Chimp
|
|
7
7
|
attr_accessor :server, :array, :exec, :inputs, :template, :owner, :group,
|
8
8
|
:job_id, :job_uuid, :status, :dry_run, :verbose, :quiet, :timeout,
|
9
9
|
:retry_count, :retry_sleep, :time_start, :time_end, :error
|
10
|
-
|
10
|
+
|
11
11
|
attr_reader :results
|
12
|
-
|
12
|
+
|
13
13
|
STATUS_NONE = :none
|
14
14
|
STATUS_HOLDING = :holding
|
15
15
|
STATUS_RUNNING = :running
|
@@ -29,20 +29,19 @@ module Chimp
|
|
29
29
|
@inputs = h[:inputs] || nil
|
30
30
|
|
31
31
|
@verbose = h[:verbose] || false
|
32
|
-
|
32
|
+
|
33
33
|
@retry_count = h[:retry_count].to_i || 0
|
34
34
|
@retry_sleep = h[:retry_sleep].to_i || 30
|
35
35
|
@timeout = h[:timeout].to_i || 3600
|
36
|
-
|
36
|
+
|
37
37
|
@error = nil
|
38
38
|
@status = STATUS_NONE
|
39
39
|
@owner = nil
|
40
40
|
@dry_run = false
|
41
41
|
@quiet = false
|
42
|
-
|
42
|
+
|
43
43
|
@time_start = nil
|
44
44
|
@time_end = nil
|
45
|
-
@results = nil
|
46
45
|
end
|
47
46
|
|
48
47
|
#
|
@@ -57,21 +56,21 @@ module Chimp
|
|
57
56
|
return @time_end.to_i- @time_start.to_i
|
58
57
|
end
|
59
58
|
end
|
60
|
-
|
59
|
+
|
61
60
|
#
|
62
61
|
# Convenience method to queue a held job
|
63
62
|
#
|
64
63
|
def queue
|
65
64
|
@group.queue(self.job_id)
|
66
65
|
end
|
67
|
-
|
66
|
+
|
68
67
|
#
|
69
68
|
# Convenience method to requeue
|
70
69
|
#
|
71
70
|
def requeue
|
72
71
|
@group.requeue(self.job_id)
|
73
72
|
end
|
74
|
-
|
73
|
+
|
75
74
|
#
|
76
75
|
# Convenience method to cancel
|
77
76
|
#
|
@@ -82,21 +81,21 @@ module Chimp
|
|
82
81
|
def run
|
83
82
|
raise "run method must be overridden"
|
84
83
|
end
|
85
|
-
|
84
|
+
|
86
85
|
#
|
87
86
|
# return info on what this executor does -- eg name of script or command
|
88
87
|
#
|
89
88
|
def info
|
90
89
|
raise "unimplemented"
|
91
90
|
end
|
92
|
-
|
91
|
+
|
93
92
|
def target
|
94
93
|
return "UNKNOWN"
|
95
94
|
end
|
96
95
|
|
97
|
-
|
96
|
+
|
98
97
|
protected
|
99
|
-
|
98
|
+
|
100
99
|
#
|
101
100
|
# Run a unit of work with retries
|
102
101
|
# This is called from the subclass with a code block to yield to
|
@@ -108,36 +107,36 @@ module Chimp
|
|
108
107
|
@time_start = Time.now
|
109
108
|
|
110
109
|
Log.info self.describe_work_start unless @quiet
|
111
|
-
|
110
|
+
|
112
111
|
#
|
113
112
|
# The inner level of exception handling here tries to catch anything
|
114
113
|
# that can be easily retired or failed-- normal exceptions.
|
115
114
|
#
|
116
115
|
# The outer level of exception handling handles weird stuff; for example,
|
117
|
-
# sometimes rest_connection raises RuntimeError exceptions...
|
116
|
+
# sometimes rest_connection raises RuntimeError exceptions...
|
118
117
|
#
|
119
118
|
# This fixes acu75562.
|
120
119
|
#
|
121
120
|
begin
|
122
121
|
begin
|
123
122
|
yield if not @dry_run
|
124
|
-
|
123
|
+
|
125
124
|
if @owner != nil
|
126
125
|
@status = STATUS_DONE
|
127
126
|
@group.job_completed
|
128
127
|
else
|
129
128
|
Log.warn "[#{@job_uuid}] Ownership of job_id #{job_id} lost. User cancelled operation?"
|
130
129
|
end
|
131
|
-
|
130
|
+
|
132
131
|
rescue SystemExit, Interrupt => ex
|
133
132
|
$stderr.puts "Exiting!"
|
134
133
|
raise ex
|
135
|
-
|
134
|
+
|
136
135
|
rescue Interrupt => ex
|
137
136
|
name = @array['name'] if @array
|
138
137
|
name = @server['name'] || @server['nickname'] if @server
|
139
138
|
Log.error self.describe_work_error
|
140
|
-
|
139
|
+
|
141
140
|
if @retry_count > 0
|
142
141
|
@status = STATUS_RETRYING
|
143
142
|
Log.error "[#{@job_uuid}] Error executing on \"#{name}\". Retrying in #{@retry_sleep} seconds..."
|
@@ -145,16 +144,16 @@ module Chimp
|
|
145
144
|
sleep @retry_sleep
|
146
145
|
retry
|
147
146
|
end
|
148
|
-
|
147
|
+
|
149
148
|
@status = STATUS_ERROR
|
150
149
|
@error = ex
|
151
150
|
Log.error "[#{@job_uuid}] Error executing on \"#{name}\": #{ex}"
|
152
|
-
|
153
|
-
ensure
|
151
|
+
|
152
|
+
ensure
|
154
153
|
@time_end = Time.now
|
155
154
|
Log.info self.describe_work_done unless @quiet
|
156
155
|
end
|
157
|
-
|
156
|
+
|
158
157
|
rescue RuntimeError => ex
|
159
158
|
Log.error "[#{@job_uuid}] Caught RuntimeError: #{ex}. Aborting job."
|
160
159
|
Log.error ex.inspect
|
@@ -163,7 +162,7 @@ module Chimp
|
|
163
162
|
@error = ex
|
164
163
|
end
|
165
164
|
end
|
166
|
-
|
165
|
+
|
167
166
|
#
|
168
167
|
# This method should be overridden on Executor subclasses
|
169
168
|
# to provide a human readable description of the work
|
@@ -172,7 +171,7 @@ module Chimp
|
|
172
171
|
def describe_work
|
173
172
|
return "#{self.class.name} job_id=#{@job_id}"
|
174
173
|
end
|
175
|
-
|
174
|
+
|
176
175
|
def describe_work_start
|
177
176
|
return("#{self.describe_work} status=START")
|
178
177
|
end
|
@@ -180,13 +179,13 @@ module Chimp
|
|
180
179
|
def describe_work_done
|
181
180
|
return("#{self.describe_work} status=END time=#{@time_end.to_i-@time_start.to_i}s")
|
182
181
|
end
|
183
|
-
|
182
|
+
|
184
183
|
def describe_work_done_long
|
185
184
|
return("#{self.describe_work} status=END time_start=#{@time_start.to_i} time_end=#{@time_end.to_i} time_total=#{@time_end.to_i-@time_start.to_i}")
|
186
185
|
end
|
187
|
-
|
186
|
+
|
188
187
|
def describe_work_error
|
189
188
|
return("#{self.describe_work} status=ERROR")
|
190
|
-
end
|
189
|
+
end
|
191
190
|
end
|
192
191
|
end
|
@@ -45,6 +45,8 @@ module Chimp
|
|
45
45
|
# Figure out url to hit:
|
46
46
|
creds[:api_url] = "https://"+URI.parse(creds[:api_url]).host
|
47
47
|
|
48
|
+
@audit_url = creds[:api_url] + "/acct/" + creds[:account]
|
49
|
+
|
48
50
|
@endpoint = URI.parse(creds[:api_url]).host
|
49
51
|
|
50
52
|
Log.debug "Logging into Api 1.5 right_api_client"
|
@@ -71,6 +73,10 @@ module Chimp
|
|
71
73
|
@endpoint
|
72
74
|
end
|
73
75
|
|
76
|
+
def self.audit_url
|
77
|
+
@audit_url
|
78
|
+
end
|
79
|
+
|
74
80
|
#
|
75
81
|
# Returns every single operational instance in the account
|
76
82
|
#
|
@@ -283,10 +289,9 @@ module Chimp
|
|
283
289
|
while(timeout > 0)
|
284
290
|
state=self.tasker.show.summary
|
285
291
|
return true if self.state.match(desired_state)
|
286
|
-
friendly_url =
|
292
|
+
friendly_url = Connection.audit_url+"/audit_entries/"
|
287
293
|
friendly_url += self.href.split(/\//).last
|
288
294
|
friendly_url = friendly_url.gsub("ae-","")
|
289
|
-
# raise "FATAL error, #{self.tasker.show.summary}\n See Audit: API:#{self.href}, WWW:<a href='#{friendly_url}'>#{friendly_url}</a>\n " if self.state.match("failed")
|
290
295
|
raise "FATAL error, #{self.tasker.show.summary}\n See Audit: #{friendly_url}'\n " if self.state.match("failed")
|
291
296
|
sleep 30
|
292
297
|
timeout -= 30
|
@@ -305,6 +310,10 @@ module Chimp
|
|
305
310
|
def href
|
306
311
|
self.tasker.href
|
307
312
|
end
|
313
|
+
|
314
|
+
def details
|
315
|
+
self.tasker.show(:view => "extended").detail
|
316
|
+
end
|
308
317
|
end
|
309
318
|
|
310
319
|
#
|
@@ -1,7 +1,6 @@
|
|
1
1
|
<html><head>
|
2
2
|
<title>chimpd</title>
|
3
3
|
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
|
4
|
-
<meta http-equiv="refresh" content="5">
|
5
4
|
<link rel="stylesheet" href="default.css" title="default" />
|
6
5
|
<link rel="alternate stylesheet" href="greenscreen.css" title="greenscreen" />
|
7
6
|
<link rel="alternate stylesheet" href="hotdogstand.css" title="hotdogstand" />
|
@@ -19,16 +18,30 @@
|
|
19
18
|
xmlhttp.send();
|
20
19
|
}
|
21
20
|
|
21
|
+
var myRefreshTimeout;
|
22
|
+
|
23
|
+
/** Function to refresh the page at specified interval. **/
|
24
|
+
function startRefresh(refreshPeriod) {
|
25
|
+
myRefreshTimeout = setTimeout("window.location.reload();",refreshPeriod);
|
26
|
+
}
|
27
|
+
|
28
|
+
/** Function to stop refreshing the page. **/
|
29
|
+
function stopRefresh() {
|
30
|
+
clearTimeout(myRefreshTimeout);
|
31
|
+
window.location.hash = 'stop'
|
32
|
+
}
|
33
|
+
|
22
34
|
</script>
|
23
35
|
|
24
|
-
</head
|
36
|
+
</head>
|
37
|
+
<body onload="startRefresh(5000);">
|
38
|
+
|
25
39
|
|
26
40
|
<div id="stats">
|
27
41
|
|
28
42
|
<h1>chimpd <%=VERSION%> console</h1>
|
29
43
|
<p style="font-size: 90%; padding-left: 10px">FEATURING CUTTING EDGE META REFRESH<br/> TECHNOLOGY
|
30
44
|
SINCE 2012</p>
|
31
|
-
|
32
45
|
<h3>Queue Status</h3>
|
33
46
|
|
34
47
|
<table>
|
@@ -93,6 +106,15 @@ SINCE 2012</p>
|
|
93
106
|
<li> <a href="#" onclick="setActiveStyleSheet('invertedhotdogstand')">inverted hot dog stand</a></li>
|
94
107
|
</ol>
|
95
108
|
|
109
|
+
<h3>Auto Refresh</h3>
|
110
|
+
<ol>
|
111
|
+
<div class="btn-group">
|
112
|
+
<a class="btn btn-success" onclick="startRefresh()" id="start">Enable</a>
|
113
|
+
<a class="btn btn-danger" onclick="stopRefresh()" id="stop">Disable</a>
|
114
|
+
<p id="console"></p>
|
115
|
+
</div>
|
116
|
+
</ol>
|
117
|
+
|
96
118
|
</div>
|
97
119
|
|
98
120
|
<div id="jobs">
|
@@ -152,6 +174,9 @@ jobs.each do |j|
|
|
152
174
|
<li>Time: <%= time %></li>
|
153
175
|
<% if status != Executor::STATUS_RUNNING %>
|
154
176
|
<li>Results: <span style="color:#777"><%= j.results %></span></li>
|
177
|
+
<!-- HACK HERE THE LOOP CODE TO INJECT CSS TO HIDE/EXPAND-->
|
178
|
+
<li><label for="<%= id%>">Details (click to expand):</label> <input type="checkbox" id="<%= id%>"><span style="color:#777"><div id="d<%= id%>" class="job_details"><%= j.audit_entry_data %></div></span></li>
|
179
|
+
<!-- HACK HERE THE LOOP CODE TO INJECT CSS TO HIDE/EXPAND-->
|
155
180
|
<% end %>
|
156
181
|
|
157
182
|
<li> <span class="action">
|
@@ -79,3 +79,28 @@ a {
|
|
79
79
|
a:hover, ol a:hover {
|
80
80
|
text-decoration: underline;
|
81
81
|
}
|
82
|
+
|
83
|
+
|
84
|
+
/* Checkbox Hack */
|
85
|
+
li {
|
86
|
+
list-style-type: none;
|
87
|
+
}
|
88
|
+
input[type=checkbox] {
|
89
|
+
position: absolute;
|
90
|
+
top: -9999px;
|
91
|
+
left: -9999px;
|
92
|
+
}
|
93
|
+
label {
|
94
|
+
display: inline-block;
|
95
|
+
cursor: pointer;
|
96
|
+
}
|
97
|
+
|
98
|
+
/* Default State */
|
99
|
+
span div.job_details {
|
100
|
+
display: none;
|
101
|
+
}
|
102
|
+
|
103
|
+
/* Toggled State */
|
104
|
+
input[type=checkbox]:checked ~ span div.job_details {
|
105
|
+
display: block;
|
106
|
+
}
|
data/lib/right_chimp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_chimp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RightScale Operations
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 2.6.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry-stack_explorer
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
description: The Chimp is a tool for managing servers using the RightScale platform.
|
98
126
|
email:
|
99
127
|
- ops@rightscale.com
|
@@ -166,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
194
|
version: '0'
|
167
195
|
requirements: []
|
168
196
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.
|
197
|
+
rubygems_version: 2.5.1
|
170
198
|
signing_key:
|
171
199
|
specification_version: 4
|
172
200
|
summary: RightScale platform command-line tool
|