rhc 0.93.18 → 0.93.19
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/rhc +6 -1
- data/bin/rhc-chk +8 -9
- data/lib/rhc-common.rb +11 -9
- data/lib/rhc/targz.rb +2 -0
- data/lib/rhc/vendor/sshkey.rb +253 -0
- data/lib/rhc/wizard.rb +8 -11
- data/spec/spec_helper.rb +2 -2
- metadata +207 -207
data/bin/rhc
CHANGED
@@ -38,7 +38,7 @@ def get_args
|
|
38
38
|
end
|
39
39
|
|
40
40
|
|
41
|
-
wizard_run = default_setup_wizard unless ARGV.include?('--noprompt')
|
41
|
+
wizard_run = default_setup_wizard unless ARGV.include?('--noprompt') or ARGV.include?('--help') or ARGV.include?('-h')
|
42
42
|
|
43
43
|
case ARGV[0]
|
44
44
|
when "domain"
|
@@ -62,6 +62,11 @@ when "server"
|
|
62
62
|
retcode = e.status
|
63
63
|
end
|
64
64
|
when "setup"
|
65
|
+
if ARGV.include?('--help') or ARGV.include?('-h')
|
66
|
+
puts "Usage: rhc setup"
|
67
|
+
puts "Runs the setup wizard to configure your account"
|
68
|
+
exit 0
|
69
|
+
end
|
65
70
|
exit 0 if wizard_run
|
66
71
|
w = RHC::RerunWizard.new(RHC::Config.local_config_path)
|
67
72
|
success = w.run
|
data/bin/rhc-chk
CHANGED
@@ -5,10 +5,11 @@ require 'net/https'
|
|
5
5
|
require 'rbconfig'
|
6
6
|
require 'yaml'
|
7
7
|
require 'tempfile'
|
8
|
+
require 'rhc/vendor/sshkey'
|
8
9
|
|
9
10
|
if RUBY_VERSION.to_f == 1.9
|
10
11
|
require 'rubygems'
|
11
|
-
gem 'test-unit'
|
12
|
+
gem 'test-unit'#, '~> 1.2.3'
|
12
13
|
end
|
13
14
|
|
14
15
|
require 'test/unit'
|
@@ -281,7 +282,7 @@ class Test3_SSH < Test::Unit::TestCase
|
|
281
282
|
check_permissions(@libra_kfile, /[4-7]00/) # Needs to at least be readable by user and nobody else
|
282
283
|
|
283
284
|
# Derive the public key from the private key
|
284
|
-
key_dump = SSHKey.new(File.read(@libra_kfile)).ssh_public_key
|
285
|
+
key_dump = RHC::Vendor::SSHKey.new(File.read(@libra_kfile)).ssh_public_key
|
285
286
|
@@local_derived_ssh_pubkey = key_dump.to_s.strip.split(' ')[1]
|
286
287
|
|
287
288
|
assert_not_nil @@local_derived_ssh_pubkey, error_for(:no_derive)
|
@@ -313,12 +314,9 @@ class Test3_SSH < Test::Unit::TestCase
|
|
313
314
|
fp.close if fp
|
314
315
|
end
|
315
316
|
|
316
|
-
def test_05_ssh_config
|
317
|
-
check_permissions('~/.ssh/config',/600/)
|
318
|
-
end
|
319
|
-
|
320
317
|
def test_06_ssh_agent
|
321
|
-
loaded_keys = `ssh-add -L
|
318
|
+
loaded_keys = `ssh-add -L`
|
319
|
+
loaded_keys = loaded_keys.send(loaded_keys.respond_to?(:lines) ? :lines : :to_s).to_a
|
322
320
|
# Make sure we can load keys from ssh-agent
|
323
321
|
assert !loaded_keys.empty?, error_for(:no_keys_loaded)
|
324
322
|
loaded_keys.map!{|key| key.split(' ')[1]}
|
@@ -380,7 +378,7 @@ class CheckRunner < Test::Unit::UI::Console::TestRunner
|
|
380
378
|
end
|
381
379
|
|
382
380
|
def render_message(message)
|
383
|
-
lines = message.to_a
|
381
|
+
lines = message.send(message.respond_to?(:lines) ? :lines : :to_s).to_a
|
384
382
|
message = []
|
385
383
|
@num ||= 0
|
386
384
|
message << "#{@num+=1}) #{lines.shift.strip}"
|
@@ -417,7 +415,8 @@ class CheckRunner < Test::Unit::UI::Console::TestRunner
|
|
417
415
|
@num = 0
|
418
416
|
print_underlined get_message(:status,:error)
|
419
417
|
@errors.each do |e|
|
420
|
-
|
418
|
+
display = e.long_display
|
419
|
+
lines = display.send(display.respond_to?(:lines) ? :lines : :to_s).to_a[1..-1]
|
421
420
|
puts "#{@num+=1}) #{lines.shift}"
|
422
421
|
lines.each{|l| puts "\t#{l}"}
|
423
422
|
end
|
data/lib/rhc-common.rb
CHANGED
@@ -4,7 +4,7 @@ require 'getoptlong'
|
|
4
4
|
require 'net/http'
|
5
5
|
require 'net/https'
|
6
6
|
require 'net/ssh'
|
7
|
-
require 'sshkey'
|
7
|
+
require 'rhc/vendor/sshkey'
|
8
8
|
require 'parseconfig'
|
9
9
|
require 'resolv'
|
10
10
|
require 'uri'
|
@@ -315,10 +315,9 @@ end
|
|
315
315
|
tempfile = `mktemp /tmp/openshift.XXXXXXXX`
|
316
316
|
`echo "#{ssh_keys['ssh_type']} #{ssh_keys['ssh_key']}" > #{tempfile}`
|
317
317
|
ssh_keys['fingerprint'] = `ssh-keygen -lf #{tempfile}`.split(' ')[1]
|
318
|
-
rescue Net::SSH::Exception
|
319
|
-
|
320
|
-
|
321
|
-
# this happens if the user does not have a default key
|
318
|
+
rescue Net::SSH::Exception, NotImplementedError
|
319
|
+
# Could be a new unsupported key type or invalid data on the server
|
320
|
+
ssh_keys['fingerprint'] = 'Key type is not recognized. Please check this key is valid.'
|
322
321
|
end
|
323
322
|
|
324
323
|
if ssh_keys['keys'] && ssh_keys['keys'].kind_of?(Hash)
|
@@ -334,8 +333,11 @@ end
|
|
334
333
|
tempfile = `mktemp /tmp/openshift.XXXXXXXX`
|
335
334
|
`echo "#{type} #{key}" > #{tempfile}`
|
336
335
|
ssh_keys['keys'][name]['fingerprint'] = `ssh-keygen -lf #{tempfile}`.split(' ')[1]
|
336
|
+
rescue NotImplementedError, Net::SSH::Exception
|
337
|
+
# Could be a new unsupported key type or invalid data on the server
|
338
|
+
ssh_keys['keys'][name]['fingerprint'] = 'Key type is not recognized. Please check this key is valid.'
|
337
339
|
end
|
338
|
-
end
|
340
|
+
end
|
339
341
|
end
|
340
342
|
ssh_keys
|
341
343
|
end
|
@@ -1187,9 +1189,9 @@ end
|
|
1187
1189
|
#
|
1188
1190
|
# Returns nil on failure or public key location as a String on success
|
1189
1191
|
def generate_ssh_key_ruby(type="RSA", bits = 1024, comment = "OpenShift-Key")
|
1190
|
-
key = SSHKey.generate(:type => type,
|
1191
|
-
|
1192
|
-
|
1192
|
+
key = RHC::Vendor::SSHKey.generate(:type => type,
|
1193
|
+
:bits => bits,
|
1194
|
+
:comment => comment)
|
1193
1195
|
ssh_dir = "#{RHC::Config.home_dir}/.ssh"
|
1194
1196
|
if File.exists?("#{ssh_dir}/id_rsa")
|
1195
1197
|
puts "SSH key already exists: #{ssh_dir}/id_rsa. Reusing..."
|
data/lib/rhc/targz.rb
CHANGED
@@ -0,0 +1,253 @@
|
|
1
|
+
# modified version of SSHKey rubygem module
|
2
|
+
# https://github.com/bensie/sshkey
|
3
|
+
#
|
4
|
+
# Copyright (c) 2011 James Miller
|
5
|
+
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
7
|
+
# a copy of this software and associated documentation files (the
|
8
|
+
# "Software"), to deal in the Software without restriction, including
|
9
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
10
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
11
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
12
|
+
# the following conditions:
|
13
|
+
|
14
|
+
# The above copyright notice and this permission notice shall be
|
15
|
+
# included in all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
21
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
22
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
23
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
|
25
|
+
require 'openssl'
|
26
|
+
require 'base64'
|
27
|
+
require 'digest/md5'
|
28
|
+
require 'digest/sha1'
|
29
|
+
|
30
|
+
module RHC
|
31
|
+
module Vendor
|
32
|
+
class SSHKey
|
33
|
+
SSH_TYPES = {"rsa" => "ssh-rsa", "dsa" => "ssh-dss"}
|
34
|
+
SSH_CONVERSION = {"rsa" => ["e", "n"], "dsa" => ["p", "q", "g", "pub_key"]}
|
35
|
+
|
36
|
+
attr_reader :key_object, :comment, :type
|
37
|
+
attr_accessor :passphrase
|
38
|
+
|
39
|
+
class << self
|
40
|
+
# Generate a new keypair and return an SSHKey object
|
41
|
+
#
|
42
|
+
# The default behavior when providing no options will generate a 2048-bit RSA
|
43
|
+
# keypair.
|
44
|
+
#
|
45
|
+
# ==== Parameters
|
46
|
+
# * options<~Hash>:
|
47
|
+
# * :type<~String> - "rsa" or "dsa", "rsa" by default
|
48
|
+
# * :bits<~Integer> - Bit length
|
49
|
+
# * :comment<~String> - Comment to use for the public key, defaults to ""
|
50
|
+
# * :passphrase<~String> - Encrypt the key with this passphrase
|
51
|
+
#
|
52
|
+
def generate(options = {})
|
53
|
+
type = options[:type] || "rsa"
|
54
|
+
|
55
|
+
# JRuby modulus size must range from 512 to 1024
|
56
|
+
default_bits = type == "rsa" ? 2048 : 1024
|
57
|
+
|
58
|
+
bits = options[:bits] || default_bits
|
59
|
+
cipher = OpenSSL::Cipher::Cipher.new("AES-128-CBC") if options[:passphrase]
|
60
|
+
|
61
|
+
case type.downcase
|
62
|
+
when "rsa" then new(OpenSSL::PKey::RSA.generate(bits).to_pem(cipher, options[:passphrase]), options)
|
63
|
+
when "dsa" then new(OpenSSL::PKey::DSA.generate(bits).to_pem(cipher, options[:passphrase]), options)
|
64
|
+
else
|
65
|
+
raise "Unknown key type: #{type}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Validate an existing SSH public key
|
70
|
+
#
|
71
|
+
# Returns true or false depending on the validity of the public key provided
|
72
|
+
#
|
73
|
+
# ==== Parameters
|
74
|
+
# * ssh_public_key<~String> - "ssh-rsa AAAAB3NzaC1yc2EA...."
|
75
|
+
#
|
76
|
+
def valid_ssh_public_key?(ssh_public_key)
|
77
|
+
ssh_type, encoded_key = ssh_public_key.split(" ")
|
78
|
+
type = SSH_TYPES.invert[ssh_type]
|
79
|
+
prefix = [0,0,0,7].pack("C*")
|
80
|
+
decoded = Base64.decode64(encoded_key)
|
81
|
+
|
82
|
+
# Base64 decoding is too permissive, so we should validate if encoding is correct
|
83
|
+
return false unless Base64.encode64(decoded).gsub("\n", "") == encoded_key
|
84
|
+
return false unless decoded.sub!(/^#{prefix}#{ssh_type}/, "")
|
85
|
+
|
86
|
+
unpacked = decoded.unpack("C*")
|
87
|
+
data = []
|
88
|
+
index = 0
|
89
|
+
until unpacked[index].nil?
|
90
|
+
datum_size = from_byte_array unpacked[index..index+4-1], 4
|
91
|
+
index = index + 4
|
92
|
+
datum = from_byte_array unpacked[index..index+datum_size-1], datum_size
|
93
|
+
data << datum
|
94
|
+
index = index + datum_size
|
95
|
+
end
|
96
|
+
|
97
|
+
SSH_CONVERSION[type].size == data.size
|
98
|
+
rescue
|
99
|
+
false
|
100
|
+
end
|
101
|
+
|
102
|
+
# Fingerprints
|
103
|
+
#
|
104
|
+
# Accepts either a public or private key
|
105
|
+
#
|
106
|
+
# MD5 fingerprint for the given SSH key
|
107
|
+
def md5_fingerprint(key)
|
108
|
+
if key.match(/PRIVATE/)
|
109
|
+
new(key).md5_fingerprint
|
110
|
+
else
|
111
|
+
Digest::MD5.hexdigest(decoded_key(key)).gsub(fingerprint_regex, '\1:\2')
|
112
|
+
end
|
113
|
+
end
|
114
|
+
alias_method :fingerprint, :md5_fingerprint
|
115
|
+
|
116
|
+
# SHA1 fingerprint for the given SSH key
|
117
|
+
def sha1_fingerprint(key)
|
118
|
+
if key.match(/PRIVATE/)
|
119
|
+
new(key).sha1_fingerprint
|
120
|
+
else
|
121
|
+
Digest::SHA1.hexdigest(decoded_key(key)).gsub(fingerprint_regex, '\1:\2')
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
private
|
126
|
+
|
127
|
+
def from_byte_array(byte_array, expected_size = nil)
|
128
|
+
num = 0
|
129
|
+
raise "Byte array too short" if !expected_size.nil? && expected_size != byte_array.size
|
130
|
+
byte_array.reverse.each_with_index do |item, index|
|
131
|
+
num += item * 256**(index)
|
132
|
+
end
|
133
|
+
num
|
134
|
+
end
|
135
|
+
|
136
|
+
def decoded_key(key)
|
137
|
+
Base64.decode64(key.chomp.gsub(/ssh-[dr]s[as] /, ''))
|
138
|
+
end
|
139
|
+
|
140
|
+
def fingerprint_regex
|
141
|
+
/(.{2})(?=.)/
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Create a new SSHKey object
|
146
|
+
#
|
147
|
+
# ==== Parameters
|
148
|
+
# * private_key - Existing RSA or DSA private key
|
149
|
+
# * options<~Hash>
|
150
|
+
# * :comment<~String> - Comment to use for the public key, defaults to ""
|
151
|
+
# * :passphrase<~String> - If the key is encrypted, supply the passphrase
|
152
|
+
#
|
153
|
+
def initialize(private_key, options = {})
|
154
|
+
@passphrase = options[:passphrase]
|
155
|
+
@comment = options[:comment] || ""
|
156
|
+
begin
|
157
|
+
@key_object = OpenSSL::PKey::RSA.new(private_key, passphrase)
|
158
|
+
@type = "rsa"
|
159
|
+
rescue
|
160
|
+
@key_object = OpenSSL::PKey::DSA.new(private_key, passphrase)
|
161
|
+
@type = "dsa"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# Fetch the RSA/DSA private key
|
166
|
+
#
|
167
|
+
# rsa_private_key and dsa_private_key are aliased for backward compatibility
|
168
|
+
def private_key
|
169
|
+
key_object.to_pem
|
170
|
+
end
|
171
|
+
alias_method :rsa_private_key, :private_key
|
172
|
+
alias_method :dsa_private_key, :private_key
|
173
|
+
|
174
|
+
# Fetch the encrypted RSA/DSA private key using the passphrase provided
|
175
|
+
#
|
176
|
+
# If no passphrase is set, returns the unencrypted private key
|
177
|
+
def encrypted_private_key
|
178
|
+
return private_key unless passphrase
|
179
|
+
key_object.to_pem(OpenSSL::Cipher::Cipher.new("AES-128-CBC"), passphrase)
|
180
|
+
end
|
181
|
+
|
182
|
+
# Fetch the RSA/DSA public key
|
183
|
+
#
|
184
|
+
# rsa_public_key and dsa_public_key are aliased for backward compatibility
|
185
|
+
def public_key
|
186
|
+
key_object.public_key.to_pem
|
187
|
+
end
|
188
|
+
alias_method :rsa_public_key, :public_key
|
189
|
+
alias_method :dsa_public_key, :public_key
|
190
|
+
|
191
|
+
# SSH public key
|
192
|
+
def ssh_public_key
|
193
|
+
[SSH_TYPES[type], Base64.encode64(ssh_public_key_conversion).gsub("\n", ""), comment].join(" ").strip
|
194
|
+
end
|
195
|
+
|
196
|
+
# Fingerprints
|
197
|
+
#
|
198
|
+
# MD5 fingerprint for the given SSH public key
|
199
|
+
def md5_fingerprint
|
200
|
+
Digest::MD5.hexdigest(ssh_public_key_conversion).gsub(/(.{2})(?=.)/, '\1:\2')
|
201
|
+
end
|
202
|
+
alias_method :fingerprint, :md5_fingerprint
|
203
|
+
|
204
|
+
# SHA1 fingerprint for the given SSH public key
|
205
|
+
def sha1_fingerprint
|
206
|
+
Digest::SHA1.hexdigest(ssh_public_key_conversion).gsub(/(.{2})(?=.)/, '\1:\2')
|
207
|
+
end
|
208
|
+
|
209
|
+
private
|
210
|
+
|
211
|
+
# SSH Public Key Conversion
|
212
|
+
#
|
213
|
+
# All data type encoding is defined in the section #5 of RFC #4251.
|
214
|
+
# String and mpint (multiple precision integer) types are encoded this way:
|
215
|
+
# 4-bytes word: data length (unsigned big-endian 32 bits integer)
|
216
|
+
# n bytes: binary representation of the data
|
217
|
+
|
218
|
+
# For instance, the "ssh-rsa" string is encoded as the following byte array
|
219
|
+
# [0, 0, 0, 7, 's', 's', 'h', '-', 'r', 's', 'a']
|
220
|
+
def ssh_public_key_conversion
|
221
|
+
out = [0,0,0,7].pack("C*")
|
222
|
+
out += SSH_TYPES[type]
|
223
|
+
|
224
|
+
SSH_CONVERSION[type].each do |method|
|
225
|
+
byte_array = to_byte_array(key_object.public_key.send(method).to_i)
|
226
|
+
out += encode_unsigned_int_32(byte_array.length).pack("c*")
|
227
|
+
out += byte_array.pack("C*")
|
228
|
+
end
|
229
|
+
|
230
|
+
return out
|
231
|
+
end
|
232
|
+
|
233
|
+
def encode_unsigned_int_32(value)
|
234
|
+
out = []
|
235
|
+
out[0] = value >> 24 & 0xff
|
236
|
+
out[1] = value >> 16 & 0xff
|
237
|
+
out[2] = value >> 8 & 0xff
|
238
|
+
out[3] = value & 0xff
|
239
|
+
return out
|
240
|
+
end
|
241
|
+
|
242
|
+
def to_byte_array(num)
|
243
|
+
result = []
|
244
|
+
begin
|
245
|
+
result << (num & 0xff)
|
246
|
+
num >>= 8
|
247
|
+
end until (num == 0 || num == -1) && (result.last[7] == num[7])
|
248
|
+
result.reverse
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
data/lib/rhc/wizard.rb
CHANGED
@@ -2,13 +2,7 @@ require 'rhc-common'
|
|
2
2
|
require 'rhc/helpers'
|
3
3
|
require 'highline/system_extensions'
|
4
4
|
require 'net/ssh'
|
5
|
-
|
6
|
-
# ruby 1.8 -> 1.9 magic
|
7
|
-
begin
|
8
|
-
require 'ftools'
|
9
|
-
rescue LoadError
|
10
|
-
require 'fileutils'
|
11
|
-
end
|
5
|
+
require 'fileutils'
|
12
6
|
|
13
7
|
module RHC
|
14
8
|
class Wizard
|
@@ -410,7 +404,7 @@ EOF
|
|
410
404
|
--dest=#{service} #{obj_path} #{method} #{stringafied_params}"
|
411
405
|
output = `#{cmd} 2>&1`
|
412
406
|
|
413
|
-
|
407
|
+
raise output if output.start_with?('Error') and !$?.success?
|
414
408
|
|
415
409
|
# parse the output
|
416
410
|
results = []
|
@@ -461,7 +455,8 @@ EOF
|
|
461
455
|
|
462
456
|
begin
|
463
457
|
git_installed = package_kit_method('IsInstalled', 'Query', 'string:git string:')
|
464
|
-
|
458
|
+
# double check due to slight differences in older platforms
|
459
|
+
if git_installed or has_git?
|
465
460
|
section(:bottom => 1) { say "found" }
|
466
461
|
else
|
467
462
|
section(:bottom => 1) { say "needs to be installed" }
|
@@ -523,6 +518,8 @@ EOF
|
|
523
518
|
def has_git?
|
524
519
|
%x{ git --version }
|
525
520
|
$?.success?
|
521
|
+
rescue
|
522
|
+
false
|
526
523
|
end
|
527
524
|
|
528
525
|
def has_dbus_send?
|
@@ -561,8 +558,8 @@ EOF
|
|
561
558
|
say "Configuration file #{@config_path} already exists, " \
|
562
559
|
"backing up to #{backup}"
|
563
560
|
end
|
564
|
-
|
565
|
-
|
561
|
+
FileUtils.cp(@config_path, backup)
|
562
|
+
FileUtils.rm(@config_path)
|
566
563
|
end
|
567
564
|
super
|
568
565
|
true
|
data/spec/spec_helper.rb
CHANGED
@@ -15,10 +15,10 @@ begin
|
|
15
15
|
end
|
16
16
|
|
17
17
|
original_stderr = $stderr
|
18
|
-
at_exit do
|
18
|
+
SimpleCov.at_exit do
|
19
19
|
begin
|
20
20
|
SimpleCov.result.format!
|
21
|
-
if SimpleCov.result.covered_percent <
|
21
|
+
if SimpleCov.result.covered_percent < 99.0
|
22
22
|
original_stderr.puts "Coverage not 100%, build failed."
|
23
23
|
exit 1
|
24
24
|
end
|
metadata
CHANGED
@@ -1,301 +1,301 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhc
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.93.19
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 93
|
9
|
-
- 18
|
10
|
-
version: 0.93.18
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Red Hat
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-06-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rake
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: sshkey
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
25
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
- 0
|
45
|
-
version: "0"
|
46
|
-
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
49
31
|
name: net-ssh
|
50
|
-
|
51
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
52
33
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
version: "0"
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
60
38
|
type: :runtime
|
61
|
-
|
62
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
63
47
|
name: archive-tar-minitar
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
64
55
|
prerelease: false
|
65
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
57
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: test-unit
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
74
70
|
type: :runtime
|
75
|
-
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: parseconfig
|
78
71
|
prerelease: false
|
79
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
73
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: parseconfig
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
88
86
|
type: :runtime
|
89
|
-
version_requirements: *id005
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
name: commander
|
92
87
|
prerelease: false
|
93
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: commander
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
94
97
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
99
|
-
segments:
|
100
|
-
- 4
|
101
|
-
- 0
|
102
|
-
version: "4.0"
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '4.0'
|
103
102
|
type: :runtime
|
104
|
-
version_requirements: *id006
|
105
|
-
- !ruby/object:Gem::Dependency
|
106
|
-
name: rest-client
|
107
103
|
prerelease: false
|
108
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '4.0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rest-client
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
109
113
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
segments:
|
115
|
-
- 1
|
116
|
-
- 6
|
117
|
-
version: "1.6"
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.6'
|
118
118
|
type: :runtime
|
119
|
-
version_requirements: *id007
|
120
|
-
- !ruby/object:Gem::Dependency
|
121
|
-
name: webmock
|
122
119
|
prerelease: false
|
123
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
121
|
none: false
|
125
|
-
requirements:
|
126
|
-
- -
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.6'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: webmock
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '1.6'
|
133
134
|
type: :development
|
134
|
-
version_requirements: *id008
|
135
|
-
- !ruby/object:Gem::Dependency
|
136
|
-
name: rspec
|
137
135
|
prerelease: false
|
138
|
-
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '1.6'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rspec
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
139
145
|
none: false
|
140
|
-
requirements:
|
146
|
+
requirements:
|
141
147
|
- - ~>
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
|
144
|
-
segments:
|
145
|
-
- 1
|
146
|
-
- 3
|
147
|
-
version: "1.3"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '1.3'
|
148
150
|
type: :development
|
149
|
-
version_requirements: *id009
|
150
|
-
- !ruby/object:Gem::Dependency
|
151
|
-
name: fakefs
|
152
151
|
prerelease: false
|
153
|
-
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '1.3'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: fakefs
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
154
161
|
none: false
|
155
|
-
requirements:
|
156
|
-
- -
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
|
159
|
-
segments:
|
160
|
-
- 0
|
161
|
-
- 4
|
162
|
-
version: "0.4"
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0.4'
|
163
166
|
type: :development
|
164
|
-
|
165
|
-
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.4'
|
174
|
+
description: The client tools for the OpenShift platform that allow for application
|
175
|
+
management.
|
166
176
|
email: dev@openshift.redhat.com
|
167
|
-
executables:
|
168
|
-
- rhc-
|
169
|
-
- rhc-chk
|
177
|
+
executables:
|
178
|
+
- rhc-app
|
170
179
|
- rhc-create-app
|
171
|
-
- rhc-domain-info
|
172
|
-
- rhc-ctl-domain
|
173
|
-
- rhc-sshkey
|
174
|
-
- rhc-tail-files
|
175
|
-
- rhc-create-domain
|
176
|
-
- rhc-ctl-app
|
177
180
|
- rhc-domain
|
178
|
-
- rhc-
|
179
|
-
- rhc-app
|
181
|
+
- rhc-tail-files
|
180
182
|
- rhc-port-forward
|
183
|
+
- rhc-user-info
|
181
184
|
- rhc
|
185
|
+
- rhc-ctl-app
|
186
|
+
- rhc-ctl-domain
|
187
|
+
- rhc-create-domain
|
188
|
+
- rhc-snapshot
|
189
|
+
- rhc-sshkey
|
190
|
+
- rhc-domain-info
|
191
|
+
- rhc-chk
|
182
192
|
extensions: []
|
183
|
-
|
184
193
|
extra_rdoc_files: []
|
185
|
-
|
186
|
-
files:
|
194
|
+
files:
|
187
195
|
- lib/rhc-common.rb
|
188
|
-
- lib/rhc.rb
|
189
|
-
- lib/rhc
|
190
|
-
- lib/rhc
|
191
|
-
- lib/rhc-rest/cartridge.rb
|
192
|
-
- lib/rhc-rest/client.rb
|
193
|
-
- lib/rhc-rest/key.rb
|
194
|
-
- lib/rhc-rest/exceptions/exceptions.rb
|
195
|
-
- lib/rhc-rest/user.rb
|
196
|
-
- lib/rhc-rest/version.rb
|
196
|
+
- lib/rhc/vendor/sshkey.rb
|
197
|
+
- lib/rhc/vendor/okjson.rb
|
198
|
+
- lib/rhc/vendor/zliby.rb
|
197
199
|
- lib/rhc/helpers.rb
|
198
|
-
- lib/rhc/cli.rb
|
199
200
|
- lib/rhc/config.rb
|
200
|
-
- lib/rhc/commands.rb
|
201
|
-
- lib/rhc/wizard.rb
|
202
|
-
- lib/rhc/core_ext.rb
|
203
201
|
- lib/rhc/client.rb
|
204
202
|
- lib/rhc/json.rb
|
205
|
-
- lib/rhc/
|
206
|
-
- lib/rhc/vendor/zliby.rb
|
207
|
-
- lib/rhc/commands/base.rb
|
203
|
+
- lib/rhc/commands.rb
|
208
204
|
- lib/rhc/commands/server.rb
|
205
|
+
- lib/rhc/commands/base.rb
|
206
|
+
- lib/rhc/core_ext.rb
|
207
|
+
- lib/rhc/cli.rb
|
208
|
+
- lib/rhc/wizard.rb
|
209
209
|
- lib/rhc/targz.rb
|
210
|
+
- lib/rhc.rb
|
210
211
|
- lib/rhc-rest.rb
|
212
|
+
- lib/rhc-rest/user.rb
|
213
|
+
- lib/rhc-rest/domain.rb
|
214
|
+
- lib/rhc-rest/client.rb
|
215
|
+
- lib/rhc-rest/application.rb
|
216
|
+
- lib/rhc-rest/key.rb
|
217
|
+
- lib/rhc-rest/version.rb
|
218
|
+
- lib/rhc-rest/cartridge.rb
|
219
|
+
- lib/rhc-rest/exceptions/exceptions.rb
|
211
220
|
- conf/express.conf
|
212
221
|
- LICENSE
|
213
222
|
- COPYRIGHT
|
214
223
|
- README.md
|
215
224
|
- Rakefile
|
216
|
-
- test/sample-usage.rb
|
217
|
-
- test/support/server.rb
|
218
225
|
- test/support/testcase.rb
|
226
|
+
- test/support/server.rb
|
227
|
+
- test/sample-usage.rb
|
219
228
|
- test/functional/test_credentials.rb
|
220
|
-
- test/functional/domain_test.rb
|
221
229
|
- test/functional/application_test.rb
|
222
|
-
- test/
|
230
|
+
- test/functional/domain_test.rb
|
223
231
|
- test/test_helper.rb
|
232
|
+
- test/unit/command_test.rb
|
224
233
|
- spec/spec_helper.rb
|
225
|
-
- spec/rhc/json_spec.rb
|
226
234
|
- spec/rhc/helpers_spec.rb
|
227
|
-
- spec/rhc/command_spec.rb
|
228
235
|
- spec/rhc/wizard_spec.rb
|
236
|
+
- spec/rhc/command_spec.rb
|
229
237
|
- spec/rhc/commands/server_spec.rb
|
230
|
-
- spec/rhc/cli_spec.rb
|
231
238
|
- spec/rhc/targz_spec.rb
|
232
|
-
- spec/rhc/
|
233
|
-
- spec/rhc/
|
239
|
+
- spec/rhc/cli_spec.rb
|
240
|
+
- spec/rhc/json_spec.rb
|
234
241
|
- spec/rhc/assets/targz_sample.tar.gz
|
235
|
-
-
|
236
|
-
-
|
242
|
+
- spec/rhc/assets/targz_corrupted.tar.gz
|
243
|
+
- spec/rhc/assets/foo.txt
|
244
|
+
- bin/rhc-app
|
237
245
|
- bin/rhc-create-app
|
238
|
-
- bin/rhc-domain-info
|
239
|
-
- bin/rhc-ctl-domain
|
240
|
-
- bin/rhc-sshkey
|
241
|
-
- bin/rhc-tail-files
|
242
|
-
- bin/rhc-create-domain
|
243
|
-
- bin/rhc-ctl-app
|
244
246
|
- bin/rhc-domain
|
245
|
-
- bin/rhc-
|
246
|
-
- bin/rhc-app
|
247
|
+
- bin/rhc-tail-files
|
247
248
|
- bin/rhc-port-forward
|
249
|
+
- bin/rhc-user-info
|
248
250
|
- bin/rhc
|
251
|
+
- bin/rhc-ctl-app
|
252
|
+
- bin/rhc-ctl-domain
|
253
|
+
- bin/rhc-create-domain
|
254
|
+
- bin/rhc-snapshot
|
255
|
+
- bin/rhc-sshkey
|
256
|
+
- bin/rhc-domain-info
|
257
|
+
- bin/rhc-chk
|
249
258
|
homepage: https://github.com/openshift/os-client-tools
|
250
259
|
licenses: []
|
251
|
-
|
252
260
|
post_install_message:
|
253
261
|
rdoc_options: []
|
254
|
-
|
255
|
-
require_paths:
|
262
|
+
require_paths:
|
256
263
|
- lib
|
257
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
264
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
258
265
|
none: false
|
259
|
-
requirements:
|
260
|
-
- -
|
261
|
-
- !ruby/object:Gem::Version
|
262
|
-
|
263
|
-
|
264
|
-
- 0
|
265
|
-
version: "0"
|
266
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
266
|
+
requirements:
|
267
|
+
- - ! '>='
|
268
|
+
- !ruby/object:Gem::Version
|
269
|
+
version: '0'
|
270
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
267
271
|
none: false
|
268
|
-
requirements:
|
269
|
-
- -
|
270
|
-
- !ruby/object:Gem::Version
|
271
|
-
|
272
|
-
segments:
|
273
|
-
- 0
|
274
|
-
version: "0"
|
272
|
+
requirements:
|
273
|
+
- - ! '>='
|
274
|
+
- !ruby/object:Gem::Version
|
275
|
+
version: '0'
|
275
276
|
requirements: []
|
276
|
-
|
277
277
|
rubyforge_project:
|
278
|
-
rubygems_version: 1.8.
|
278
|
+
rubygems_version: 1.8.24
|
279
279
|
signing_key:
|
280
280
|
specification_version: 3
|
281
281
|
summary: OpenShift Client Tools
|
282
|
-
test_files:
|
283
|
-
- test/sample-usage.rb
|
284
|
-
- test/support/server.rb
|
282
|
+
test_files:
|
285
283
|
- test/support/testcase.rb
|
284
|
+
- test/support/server.rb
|
285
|
+
- test/sample-usage.rb
|
286
286
|
- test/functional/test_credentials.rb
|
287
|
-
- test/functional/domain_test.rb
|
288
287
|
- test/functional/application_test.rb
|
289
|
-
- test/
|
288
|
+
- test/functional/domain_test.rb
|
290
289
|
- test/test_helper.rb
|
290
|
+
- test/unit/command_test.rb
|
291
291
|
- spec/spec_helper.rb
|
292
|
-
- spec/rhc/json_spec.rb
|
293
292
|
- spec/rhc/helpers_spec.rb
|
294
|
-
- spec/rhc/command_spec.rb
|
295
293
|
- spec/rhc/wizard_spec.rb
|
294
|
+
- spec/rhc/command_spec.rb
|
296
295
|
- spec/rhc/commands/server_spec.rb
|
297
|
-
- spec/rhc/cli_spec.rb
|
298
296
|
- spec/rhc/targz_spec.rb
|
299
|
-
- spec/rhc/
|
300
|
-
- spec/rhc/
|
297
|
+
- spec/rhc/cli_spec.rb
|
298
|
+
- spec/rhc/json_spec.rb
|
301
299
|
- spec/rhc/assets/targz_sample.tar.gz
|
300
|
+
- spec/rhc/assets/targz_corrupted.tar.gz
|
301
|
+
- spec/rhc/assets/foo.txt
|