From 045f2e7e0618fdf22c260625d64554382afefde1 Mon Sep 17 00:00:00 2001
From: Stephen Finucane <sfinucan@redhat.com>
Date: Mon, 16 May 2022 12:32:25 +0100
Subject: [PATCH] volume: Correct output of 'volume attachment create'

When adding these, we missed that the underlying cinder library call
actually returns a dictionary and not a Resource-based object. This
requires slightly different handling. Fix this.

Change-Id: Ie065fe4198ae1238830cb619220e856390d4cb6e
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
---
 .../unit/volume/v3/test_volume_attachment.py  |  3 ++-
 .../volume/v3/volume_attachment.py            | 23 +++++++++++++------
 ...nt-create-output-fix-56515b8fcdd260b9.yaml |  6 +++++
 3 files changed, 24 insertions(+), 8 deletions(-)
 create mode 100644 releasenotes/notes/volume-attachment-create-output-fix-56515b8fcdd260b9.yaml

diff --git a/openstackclient/tests/unit/volume/v3/test_volume_attachment.py b/openstackclient/tests/unit/volume/v3/test_volume_attachment.py
index 09f698e7fd..44fac6c586 100644
--- a/openstackclient/tests/unit/volume/v3/test_volume_attachment.py
+++ b/openstackclient/tests/unit/volume/v3/test_volume_attachment.py
@@ -73,8 +73,9 @@ class TestVolumeAttachmentCreate(TestVolumeAttachment):
 
         self.volumes_mock.get.return_value = self.volume
         self.servers_mock.get.return_value = self.server
+        # VolumeAttachmentManager.create returns a dict
         self.volume_attachments_mock.create.return_value = \
-            self.volume_attachment
+            self.volume_attachment.to_dict()
 
         self.cmd = volume_attachment.CreateVolumeAttachment(self.app, None)
 
diff --git a/openstackclient/volume/v3/volume_attachment.py b/openstackclient/volume/v3/volume_attachment.py
index 39a9c37fdb..c740183791 100644
--- a/openstackclient/volume/v3/volume_attachment.py
+++ b/openstackclient/volume/v3/volume_attachment.py
@@ -51,18 +51,27 @@ def _format_attachment(attachment):
         'Properties',
     )
 
-    # TODO(stephenfin): Improve output with the nested connection_info
-    # field - cinderclient printed two things but that's equally ugly
-    return (
-        column_headers,
-        utils.get_item_properties(
+    # VolumeAttachmentManager.create returns a dict while everything else
+    # returns a VolumeAttachment object
+    if isinstance(attachment, dict):
+        data = []
+        for column in columns:
+            if column == 'connection_info':
+                data.append(format_columns.DictColumn(attachment[column]))
+                continue
+            data.append(attachment[column])
+    else:
+        data = utils.get_item_properties(
             attachment,
             columns,
             formatters={
                 'connection_info': format_columns.DictColumn,
             },
-        ),
-    )
+        )
+
+    # TODO(stephenfin): Improve output with the nested connection_info
+    # field - cinderclient printed two things but that's equally ugly
+    return (column_headers, data)
 
 
 class CreateVolumeAttachment(command.ShowOne):
diff --git a/releasenotes/notes/volume-attachment-create-output-fix-56515b8fcdd260b9.yaml b/releasenotes/notes/volume-attachment-create-output-fix-56515b8fcdd260b9.yaml
new file mode 100644
index 0000000000..b8bd06e195
--- /dev/null
+++ b/releasenotes/notes/volume-attachment-create-output-fix-56515b8fcdd260b9.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+  - |
+    The ``volume attachment create`` command will now display information
+    for successfully created volume attachments. Previously an empty table was
+    returned.