rhc 0.74.6 → 0.75.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2011 Red Hat, Inc.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person
5
+ # obtaining a copy of this software and associated documentation files
6
+ # (the "Software"), to deal in the Software without restriction,
7
+ # including without limitation the rights to use, copy, modify, merge,
8
+ # publish, distribute, sublicense, and/or sell copies of the Software,
9
+ # and to permit persons to whom the Software is furnished to do so,
10
+ # subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
+ # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
+ # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'rhc-common'
25
+ require 'net/http'
26
+ require 'net/https'
27
+ require 'rbconfig'
28
+
29
+
30
+ #
31
+ # print help
32
+ #
33
+ def p_usage
34
+ rhlogin = get_var('default_rhlogin') ? "Default: #{get_var('default_rhlogin')}" : "required"
35
+ puts <<USAGE
36
+
37
+ Usage: #{$0}
38
+ Run a simple check on local configs and credentials to confirm tools are
39
+ properly setup. Often run to troubleshoot connection issues.
40
+
41
+ -l|--rhlogin rhlogin Red Hat login (RHN or OpenShift login with OpenShift Express access) (#{rhlogin})
42
+ -p|--password password Red Hat password (for RHN or OpenShift)
43
+ -d|--debug Print Debug info
44
+ -h|--help Show Usage info
45
+
46
+ USAGE
47
+ exit 255
48
+ end
49
+
50
+ begin
51
+ opts = GetoptLong.new(
52
+ ["--debug", "-d", GetoptLong::NO_ARGUMENT],
53
+ ["--help", "-h", GetoptLong::NO_ARGUMENT],
54
+ ["--rhlogin", "-l", GetoptLong::REQUIRED_ARGUMENT],
55
+ ["--password", "-p", GetoptLong::REQUIRED_ARGUMENT]
56
+ )
57
+ opt = {}
58
+ opts.each do |o, a|
59
+ opt[o[2..-1]] = a.to_s
60
+ end
61
+ rescue Exception => e
62
+ #puts e.message
63
+ p_usage
64
+ end
65
+
66
+ # Pull in configs from files
67
+ @libra_server = get_var('libra_server')
68
+ @debug = get_var('debug') == 'false' ? nil : get_var('debug')
69
+
70
+ libra_kfile = "#{ENV['HOME']}/.ssh/libra_id_rsa"
71
+ libra_kpfile = "#{ENV['HOME']}/.ssh/libra_id_rsa.pub"
72
+
73
+ if opt["help"]
74
+ p_usage
75
+ end
76
+
77
+ if opt["debug"]
78
+ @debug = true
79
+ end
80
+
81
+ opt["rhlogin"] = get_var('default_rhlogin') unless opt["rhlogin"]
82
+ if !RHC::check_rhlogin(opt['rhlogin'])
83
+ p_usage
84
+ end
85
+ @rhlogin = opt["rhlogin"]
86
+
87
+ @password = opt['password']
88
+ if !@password
89
+ @password = RHC::get_password
90
+ end
91
+
92
+ #
93
+ # Generic Info
94
+ #
95
+ puts "Ruby Version: #{RUBY_VERSION}"
96
+ puts "host_alias: #{Config::CONFIG['host_alias']}"
97
+
98
+ #
99
+ # Check for proxy environment
100
+ #
101
+ if ENV['http_proxy']
102
+ host, port = ENV['http_proxy'].split(':')
103
+ @http = Net::HTTP::Proxy(host, port)
104
+ puts "Proxy being used: #{host}:#{port}"
105
+ else
106
+ @http = Net::HTTP
107
+ puts "Proxy being used: none"
108
+ end
109
+
110
+ def test_url_json(uri, data)
111
+ json_data = RHC::generate_json(data)
112
+ url = URI.parse("https://#{@libra_server}#{uri}")
113
+ puts " Contacting URL: https://#{@libra_server}#{uri}" if @debug
114
+ puts " json_data: #{json_data}" if @debug
115
+ req = @http::Post.new(url.path)
116
+ req.set_form_data({'json_data' => json_data, 'password' => @password})
117
+ http = @http.new(url.host, url.port)
118
+ http.open_timeout = 10
119
+ if url.scheme == "https"
120
+ http.use_ssl = true
121
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
122
+ end
123
+ begin
124
+ response = http.start {|http| http.request(req)}
125
+ puts " Raw Response: #{response.body}" if @debug
126
+ rescue Exception => e
127
+ puts " ERROR: #{e.message}"
128
+ return nil
129
+ end
130
+ return response
131
+ end
132
+
133
+ #
134
+ # Checking Connectivity / cart list
135
+ #
136
+ puts
137
+ puts "TEST1: Confirming connection to OpenShift"
138
+ data = {'cart_type' => 'standalone'}
139
+
140
+ response = test_url_json("/broker/cartlist", data)
141
+ if response
142
+ puts " Code: #{response.code}"
143
+ puts " Message: #{response.message}"
144
+ resp_json = JSON.parse(response.body)
145
+ puts " Cart Info: #{resp_json["data"]}"
146
+ end
147
+
148
+
149
+ #
150
+ # Checking Authentication
151
+ #
152
+
153
+ puts
154
+ puts "TEST2: Authentication (RHN account) / user info"
155
+ data = {'rhlogin' => @rhlogin}
156
+
157
+ response = test_url_json("/broker/userinfo", data)
158
+ if response
159
+ puts " Code: #{response.code}"
160
+ puts " Message: #{response.message}"
161
+ body = JSON.parse(response.body)
162
+ @user_info = JSON.parse(body['data'].to_s)
163
+ puts " rhlogin: #{@user_info["user_info"]["rhlogin"]}"
164
+ puts " namespace: #{@user_info["user_info"]["namespace"]}"
165
+ end
166
+
167
+ #
168
+ # Checking ssh key
169
+ #
170
+ puts
171
+ puts "TEST3: SSH Key check"
172
+ remote_ssh_pubkey = @user_info["user_info"]["ssh_key"]
173
+ if File.exists?("#{ENV['HOME']}/.ssh/libra_id_rsa")
174
+ puts " OK: ~/.ssh/libra_id_rsa - Found"
175
+ key_dump = `ssh-keygen -f ~/.ssh/libra_id_rsa -y`
176
+ local_derived_ssh_pubkey = key_dump.to_s.strip.split(' ')[1]
177
+ else
178
+ puts " ERROR: ~/.ssh/libra_id_rsa - Not Found!"
179
+ end
180
+
181
+ if File.exists?("#{ENV['HOME']}/.ssh/libra_id_rsa.pub")
182
+ puts " OK: ~/.ssh/libra_id_rsa.pub Found"
183
+ fp = File.open("#{ENV['HOME']}/.ssh/libra_id_rsa.pub")
184
+ local_ssh_pubkey = fp.gets.split(' ')[1]
185
+ fp.close
186
+ else
187
+ puts " WARNING: ~/.ssh/libra_id_rsa.pub Not Found! (non fatal error)"
188
+ end
189
+
190
+ if local_ssh_pubkey.to_s.strip == remote_ssh_pubkey.to_s.strip
191
+ puts " OK: Remote and ~/.ssh/libra_id_rsa.pub - match"
192
+ else
193
+ puts " WARNING: Remote and ~/.ssh/libra_id_rsa key do not match. (have you changed machines or ssh keys?)"
194
+ end
195
+
196
+ if local_derived_ssh_pubkey.to_s.strip == remote_ssh_pubkey.to_s.strip
197
+ puts " OK: local ~/.ssh/libra_id_rsa should auth with openshift"
198
+ else
199
+ puts " WARNING: local ~/.ssh/libra_id_rsa DOES NOT match remote pub key, ssh auth cannot continue"
200
+ puts " FIX: Perhaps you should regenerate your public key, or run rhc-create-domain with -a to alter the remote key"
201
+ end
202
+
203
+ puts "remote_ssh_pubkey: #{remote_ssh_pubkey}" if @debug
204
+ puts "local_ssh_pubkey: #{local_ssh_pubkey}" if @debug
205
+ puts "local_derived_ssh_pubkey: #{local_derived_ssh_pubkey}" if @debug
206
+
207
+ exit 0
@@ -145,10 +145,15 @@ end
145
145
  #
146
146
  unless File.exists?("#{ssh_config_d}/libra_id_rsa")
147
147
  puts
148
- puts "Could not find #{ssh_config_d}/libra_id_rsa, cannot continue"
149
- puts "This file was created by rhc-create-domain. If it does not exist you may need to create"
150
- puts "a new one."
151
- puts
148
+ puts "Could not find #{ssh_config_d}/libra_id_rsa. Unable to continue."
149
+ puts "Your SSH keys are created either by running ssh-keygen (password optional)"
150
+ puts "or by having the rhc-create-domain command do it for you. If you created"
151
+ puts "them on your own (or want to use an existing keypair), be sure to paste"
152
+ puts "your public key into the dashboard page at http://www.openshift.com."
153
+ puts "The client tools expect libra_id_rsa[.pub] so in the event that you are"
154
+ puts "using existing keys, you can symlink libra_id_rsa -> id_rsa and"
155
+ puts "libra_id_rsa.pub -> id_rsa.pub"
156
+ puts "Also, make sure you never give out your secret key!"
152
157
  exit 212
153
158
  end
154
159
 
@@ -166,7 +171,7 @@ data = {:cartridge => opt['type'],
166
171
  if debug
167
172
  data['debug'] = "true"
168
173
  end
169
- json_data = JSON.generate(data)
174
+ json_data = RHC::generate_json(data)
170
175
 
171
176
  puts "Contacting https://#{libra_server}"
172
177
 
@@ -188,7 +193,7 @@ end
188
193
  #
189
194
  at_exit do
190
195
  unless $!.nil? || $!.is_a?(SystemExit) && $!.success?
191
- json_data = JSON.generate(
196
+ json_data = RHC::generate_json(
192
197
  {:cartridge => opt['type'],
193
198
  :action => 'deconfigure',
194
199
  :app_name => opt['app'],
@@ -272,7 +277,7 @@ File.chmod(0600, ssh_config)
272
277
  #
273
278
  # Confirm that the host exists in DNS
274
279
  #
275
- puts "Now your new domain name is being populated worldwide (this might take a minute)..."
280
+ puts "Now your new domain name is being propagated worldwide (this might take a minute)..."
276
281
 
277
282
  # Allow DNS to propogate
278
283
  sleep 15
@@ -287,13 +292,9 @@ while loop < RHC::Maxretries && !RHC::hostexist?(fqdn)
287
292
  sleep_time = RHC::delay(sleep_time)
288
293
  end
289
294
 
290
- if loop >= RHC::Maxretries
291
- puts "Host could not be created and/or found..."
292
- exit 215
293
- end
294
-
295
295
  sleep_time = 2
296
296
  attempt = 0
297
+
297
298
  #
298
299
  # Pull new repo locally
299
300
  #
@@ -305,15 +306,52 @@ app_uuid = user_info['app_info'][app_name]['uuid']
305
306
 
306
307
  git_url = "ssh://#{app_uuid}@#{app_name}-#{namespace}.#{rhc_domain}/~/git/#{app_name}.git/"
307
308
 
309
+ # If the hostname couldn't be resolved, print out the git URL
310
+ # and exit cleanly. This will help solve issues where DNS times
311
+ # out in APAC, etc on resolution.
312
+ if loop >= RHC::Maxretries
313
+ puts <<WARNING
314
+
315
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
316
+ WARNING: We weren't able to lookup your hostname (#{fqdn})
317
+ in a reasonable amount of time. This can happen periodically and will just
318
+ take an extra minute or two to propagate depending on where you are in the
319
+ world. Once you are able to access your application in a browser, you can then
320
+ clone your git repository.
321
+
322
+ Application URL: http://#{fqdn}
323
+
324
+ Git Repository URL: #{git_url}
325
+
326
+ Git Clone command:
327
+ git clone #{git_url} #{opt['repo']}
328
+
329
+ If you can't get your application running in the browser, you can also try
330
+ destroying and recreating the application as well using:
331
+
332
+ rhc-ctl-app -c destroy -a #{opt['app']} -l #{opt["rhlogin"]}
333
+
334
+ If this doesn't work for you, let us know in the forums or in IRC and we'll
335
+ make sure to get you up and running.
336
+
337
+ Forums: https://www.redhat.com/openshift/forums/express
338
+
339
+ IRC: #openshift (on Freenode)
340
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
341
+
342
+ WARNING
343
+ exit 0
344
+ end
345
+
308
346
  unless opt['nogit']
309
347
  puts "Pulling new repo down"
310
348
 
311
349
  puts "git clone --quiet #{git_url} #{opt['repo']}" if debug
312
350
  quiet = (debug ? ' ' : '--quiet ')
313
- git_pull = %x<git clone #{quiet} #{git_url} #{opt['repo']}>
351
+ git_clone = %x<git clone #{quiet} #{git_url} #{opt['repo']}>
314
352
  if $?.exitstatus != 0
315
- puts "Error in git pull"
316
- puts git_pull
353
+ puts "Error in git clone"
354
+ puts git_clone
317
355
  exit 216
318
356
  end
319
357
  else
@@ -141,7 +141,7 @@ if debug
141
141
  data['debug'] = "true"
142
142
  end
143
143
  RHC::print_post_data(data, debug)
144
- json_data = JSON.generate(data)
144
+ json_data = RHC::generate_json(data)
145
145
 
146
146
  url = URI.parse("https://#{libra_server}/broker/domain")
147
147
  response = RHC::http_post(@http, url, json_data, password)
@@ -168,7 +168,7 @@ EOF
168
168
  #
169
169
  # Confirm that the host(s) exist in DNS
170
170
  #
171
- puts "Now your new domain name(s) are being populated worldwide (this might take a minute)..."
171
+ puts "Now your new domain name(s) are being propagated worldwide (this might take a minute)..."
172
172
  # Allow DNS to propogate
173
173
  sleep 15
174
174
  app_info.each_key do |appname|
@@ -173,7 +173,7 @@ if debug
173
173
  data['debug'] = "true"
174
174
  end
175
175
 
176
- json_data = JSON.generate(data)
176
+ json_data = RHC::generate_json(data)
177
177
  puts "Submitting form: #{json_data}" if debug
178
178
 
179
179
  puts "Contacting https://#{libra_server}"
@@ -35,6 +35,7 @@ Pull down application snapshot for a user
35
35
 
36
36
  -l|--rhlogin rhlogin Red Hat login (RHN or OpenShift login with OpenShift Express access) (#{rhlogin})
37
37
  -a|--app Target application to snapshot (required)
38
+ -r|--restore Local path of the tarball to restore (restores git and application data folders found in archive)
38
39
  -s|--save Local path to save tarball (default: ./$APPNAME.tar.gz)
39
40
  -p|--password password RHLogin password (optional, will prompt)
40
41
  -d|--debug Print Debug info
@@ -50,6 +51,7 @@ begin
50
51
  ["--help", "-h", GetoptLong::NO_ARGUMENT],
51
52
  ["--app", "-a", GetoptLong::REQUIRED_ARGUMENT],
52
53
  ["--save", "-s", GetoptLong::REQUIRED_ARGUMENT],
54
+ ["--restore", "-r", GetoptLong::REQUIRED_ARGUMENT],
53
55
  ["--rhlogin", "-l", GetoptLong::REQUIRED_ARGUMENT],
54
56
  ["--password", "-p", GetoptLong::REQUIRED_ARGUMENT]
55
57
  )
@@ -91,7 +93,7 @@ end
91
93
  user_info = RHC::get_user_info(libra_server, opt['rhlogin'], password, @http, debug, false)
92
94
 
93
95
  app = opt['app']
94
- opt['save'] = "#{opt['app']}.tar.gz" unless opt['save']
96
+ opt['save'] = "#{opt['app']}.tar.gz" unless opt['save'] || opt['restore']
95
97
 
96
98
  unless user_info['app_info'][app]
97
99
  puts
@@ -104,18 +106,44 @@ end
104
106
  app_uuid = user_info['app_info'][app]['uuid']
105
107
  namespace = user_info['user_info']['namespace']
106
108
  rhc_domain = user_info['user_info']['rhc_domain']
107
- ssh_cmd = "ssh #{app_uuid}@#{app}-#{namespace}.#{rhc_domain} 'snapshot #{app}' > #{opt['save']}"
109
+ if opt['save']
110
+ ssh_cmd = "ssh #{app_uuid}@#{app}-#{namespace}.#{rhc_domain} 'snapshot' > #{opt['save']}"
111
+ puts "Pulling down a snapshot to #{opt['save']}"
112
+ else
113
+ if File.exists? opt['restore']
114
+ `tar -tf #{opt['restore']} './*/#{app}'`
115
+ if $?.exitstatus != 0
116
+ puts "Archive at #{opt['restore']} does not contain the target application: ./#{app}"
117
+ exit 255
118
+ else
119
+ `tar -tf #{opt['restore']} './*/git'`
120
+ include_git = $?.exitstatus == 0
121
+ ssh_cmd = "cat #{opt['restore']} | ssh #{app_uuid}@#{app}-#{namespace}.#{rhc_domain} 'restore#{include_git ? ' INCLUDE_GIT' : ''}'"
122
+ puts "Restoring from snapshot #{opt['restore']}"
123
+ end
124
+ else
125
+ puts "Archive not found: #{opt['restore']}"
126
+ exit 255
127
+ end
128
+ end
129
+
108
130
 
109
- puts "Pulling down a snapshot to #{opt['save']}"
110
131
  puts
111
132
  puts ssh_cmd if debug
112
- git_pull = `#{ssh_cmd}`
133
+ output = `#{ssh_cmd}`
134
+ puts
113
135
  if $?.exitstatus != 0
136
+ puts output
114
137
  puts
138
+ if opt['save']
115
139
  puts "Error in trying to save snapshot. You can try to save manually by running:"
140
+ else
141
+ puts "Error in trying to restore snapshot. You can try to restore manually by running:"
142
+ end
116
143
  puts
117
144
  puts ssh_cmd
118
145
  puts
119
146
  exit 254
120
147
  end
148
+ puts output if opt['restore'] && debug
121
149
  exit 0
@@ -34,13 +34,31 @@ require 'uri'
34
34
  module RHC
35
35
 
36
36
  Maxdlen = 16
37
- Maxretries = 10
37
+ Maxretries = 7
38
38
  Defaultdelay = 2
39
+ API = "1.1.1"
40
+ broker_version = "?.?.?"
41
+ api_version = "?.?.?"
42
+
43
+ def self.update_server_api_v(dict)
44
+ if !dict['broker'].nil? && (dict['broker'] =~ /\A\d+\.\d+\.\d+\z/)
45
+ broker_version = dict['broker']
46
+ end
47
+ if !dict['api'].nil? && (dict['api'] =~ /\A\d+\.\d+\.\d+\z/)
48
+ api_version = dict['api']
49
+ end
50
+ end
39
51
 
40
52
  def self.delay(time, adj=Defaultdelay)
41
53
  (time*=adj).to_int
42
54
  end
43
-
55
+
56
+ def self.generate_json(data)
57
+ data['api'] = API
58
+ json = JSON.generate(data)
59
+ json
60
+ end
61
+
44
62
  def self.get_cartridges_list(libra_server, net_http, cart_type="standalone", debug=true, print_result=nil)
45
63
  puts "Contacting https://#{libra_server} to obtain list of cartridges..."
46
64
  puts " (please excuse the delay)"
@@ -49,7 +67,7 @@ module RHC
49
67
  data['debug'] = "true"
50
68
  end
51
69
  print_post_data(data, debug)
52
- json_data = JSON.generate(data)
70
+ json_data = generate_json(data)
53
71
 
54
72
  url = URI.parse("https://#{libra_server}/broker/cartlist")
55
73
  response = http_post(net_http, url, json_data, "none")
@@ -58,7 +76,12 @@ module RHC
58
76
  print_response_err(response, debug)
59
77
  return []
60
78
  end
61
- json_resp = JSON.parse(response.body)
79
+ begin
80
+ json_resp = JSON.parse(response.body)
81
+ rescue JSON::ParserError
82
+ exit 254
83
+ end
84
+ update_server_api_v(json_resp)
62
85
  if print_result
63
86
  print_response_success(json_resp, debug)
64
87
  end
@@ -143,7 +166,7 @@ module RHC
143
166
  data['debug'] = "true"
144
167
  end
145
168
  print_post_data(data, debug)
146
- json_data = JSON.generate(data)
169
+ json_data = generate_json(data)
147
170
 
148
171
  url = URI.parse("https://#{libra_server}/broker/userinfo")
149
172
  response = http_post(net_http, url, json_data, password)
@@ -164,7 +187,12 @@ module RHC
164
187
  end
165
188
  exit 254
166
189
  end
167
- json_resp = JSON.parse(response.body)
190
+ begin
191
+ json_resp = JSON.parse(response.body)
192
+ rescue JSON::ParserError
193
+ exit 254
194
+ end
195
+ update_server_api_v(json_resp)
168
196
  if print_result
169
197
  print_response_success(json_resp, debug)
170
198
  end
@@ -223,15 +251,20 @@ module RHC
223
251
  end
224
252
  exit_code = 254
225
253
  if response.content_type == 'application/json'
226
- json_resp = JSON.parse(response.body)
227
- exit_code = print_json_body(json_resp, debug)
254
+ puts "JSON response:"
255
+ begin
256
+ json_resp = JSON.parse(response.body)
257
+ exit_code = print_json_body(json_resp, debug)
258
+ rescue JSON::ParserError
259
+ exit_code = 254
260
+ end
228
261
  elsif debug
229
262
  puts "HTTP response from server is #{response.body}"
230
263
  end
231
264
  exit exit_code.nil? ? 666 : exit_code
232
265
  end
233
-
234
- def self.print_response_messages(json_resp)
266
+
267
+ def self.print_response_messages(json_resp)
235
268
  messages = json_resp['messages']
236
269
  if (messages && !messages.empty?)
237
270
  puts ''
@@ -271,6 +304,12 @@ module RHC
271
304
  end
272
305
  end
273
306
  end
307
+ if json_resp['api']
308
+ puts "API version: #{json_resp['api']}"
309
+ end
310
+ if json_resp['broker']
311
+ puts "Broker version: #{json_resp['broker']}"
312
+ end
274
313
  if json_resp['result']
275
314
  puts ''
276
315
  puts 'RESULT:'
@@ -308,7 +347,7 @@ if !File.exists? local_config_path
308
347
  FileUtils.touch local_config_path
309
348
  puts ""
310
349
  puts "Created local config file: " + local_config_path
311
- puts "express.conf contains user configuration and can be transferred across clients."
350
+ puts "express.conf contains user configuration and can be transferred across clients."
312
351
  puts ""
313
352
  end
314
353
 
@@ -331,7 +370,7 @@ else
331
370
  end
332
371
 
333
372
  #
334
- # Check for local var in
373
+ # Check for local var in
335
374
  # 1) ~/.openshift/express.conf
336
375
  # 2) /etc/openshift/express.conf
337
376
  # 3) $GEM/../conf/express.conf
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: 315
4
+ hash: 289
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 74
9
- - 6
10
- version: 0.74.6
8
+ - 75
9
+ - 9
10
+ version: 0.75.9
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: 2011-08-10 00:00:00 -05:00
18
+ date: 2011-08-22 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -61,6 +61,7 @@ extra_rdoc_files: []
61
61
 
62
62
  files:
63
63
  - lib/rhc-common.rb
64
+ - bin/rhc-chk
64
65
  - bin/rhc-create-domain
65
66
  - bin/rhc-tail-files
66
67
  - bin/rhc-create-app