diff options
author | Ross Brattain <ross.b.brattain@intel.com> | 2017-01-11 21:59:18 -0800 |
---|---|---|
committer | Ross Brattain <ross.b.brattain@intel.com> | 2017-01-12 00:45:50 -0800 |
commit | 5f0b3d417244397b2d5e61c7a6ddd145f1d25046 (patch) | |
tree | 7da9673054bb138a7bafd231edccca774c927f5b | |
parent | 708550dd0718abdad8862e2275cc8e025a7c55e3 (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.py | 26 | ||||
-rw-r--r-- | yardstick/benchmark/contexts/heat.py | 11 | ||||
-rw-r--r-- | yardstick/orchestrator/heat.py | 13 |
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') } } |