rhc 0.85.12 → 0.86.7
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/rhc-chk +58 -24
- data/bin/rhc-create-app +5 -5
- data/bin/rhc-ctl-app +2 -2
- data/bin/rhc-snapshot +3 -3
- data/bin/rhc-tail-files +5 -1
- data/lib/rhc +4 -4
- data/lib/rhc-common.rb +11 -14
- metadata +15 -15
data/bin/rhc-chk
CHANGED
@@ -186,7 +186,7 @@ module TestBase
|
|
186
186
|
ensure
|
187
187
|
$debuginfo['fetches'] ||= []
|
188
188
|
body = JSON.parse(response.body)
|
189
|
-
body['data'] = body['data'] ? JSON.parse(body['data']) : ''
|
189
|
+
body['data'] = body['data'] && body['data'] != '' ? JSON.parse(body['data']) : ''
|
190
190
|
$debuginfo['fetches'] << {url.to_s => {
|
191
191
|
'body' => body,
|
192
192
|
'header' => response.instance_variable_get(:@header)
|
@@ -205,16 +205,29 @@ end
|
|
205
205
|
#####################################################
|
206
206
|
# Tests start here #
|
207
207
|
#####################################################
|
208
|
-
# #
|
209
|
-
# Note: Tests and testcases are run alphabetically #
|
210
|
-
# #
|
208
|
+
# #
|
209
|
+
# Note: Tests and testcases are run alphabetically #
|
210
|
+
# #
|
211
211
|
#####################################################
|
212
212
|
|
213
213
|
def error_for(name,*args)
|
214
214
|
if name.kind_of? String
|
215
215
|
name = name.downcase.to_sym
|
216
216
|
end
|
217
|
-
sprintf(
|
217
|
+
message = sprintf(get_message(:errors,name),*args)
|
218
|
+
solution = get_message(:solutions,name)
|
219
|
+
if solution
|
220
|
+
message << "\n" << sprintf(solution,*args)
|
221
|
+
end
|
222
|
+
message
|
223
|
+
end
|
224
|
+
|
225
|
+
def get_message(type,name)
|
226
|
+
val = $messages[type][name]
|
227
|
+
if val.is_a? Symbol
|
228
|
+
val = get_message(type,val)
|
229
|
+
end
|
230
|
+
val
|
218
231
|
end
|
219
232
|
|
220
233
|
class Test1_Connectivity < Test::Unit::TestCase
|
@@ -292,14 +305,13 @@ class Test3_SSH < Test::Unit::TestCase
|
|
292
305
|
assert_not_nil $user_info, error_for(:no_account)
|
293
306
|
|
294
307
|
$remote_ssh_pubkeys = []
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
end
|
300
|
-
end
|
308
|
+
ssh_keys = RHC::get_ssh_keys($libra_server, $rhlogin, $password, $http)
|
309
|
+
my_keys = [ssh_keys['ssh_key'], ssh_keys['keys'].values.map{|k| k['key']}].flatten
|
310
|
+
my_keys.delete_if{|x| x.length == 0 }
|
311
|
+
$remote_ssh_pubkeys = my_keys
|
301
312
|
|
302
|
-
|
313
|
+
# Ensure that the user has ssh keys
|
314
|
+
assert(!$remote_ssh_pubkeys.empty?, error_for(:no_remote_pub_keys ) )
|
303
315
|
assert $remote_ssh_pubkeys.include?(@@local_derived_ssh_pubkey), error_for(:no_match_pub, @libra_kfile)
|
304
316
|
end
|
305
317
|
|
@@ -313,6 +325,7 @@ class Test3_SSH < Test::Unit::TestCase
|
|
313
325
|
assert_not_nil @@local_ssh_pubkey, error_for(:no_pubkey, 'the remote key')
|
314
326
|
|
315
327
|
# Test public key and remote key
|
328
|
+
assert_not_nil $user_info, error_for(:no_account)
|
316
329
|
assert $remote_ssh_pubkeys.include?(@@local_ssh_pubkey), error_for(:no_match_pub, @libra_kfile)
|
317
330
|
ensure
|
318
331
|
fp.close if fp
|
@@ -327,7 +340,7 @@ class Test3_SSH < Test::Unit::TestCase
|
|
327
340
|
# Make sure we can load keys from ssh-agent
|
328
341
|
assert !loaded_keys.empty?, error_for(:no_keys_loaded)
|
329
342
|
loaded_keys.map!{|key| key.split(' ')[1]}
|
330
|
-
|
343
|
+
|
331
344
|
assert_not_nil @@local_ssh_pubkey, error_for(:no_pubkey, 'the keys in ssh-agent')
|
332
345
|
assert loaded_keys.include?(@@local_ssh_pubkey),error_for(:pubkey_not_loaded)
|
333
346
|
end
|
@@ -366,7 +379,7 @@ class CheckRunner < Test::Unit::UI::Console::TestRunner
|
|
366
379
|
def initialize(*args)
|
367
380
|
super
|
368
381
|
@output_level = 1
|
369
|
-
puts
|
382
|
+
puts get_message(:status,:started)
|
370
383
|
end
|
371
384
|
|
372
385
|
def add_fault(fault)
|
@@ -402,9 +415,9 @@ class CheckRunner < Test::Unit::UI::Console::TestRunner
|
|
402
415
|
$debuginfo['errors'] = @faults
|
403
416
|
|
404
417
|
if @faults.empty?
|
405
|
-
print_underlined
|
418
|
+
print_underlined get_message(:status,:passed)
|
406
419
|
else
|
407
|
-
print_underlined
|
420
|
+
print_underlined get_message(:status,:failed)
|
408
421
|
@errors = []
|
409
422
|
# Need to separate the failures from the errors
|
410
423
|
|
@@ -420,7 +433,7 @@ class CheckRunner < Test::Unit::UI::Console::TestRunner
|
|
420
433
|
# Errors mean something in the test is broken, not just failed
|
421
434
|
unless @errors.empty?
|
422
435
|
@num = 0
|
423
|
-
print_underlined
|
436
|
+
print_underlined get_message(:status,:error)
|
424
437
|
@errors.each do |e|
|
425
438
|
lines = e.long_display.to_a[1..-1]
|
426
439
|
puts "#{@num+=1}) #{lines.shift}"
|
@@ -445,24 +458,45 @@ Test::Unit::AutoRunner::RUNNERS[:console] = proc do |r|
|
|
445
458
|
CheckRunner
|
446
459
|
end
|
447
460
|
|
461
|
+
############################
|
462
|
+
# The following are the error messages to be used for different tests
|
463
|
+
# You need to specify a value in :errors
|
464
|
+
# If there is a solution, it may also be specified in :solutions
|
465
|
+
#
|
466
|
+
# Values in may be reused by specifying another symbol as the value
|
467
|
+
# for instance the following will use the solution for :bar as the solution for :foo
|
468
|
+
#
|
469
|
+
# :solutions
|
470
|
+
# :foo: :bar
|
471
|
+
############################
|
448
472
|
$messages = YAML.load <<-EOF
|
449
473
|
---
|
474
|
+
:status:
|
450
475
|
:started: Analyzing system
|
451
476
|
:passed: Congratulations, your system has passed all tests
|
452
477
|
:failed: Your system did not pass all of the tests
|
453
478
|
:error: Something went wrong, and not all tests completed
|
454
|
-
|
455
|
-
:
|
479
|
+
:errors:
|
480
|
+
:no_derive: "We were unable to derive your public SSH key and compare it to the remote"
|
481
|
+
:no_connectivity: "Cannot connect to server, therefore most tests will not work"
|
456
482
|
:no_account: You must have an account on the server in order to test SSH key matches
|
457
483
|
:cant_connect: You need to be able to connect to the server in order to test authentication
|
458
|
-
:no_match_pub: "Local %s does not match remote pub key, SSH auth will not work
|
459
|
-
:_404: "The user %s does not have an account on this server
|
484
|
+
:no_match_pub: "Local %s does not match remote pub key, SSH auth will not work"
|
485
|
+
:_404: "The user %s does not have an account on this server"
|
460
486
|
:no_pubkey: We were unable to read your public SSH key to compare to %s
|
461
|
-
:_401: "Invalid user credentials for %s
|
487
|
+
:_401: "Invalid user credentials for %s"
|
462
488
|
:file_not_found: File %s does not exist, cannot check permissions
|
463
489
|
:_other_http: "There was an error communicating with the server: %s"
|
464
|
-
:bad_permissions: "File %s has incorrect permissions %s
|
490
|
+
:bad_permissions: "File %s has incorrect permissions %s"
|
465
491
|
:no_keys_loaded: Either ssh-agent is not running or you do not have any keys loaded
|
466
492
|
:pubkey_not_loaded: Your public key is not loaded into a running ssh-agent
|
467
493
|
:cant_ssh: "Cannot SSH into your app: %s"
|
468
|
-
|
494
|
+
:no_remote_pub_keys: "It appears you do not have any public ssh keys."
|
495
|
+
:solutions:
|
496
|
+
:no_connectivity: "Ensure that you are able to connect to %s"
|
497
|
+
:no_match_pub: "Perhaps you should regenerate your public key, or run 'rhc sshkey add' to add your new key"
|
498
|
+
:_404: "Please ensure that you've entered the correct username or that you've created an account"
|
499
|
+
:_401: "Please ensure you used the correct password"
|
500
|
+
:bad_permissions: "Permissions should match %s"
|
501
|
+
:no_remote_pub_keys: "You should try to add your ssh-key by running 'rhc sshkey add'"
|
502
|
+
EOF
|
data/bin/rhc-create-app
CHANGED
@@ -43,10 +43,10 @@ Create an OpenShift Express app.
|
|
43
43
|
--no-dns Skip DNS check. Must be used in combination with --nogit
|
44
44
|
--config path Path of alternate config file
|
45
45
|
--timeout # Timeout, in seconds, for connection
|
46
|
-
--enable-jenkins [name]
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
--enable-jenkins [name] Create a Jenkins application (see Note 1)
|
47
|
+
|
48
|
+
Notes:
|
49
|
+
1. Jenkins applications will have Jenkins embedded. Their default name will be 'jenkins' if not specified and the '--no-dns' flag is ignored.
|
50
50
|
|
51
51
|
USAGE
|
52
52
|
exit 255
|
@@ -247,4 +247,4 @@ unless opt['no-dns']
|
|
247
247
|
puts "Unable to access your new application."
|
248
248
|
exit 1
|
249
249
|
end
|
250
|
-
end
|
250
|
+
end
|
data/bin/rhc-ctl-app
CHANGED
@@ -123,8 +123,8 @@ unless opt["embed"] or opt["command"]
|
|
123
123
|
end
|
124
124
|
|
125
125
|
if opt["command"]
|
126
|
-
unless opt["command"] =~ /^(start|stop|force-stop|restart|reload|status|destroy|tidy|add-alias|remove-alias|threaddump)$/
|
127
|
-
puts "Invalid command '#{opt["command"]}' specified. Valid commands are (start|stop|force-stop|restart|reload|status|destroy|tidy|add-alias|remove-alias|threaddump)"
|
126
|
+
unless opt["command"] =~ /^(start|stop|force-stop|restart|reload|status|destroy|tidy|add-alias|remove-alias|threaddump|expose-port|conceal-port)$/
|
127
|
+
puts "Invalid command '#{opt["command"]}' specified. Valid commands are (start|stop|force-stop|restart|reload|status|destroy|tidy|add-alias|remove-alias|threaddump|expose-port|conceal-port)"
|
128
128
|
p_usage
|
129
129
|
end
|
130
130
|
elsif opt["embed"]
|
data/bin/rhc-snapshot
CHANGED
@@ -118,7 +118,7 @@ if opt['save']
|
|
118
118
|
puts "Pulling down a snapshot to #{opt['save']}"
|
119
119
|
else
|
120
120
|
if File.exists? opt['restore']
|
121
|
-
`tar -tf #{opt['restore']} './*/#{app}'`
|
121
|
+
`tar --wildcards -tf #{opt['restore']} './*/#{app}'`
|
122
122
|
if $?.exitstatus != 0
|
123
123
|
puts "Archive at #{opt['restore']} does not contain the target application: ./*/#{app}"
|
124
124
|
puts "If you created this archive rather than exported with rhc-snapshot, be sure"
|
@@ -126,7 +126,7 @@ else
|
|
126
126
|
puts "i.e.: tar -czvf <app_name>.tar.gz ./<app_uuid>/"
|
127
127
|
exit 255
|
128
128
|
else
|
129
|
-
`tar -tf #{opt['restore']} './*/git'`
|
129
|
+
`tar --wildcards -tf #{opt['restore']} './*/git'`
|
130
130
|
include_git = $?.exitstatus == 0
|
131
131
|
ssh_cmd = "cat #{opt['restore']} | ssh #{app_uuid}@#{app}-#{namespace}.#{rhc_domain} 'restore#{include_git ? ' INCLUDE_GIT' : ''}'"
|
132
132
|
puts "Restoring from snapshot #{opt['restore']}"
|
@@ -156,4 +156,4 @@ end
|
|
156
156
|
exit 1
|
157
157
|
end
|
158
158
|
puts output if opt['restore'] && debug
|
159
|
-
exit 0
|
159
|
+
exit 0
|
data/bin/rhc-tail-files
CHANGED
@@ -127,7 +127,11 @@ puts "Use ctl + c to stop"
|
|
127
127
|
puts
|
128
128
|
puts ssh_cmd if debug
|
129
129
|
begin
|
130
|
-
|
130
|
+
if opt['files'] == 'system-messages'
|
131
|
+
RHC::ctl_app(libra_server, @http, opt['app'], opt['rhlogin'], password, 'system-messages', false, nil, nil)
|
132
|
+
else
|
133
|
+
exec ssh_cmd
|
134
|
+
end
|
131
135
|
rescue SystemCallError
|
132
136
|
puts
|
133
137
|
puts "Error in trying to tail files. You can tail manually by running:"
|
data/lib/rhc
CHANGED
@@ -68,11 +68,11 @@ _rhc()
|
|
68
68
|
create)
|
69
69
|
opts="--debug --help --rhlogin --password --no-dns --nogit --app --repo --type --enable-jenkins --config --timeout"
|
70
70
|
;;
|
71
|
-
show | start | stop | force-stop | restart | reload | status | destroy | tidy | add-alias | remove-alias | threaddump | destroy)
|
71
|
+
show | start | stop | force-stop | restart | reload | status | destroy | tidy | add-alias | remove-alias | threaddump | destroy | expose-port | conceal-port )
|
72
72
|
opts="--debug --help --rhlogin --password --app --alias --bypass --config --timeout"
|
73
73
|
;;
|
74
74
|
tail)
|
75
|
-
opts="--debug --help --rhlogin --password
|
75
|
+
opts="--debug --help --rhlogin --password --app --opts --filepath --config --timeout"
|
76
76
|
;;
|
77
77
|
snapshot)
|
78
78
|
opts="save restore"
|
@@ -108,7 +108,7 @@ _rhc()
|
|
108
108
|
snapshot)
|
109
109
|
case "${COMP_WORDS[3]}" in
|
110
110
|
save | restore)
|
111
|
-
opts="--debug --help --rhlogin --password
|
111
|
+
opts="--debug --help --rhlogin --password --app --filepath --config --timeout"
|
112
112
|
;;
|
113
113
|
*)
|
114
114
|
;;
|
@@ -117,7 +117,7 @@ _rhc()
|
|
117
117
|
cartridge)
|
118
118
|
case "${COMP_WORDS[3]}" in
|
119
119
|
add | remove | stop | start | restart | status | reload | list)
|
120
|
-
opts="--debug --help --rhlogin --password
|
120
|
+
opts="--debug --help --rhlogin --password --app --cartridge --config --timeout"
|
121
121
|
;;
|
122
122
|
*)
|
123
123
|
;;
|
data/lib/rhc-common.rb
CHANGED
@@ -43,7 +43,6 @@ module RHC
|
|
43
43
|
PATTERN_VERSION=/\A\d+\.\d+\.\d+\z/
|
44
44
|
@mytimeout = 10
|
45
45
|
@mydebug = false
|
46
|
-
@@broker_version = "?.?.?"
|
47
46
|
@@api_version = "?.?.?"
|
48
47
|
|
49
48
|
# reset lines
|
@@ -59,8 +58,7 @@ module RHC
|
|
59
58
|
'exit_code' => nil,
|
60
59
|
'messages' => nil,
|
61
60
|
'data' => nil,
|
62
|
-
'api' => nil
|
63
|
-
'broker' => nil
|
61
|
+
'api' => nil
|
64
62
|
}
|
65
63
|
|
66
64
|
def self.timeout(val)
|
@@ -78,9 +76,6 @@ module RHC
|
|
78
76
|
end
|
79
77
|
|
80
78
|
def self.update_server_api_v(dict)
|
81
|
-
if !dict['broker'].nil? && (dict['broker'] =~ PATTERN_VERSION)
|
82
|
-
@@broker_version = dict['broker']
|
83
|
-
end
|
84
79
|
if !dict['api'].nil? && (dict['api'] =~ PATTERN_VERSION)
|
85
80
|
@@api_version = dict['api']
|
86
81
|
end
|
@@ -387,9 +382,6 @@ module RHC
|
|
387
382
|
if json_resp['api']
|
388
383
|
puts "API version: #{json_resp['api']}"
|
389
384
|
end
|
390
|
-
if json_resp['broker']
|
391
|
-
puts "Broker version: #{json_resp['broker']}"
|
392
|
-
end
|
393
385
|
end
|
394
386
|
if print_result && json_resp['result']
|
395
387
|
puts ''
|
@@ -415,7 +407,6 @@ module RHC
|
|
415
407
|
data = {:cartridge => app_type,
|
416
408
|
:action => 'configure',
|
417
409
|
:app_name => app_name,
|
418
|
-
:node_profile => 'large',
|
419
410
|
:rhlogin => rhlogin
|
420
411
|
}
|
421
412
|
if @mydebug
|
@@ -674,13 +665,19 @@ LOOKSGOOD
|
|
674
665
|
|
675
666
|
stderr.each { |line|
|
676
667
|
line = line.chomp
|
668
|
+
|
669
|
+
if line.downcase =~ /permission denied/
|
670
|
+
puts line
|
671
|
+
exit 1
|
672
|
+
end
|
673
|
+
|
677
674
|
if line.index(ip_and_port_simple_regex)
|
678
675
|
hosts_and_ports_descriptions << line
|
679
676
|
end
|
680
677
|
}
|
681
678
|
|
682
679
|
}
|
683
|
-
|
680
|
+
|
684
681
|
#hosts_and_ports_descriptions = stderr.gets.chomp.split(/\n/)
|
685
682
|
#hosts_and_ports = stdout.gets.chomp.split(/\n/)
|
686
683
|
|
@@ -720,7 +717,7 @@ LOOKSGOOD
|
|
720
717
|
end
|
721
718
|
|
722
719
|
json_data = generate_json(data)
|
723
|
-
|
720
|
+
|
724
721
|
url = nil
|
725
722
|
if embedded
|
726
723
|
url = URI.parse("https://#{libra_server}/broker/embed_cartridge")
|
@@ -735,8 +732,8 @@ LOOKSGOOD
|
|
735
732
|
else
|
736
733
|
print_response_err(response)
|
737
734
|
end
|
735
|
+
JSON.parse(response.body)
|
738
736
|
end
|
739
|
-
|
740
737
|
end
|
741
738
|
|
742
739
|
# provide a hook for performing actions before rhc-* commands exit
|
@@ -976,4 +973,4 @@ SSH
|
|
976
973
|
File.chmod(0700, ssh_config_d)
|
977
974
|
File.chmod(0600, ssh_config)
|
978
975
|
end
|
979
|
-
end
|
976
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 329
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 86
|
9
|
+
- 7
|
10
|
+
version: 0.86.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Red Hat
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-02-
|
18
|
+
date: 2012-02-16 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: json_pure
|
@@ -69,20 +69,20 @@ extra_rdoc_files: []
|
|
69
69
|
files:
|
70
70
|
- lib/rhc-common.rb
|
71
71
|
- lib/rhc
|
72
|
-
- bin/rhc-ctl-domain
|
73
|
-
- bin/rhc-port-forward
|
74
72
|
- bin/rhc-ctl-app
|
75
|
-
- bin/rhc-tail-files
|
76
|
-
- bin/rhc-user-info
|
77
|
-
- bin/rhc-snapshot
|
78
|
-
- bin/rhc-domain-info
|
79
|
-
- bin/rhc-chk
|
80
|
-
- bin/rhc-domain
|
81
|
-
- bin/rhc-create-app
|
82
|
-
- bin/rhc
|
83
73
|
- bin/rhc-app
|
74
|
+
- bin/rhc-create-app
|
75
|
+
- bin/rhc-domain
|
76
|
+
- bin/rhc-chk
|
84
77
|
- bin/rhc-create-domain
|
78
|
+
- bin/rhc-domain-info
|
79
|
+
- bin/rhc
|
80
|
+
- bin/rhc-user-info
|
85
81
|
- bin/rhc-sshkey
|
82
|
+
- bin/rhc-port-forward
|
83
|
+
- bin/rhc-snapshot
|
84
|
+
- bin/rhc-tail-files
|
85
|
+
- bin/rhc-ctl-domain
|
86
86
|
- conf/express.conf
|
87
87
|
- LICENSE
|
88
88
|
- README
|