heat: fix key_uuid format 09/26909/2
authorRoss Brattain <ross.b.brattain@intel.com>
Thu, 12 Jan 2017 05:59:18 +0000 (21:59 -0800)
committerRoss Brattain <ross.b.brattain@intel.com>
Thu, 12 Jan 2017 08:45:50 +0000 (00:45 -0800)
The .format() won't work, since it can't slice the uuid

We have to convert the uuid to string before we slice it.
I thought .format() would implicitly call __str__() before
applying width, but that is not the case.

'files/yardstick_key-{:.{width}}'.format(self.key_uuid, width=8))

We also need to define a constant short uuid lenght, we can't
hardcode the length to 8 everywhere.

Create a helper function to standardize the generation
of the short key uuid and use that helper function everywhere

Change-Id: I59e051bfe697587e967f93f5b8f209e0e7daa5c7
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
tests/unit/orchestrator/test_heat.py [new file with mode: 0644]
yardstick/benchmark/contexts/heat.py
yardstick/orchestrator/heat.py

diff --git a/tests/unit/orchestrator/test_heat.py b/tests/unit/orchestrator/test_heat.py
new file mode 100644 (file)
index 0000000..97314c2
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2017 Intel Corporation
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Unittest for yardstick.benchmark.orchestrator.heat
+
+import unittest
+import uuid
+
+from yardstick.orchestrator import heat
+
+
+class HeatContextTestCase(unittest.TestCase):
+
+    def test_get_short_key_uuid(self):
+        u = uuid.uuid4()
+        k = heat.get_short_key_uuid(u)
+        self.assertEqual(heat.HEAT_KEY_UUID_LENGTH, len(k))
+        self.assertIn(k, str(u))
index 166ca40..29c47b3 100644 (file)
@@ -18,7 +18,7 @@ from yardstick.benchmark.contexts.model import Server
 from yardstick.benchmark.contexts.model import PlacementGroup
 from yardstick.benchmark.contexts.model import Network
 from yardstick.benchmark.contexts.model import update_scheduler_hints
-from yardstick.orchestrator.heat import HeatTemplate
+from yardstick.orchestrator.heat import HeatTemplate, get_short_key_uuid
 from yardstick.definitions import YARDSTICK_ROOT_PATH
 
 
@@ -44,8 +44,9 @@ class HeatContext(Context):
         # generate an uuid to identify yardstick_key
         # the first 8 digits of the uuid will be used
         self.key_uuid = uuid.uuid4()
-        self.key_filename = YARDSTICK_ROOT_PATH + \
-            'yardstick/resources/files/yardstick_key-' + str(self.key_uuid)[:8]
+        self.key_filename = ''.join(
+            [YARDSTICK_ROOT_PATH, 'yardstick/resources/files/yardstick_key-',
+             get_short_key_uuid(self.key_uuid)])
         super(self.__class__, self).__init__()
 
     def init(self, attrs):
@@ -243,8 +244,8 @@ class HeatContext(Context):
         with attribute name mapping when using external heat templates
         '''
         key_filename = pkg_resources.resource_filename(
-            'yardstick.resources', 'files/yardstick_key-{:.{width}}'.format(
-                                      self.key_uuid, width=8))
+            'yardstick.resources',
+            'files/yardstick_key-' + get_short_key_uuid(self.key_uuid))
 
         if type(attr_name) is dict:
             cname = attr_name["name"].split(".")[1]
index f1104d6..e32d360 100644 (file)
@@ -14,11 +14,11 @@ import datetime
 import getpass
 import socket
 import logging
-import pkg_resources
 import json
 
 from oslo_utils import encodeutils
 import heatclient
+import pkg_resources
 
 from yardstick.common import template_format
 import yardstick.common.openstack_utils as op_utils
@@ -27,6 +27,13 @@ import yardstick.common.openstack_utils as op_utils
 log = logging.getLogger(__name__)
 
 
+HEAT_KEY_UUID_LENGTH = 8
+
+
+def get_short_key_uuid(uuid):
+    return str(uuid)[:HEAT_KEY_UUID_LENGTH]
+
+
 class HeatObject(object):
     ''' base class for template and stack'''
     def __init__(self):
@@ -308,8 +315,8 @@ class HeatTemplate(HeatObject):
                 'public_key': encodeutils.safe_decode(
                     pkg_resources.resource_string(
                         'yardstick.resources',
-                        'files/yardstick_key-{:.{width}}.pub'.format(
-                            key_uuid, width=8)),
+                        'files/yardstick_key-' +
+                        get_short_key_uuid(key_uuid) + '.pub'),
                     'utf-8')
             }
         }