summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Herve <therve@redhat.com>2017-03-28 15:19:00 +0200
committerThomas Herve <therve@redhat.com>2017-03-30 10:17:54 +0200
commit144e5a883d1f9f867e4174df3f35661c83ce4da7 (patch)
tree4a1b03d54eea87c831143902ebabc4e23f4669be
parentc5889e9fdba7b9a05dca14b0dc0c89b0591fa89b (diff)
downloadpython-heatclient-144e5a883d1f9f867e4174df3f35661c83ce4da7.tar.gz
Build event stack_name from links1.5.1
When retrieving events from nested stacks, we used to do a query per stack and thus get the stack that way. We changed it to do only one API call, but didn't fix the way the stack name was set. We need to use the event links to retrieve the stack name, instead of the root stack. Conflicts: heatclient/tests/unit/test_event_utils.py Closes-Bug: #1676896 Change-Id: I09ab1cc2c6aaab02036b124b1dfa561dd6132083 (cherry picked from commit 954e475a6a0a12432ec325d7579460fabcf3f40a)
-rw-r--r--heatclient/common/event_utils.py12
-rw-r--r--heatclient/tests/unit/test_event_utils.py6
2 files changed, 15 insertions, 3 deletions
diff --git a/heatclient/common/event_utils.py b/heatclient/common/event_utils.py
index c0bc42e..4c659aa 100644
--- a/heatclient/common/event_utils.py
+++ b/heatclient/common/event_utils.py
@@ -150,6 +150,15 @@ def _get_nested_events(hc, nested_depth, stack_id, event_args):
return nested_events
+def _get_stack_name_from_links(event):
+ links = dict((l.get('rel'),
+ l.get('href')) for l in getattr(event, 'links', []))
+ href = links.get('stack')
+ if not href:
+ return
+ return href.split('/stacks/', 1)[-1].split('/')[0]
+
+
def _get_stack_events(hc, stack_id, event_args):
event_args['stack_id'] = stack_id
try:
@@ -159,9 +168,10 @@ def _get_stack_events(hc, stack_id, event_args):
# just use the message that the server sent us.
raise exc.CommandError(str(ex))
else:
+ stack_name = stack_id.split("/")[0]
# Show which stack the event comes from (for nested events)
for e in events:
- e.stack_name = stack_id.split("/")[0]
+ e.stack_name = _get_stack_name_from_links(e) or stack_name
return events
diff --git a/heatclient/tests/unit/test_event_utils.py b/heatclient/tests/unit/test_event_utils.py
index 32e4473..76f87ed 100644
--- a/heatclient/tests/unit/test_event_utils.py
+++ b/heatclient/tests/unit/test_event_utils.py
@@ -38,7 +38,9 @@ class ShellTestEventUtils(testtools.TestCase):
@staticmethod
def _mock_event(event_id, resource_id,
resource_status='CREATE_COMPLETE'):
- ev_info = {"links": [{"href": "http://heat/foo", "rel": "self"}],
+ ev_info = {"links": [
+ {"href": "http://heat/foo", "rel": "self"},
+ {"href": "http://heat/stacks/a", "rel": "stack"}],
"logical_resource_id": resource_id,
"physical_resource_id": resource_id,
"resource_name": resource_id,
@@ -72,7 +74,7 @@ class ShellTestEventUtils(testtools.TestCase):
stack_id='astack/123', argfoo=123)
self.assertEqual(1, len(evs))
self.assertEqual('event1', evs[0].id)
- self.assertEqual('astack', evs[0].stack_name)
+ self.assertEqual('a', evs[0].stack_name)
def test_get_nested_events(self):
resources = {'parent': self._mock_resource('resource1', 'foo/child1'),