diff --git a/openstack/compute/v2/server.py b/openstack/compute/v2/server.py index 74f09182e..267cac23c 100644 --- a/openstack/compute/v2/server.py +++ b/openstack/compute/v2/server.py @@ -308,6 +308,11 @@ class Server(resource.Resource, metadata.MetadataMixin, tag.TagMixin): if hint_key in server_body: request.body[hint_key] = server_body.pop(hint_key) + # hostname exists with a prefix on response, but not request + hostname_key = "OS-EXT-SRV-ATTR:hostname" + if hostname_key in server_body: + server_body["hostname"] = server_body.pop(hostname_key) + return request def _action(self, session, body, microversion=None): diff --git a/openstack/tests/unit/compute/v2/test_server.py b/openstack/tests/unit/compute/v2/test_server.py index f2cdc7e3d..98a96acae 100644 --- a/openstack/tests/unit/compute/v2/test_server.py +++ b/openstack/tests/unit/compute/v2/test_server.py @@ -274,6 +274,7 @@ class TestServer(base.TestCase): zone = 1 data = 2 hints = {"hint": 3} + hostname = 'foo' sot = server.Server( id=1, @@ -282,6 +283,7 @@ class TestServer(base.TestCase): scheduler_hints=hints, min_count=2, max_count=3, + hostname=hostname, ) request = sot._prepare_request() @@ -302,6 +304,11 @@ class TestServer(base.TestCase): ) self.assertEqual(request.body["OS-SCH-HNT:scheduler_hints"], hints) + self.assertNotIn( + "OS-EXT-SRV-ATTR:hostname", request.body[sot.resource_key] + ) + self.assertEqual(request.body[sot.resource_key]["hostname"], hostname) + self.assertEqual(2, request.body[sot.resource_key]['min_count']) self.assertEqual(3, request.body[sot.resource_key]['max_count'])