summaryrefslogtreecommitdiff
path: root/lib/chef
diff options
context:
space:
mode:
authorjamesc <james@opscode.com>2013-05-23 20:21:05 -0700
committerBryan McLellan <btm@opscode.com>2013-06-18 08:58:18 -0700
commitb3aafbc814a5dceb2d6f793d5035d4248f153892 (patch)
treebe24dec0ae8044a20dd54a89ab9c467739e773ab /lib/chef
parent5adefe7da91576bc6a92d6ebec13ff41fb6b1287 (diff)
downloadchef-b3aafbc814a5dceb2d6f793d5035d4248f153892.tar.gz
monkey patch SecureRandom with uuid method if required
Diffstat (limited to 'lib/chef')
-rw-r--r--lib/chef/monkey_patches/securerandom.rb44
-rw-r--r--lib/chef/resource_reporter.rb16
2 files changed, 46 insertions, 14 deletions
diff --git a/lib/chef/monkey_patches/securerandom.rb b/lib/chef/monkey_patches/securerandom.rb
new file mode 100644
index 0000000000..7a41a1dbb0
--- /dev/null
+++ b/lib/chef/monkey_patches/securerandom.rb
@@ -0,0 +1,44 @@
+#
+# Author:: James Casey <james@opscode.com>
+# Copyright:: Copyright (c) 2013 Opscode, Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# == SecureRandom (Patch)
+# On ruby 1.9, SecureRandom has a uuid method which generates a v4 UUID. The
+# backport of SecureRandom to 1.8.7 is missing this method
+
+require 'securerandom'
+
+module SecureRandom
+ unless respond_to?(:uuid)
+ # SecureRandom.uuid generates a v4 random UUID (Universally Unique IDentifier).
+ #
+ # p SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
+ # p SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
+ # p SecureRandom.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"
+ #
+ # The version 4 UUID is purely random (except the version).
+ # It doesn't contain meaningful information such as MAC address, time, etc.
+ #
+ # See RFC 4122 for details of UUID.
+ def self.uuid
+ ary = self.random_bytes(16).unpack("NnnnnN")
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
+ "%08x-%04x-%04x-%04x-%04x%08x" % ary
+ end
+ end
+end
diff --git a/lib/chef/resource_reporter.rb b/lib/chef/resource_reporter.rb
index c428e70afd..44e8a068db 100644
--- a/lib/chef/resource_reporter.rb
+++ b/lib/chef/resource_reporter.rb
@@ -20,6 +20,7 @@
#
require 'uri'
+require 'chef/monkey_patches/securerandom'
require 'chef/event_dispatch/base'
class Chef
@@ -97,12 +98,7 @@ class Chef
@pending_update = nil
@status = "success"
@exception = nil
- begin
- @run_id = uuid
- rescue LoadError
- Chef::Log.debug("Can't load SecureRandom - disabling resource_reporter")
- @reporting_enabled = false
- end
+ @run_id = SecureRandom.uuid
@rest_client = rest_client
@error_descriptions = {}
end
@@ -307,13 +303,5 @@ class Chef
end
end
- def uuid
- require 'securerandom'
- # Ruby 1.8.7 does not have SecureRandom::uuid, so copy the 1.9.2 impl here
- ary = SecureRandom.random_bytes(16).unpack("NnnnnN")
- ary[2] = (ary[2] & 0x0fff) | 0x4000
- ary[3] = (ary[3] & 0x3fff) | 0x8000
- "%08x-%04x-%04x-%04x-%04x%08x" % ary
- end
end
end