From 2da73584fdb2a77ebf6a35a3fe969f42924c3a2d Mon Sep 17 00:00:00 2001 From: chenhb Date: Fri, 19 Apr 2019 10:39:37 +0800 Subject: [PATCH] Fix LP #1819284 and barbican.get_secret of barbican service Because secret class is lazy in barbican client, secret would really access the api to get secret properties while calling some property. Closes-bug: #1819284 Change-Id: I0e37ccbb0bc74621f9dd47adbff98d64f2f79653 --- CHANGELOG.rst | 7 +++++++ rally_openstack/cleanup/resources.py | 2 +- rally_openstack/services/key_manager/barbican.py | 10 +++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 926f671b..588fefc0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -26,6 +26,13 @@ Changed Cinder service. To use another service type, use ``api_versions@openstack`` context or ``api_info`` property of environment configuration. +Fixed +~~~~~~~ + +* Close bug LP #1819284. Because secret class is lazy in barbican client, + secret would really access the api to get secret properties while calling + some property. + [1.4.0] - 2019-03-07 -------------------- diff --git a/rally_openstack/cleanup/resources.py b/rally_openstack/cleanup/resources.py index 7112183b..d99315c1 100644 --- a/rally_openstack/cleanup/resources.py +++ b/rally_openstack/cleanup/resources.py @@ -1112,7 +1112,7 @@ class BarbicanSecrets(base.ResourceManager): def is_deleted(self): try: - self._manager().get(self.id()) + self._manager().get(self.id()).status except Exception: return True diff --git a/rally_openstack/services/key_manager/barbican.py b/rally_openstack/services/key_manager/barbican.py index 4a1db8d1..b976c8be 100644 --- a/rally_openstack/services/key_manager/barbican.py +++ b/rally_openstack/services/key_manager/barbican.py @@ -58,7 +58,15 @@ class BarbicanService(service.Service): :param secret_name: The name of the secret. """ - return self._clients.barbican().secrets.get(secret_ref) + secret = self._clients.barbican().secrets.get(secret_ref) + # secret is lazy, its properties would be filled with real + # values while getting some property. + try: + secret.status + except Exception as e: + from rally import exceptions + raise exceptions.GetResourceFailure(resource=secret, err=e) + return secret @atomic.action_timer("barbican.delete_secret") def delete_secret(self, secret_name):