From 22b30b99ce0e7b64aed1a13df73ab52a0b33204d Mon Sep 17 00:00:00 2001
From: Stephen Finucane <stephenfin@redhat.com>
Date: Mon, 9 Dec 2024 13:32:15 +0000
Subject: [PATCH] compute: Workaround bug #2089821

By passing a dict instead of a single value, we force SDK to populate
the correct attribute on the object.

Change-Id: I9f4c5964dc0546215474c92db567966ffad68a1a
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Related-bug: #2089821
---
 openstackclient/compute/v2/server.py                 | 6 ++++--
 openstackclient/tests/unit/compute/v2/test_server.py | 8 ++++----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index f7b860df8d..02f1c3515b 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -714,7 +714,8 @@ class AddServerSecurityGroup(command.Command):
         for security_group in security_groups:
             try:
                 compute_client.add_security_group_to_server(
-                    server, security_group
+                    server,
+                    {'name': security_group},
                 )
             except sdk_exceptions.HttpException as e:
                 errors += 1
@@ -4083,7 +4084,8 @@ class RemoveServerSecurityGroup(command.Command):
         for security_group in security_groups:
             try:
                 compute_client.remove_security_group_from_server(
-                    server, security_group
+                    server,
+                    {'name': security_group},
                 )
             except sdk_exceptions.HttpException as e:
                 errors += 1
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index a07e33333f..7746b82af4 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -1165,7 +1165,7 @@ class TestServerAddSecurityGroup(compute_fakes.TestComputev2):
             self.server.id, ignore_missing=False
         )
         self.compute_sdk_client.add_security_group_to_server.assert_called_once_with(
-            self.server, 'fake_sg'
+            self.server, {'name': 'fake_sg'}
         )
         mock_find_nova_net_sg.assert_called_once_with(
             self.compute_sdk_client, 'fake_sg'
@@ -1186,7 +1186,7 @@ class TestServerAddSecurityGroup(compute_fakes.TestComputev2):
             self.server.id, ignore_missing=False
         )
         self.compute_sdk_client.add_security_group_to_server.assert_called_once_with(
-            self.server, 'fake_sg'
+            self.server, {'name': 'fake_sg'}
         )
         self.assertIsNone(result)
 
@@ -7400,7 +7400,7 @@ class TestServerRemoveSecurityGroup(TestServer):
             self.server.id, ignore_missing=False
         )
         self.compute_sdk_client.remove_security_group_from_server.assert_called_once_with(
-            self.server, 'fake_sg'
+            self.server, {'name': 'fake_sg'}
         )
         mock_find_nova_net_sg.assert_called_once_with(
             self.compute_sdk_client, 'fake_sg'
@@ -7421,7 +7421,7 @@ class TestServerRemoveSecurityGroup(TestServer):
             self.server.id, ignore_missing=False
         )
         self.compute_sdk_client.remove_security_group_from_server.assert_called_once_with(
-            self.server, 'fake_sg'
+            self.server, {'name': 'fake_sg'}
         )
         self.assertIsNone(result)