aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoss Brattain <ross.b.brattain@intel.com>2017-01-11 21:59:18 -0800
committerRoss Brattain <ross.b.brattain@intel.com>2017-01-12 00:45:50 -0800
commit5f0b3d417244397b2d5e61c7a6ddd145f1d25046 (patch)
tree7da9673054bb138a7bafd231edccca774c927f5b
parent708550dd0718abdad8862e2275cc8e025a7c55e3 (diff)
heat: fix key_uuid format
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>
-rw-r--r--tests/unit/orchestrator/test_heat.py26
-rw-r--r--yardstick/benchmark/contexts/heat.py11
-rw-r--r--yardstick/orchestrator/heat.py13
3 files changed, 42 insertions, 8 deletions
diff --git a/tests/unit/orchestrator/test_heat.py b/tests/unit/orchestrator/test_heat.py
new file mode 100644
index 000000000..97314c275
--- /dev/null
+++ b/tests/unit/orchestrator/test_heat.py
@@ -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))
diff --git a/yardstick/benchmark/contexts/heat.py b/yardstick/benchmark/contexts/heat.py
index 166ca40c8..29c47b39a 100644
--- a/yardstick/benchmark/contexts/heat.py
+++ b/yardstick/benchmark/contexts/heat.py
@@ -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]
diff --git a/yardstick/orchestrator/heat.py b/yardstick/orchestrator/heat.py
index f1104d625..e32d360e4 100644
--- a/yardstick/orchestrator/heat.py
+++ b/yardstick/orchestrator/heat.py
@@ -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')
}
}