From 59072e7ee8eda9f26140265bd4b36ee1c87e5547 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Thu, 11 Oct 2007 12:04:44 +0000 Subject: [PATCH] Use the kernel's ability to generate UUIDs. This removes the dependency on either the uuid module or e2fsprogs' uuidgen. Reviewed-by: iustinp --- lib/config.py | 19 +------------------ lib/utils.py | 11 +++++++++++ test/ganeti.utils_unittest.py | 12 ++++++++++++ 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/config.py b/lib/config.py index f4e1ab2a1..b5d16bcc9 100644 --- a/lib/config.py +++ b/lib/config.py @@ -43,23 +43,6 @@ from ganeti import rpc from ganeti import objects -def _my_uuidgen(): - """Poor-man's uuidgen using the uuidgen binary. - - """ - result = utils.RunCmd(["uuidgen", "-r"]) - if result.failed: - return None - return result.stdout.rstrip('\n') - - -try: - import uuid - _uuidgen = uuid.uuid4 -except ImportError: - _uuidgen = _my_uuidgen - - class ConfigWriter: """The interface to the cluster configuration. @@ -149,7 +132,7 @@ class ConfigWriter: existing.update(exceptions) retries = 64 while retries > 0: - unique_id = _uuidgen() + unique_id = utils.GetUUID() if unique_id not in existing and unique_id is not None: break else: diff --git a/lib/utils.py b/lib/utils.py index 7038ac780..fc7dcdbe9 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -834,3 +834,14 @@ def GetHomeDir(uid, default=None): except KeyError: return default return result.pw_dir + + +def GetUUID(): + """Returns a random UUID. + + """ + f = open("/proc/sys/kernel/random/uuid", "r") + try: + return f.read(128).rstrip("\n") + finally: + f.close() diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py index 40e9d7987..4de493a32 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -29,9 +29,11 @@ import os.path import md5 import socket import shutil +import re import ganeti from ganeti import constants +from ganeti import utils from ganeti.utils import IsProcessAlive, Lock, Unlock, RunCmd, \ RemoveFile, CheckDict, MatchNameComponent, FormatUnit, \ ParseUnit, AddAuthorizedKey, RemoveAuthorizedKey, \ @@ -539,5 +541,15 @@ class TestListVisibleFiles(unittest.TestCase): self._test(files, expected) +class TestGetUUID(unittest.TestCase): + """Test case for GetUUID""" + + _re_uuid = re.compile('^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-' + '[a-f0-9]{4}-[a-f0-9]{12}$') + + def runTest(self): + self.failUnless(self._re_uuid.match(utils.GetUUID())) + + if __name__ == '__main__': unittest.main() -- GitLab