)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"83382cc43298edb618b6cec6aa4e2305ac12cec4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"28c51baf_e3123c11","updated":"2026-02-26 13:45:31.000000000","message":"recheck no logs?","commit_id":"1890bd92cadf1fca955aca4adcc6c141df5ed9a3"}],"openstack/compute/v2/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b62e6db681edb7d3a9fabb5ac49c05fd6c5686b","unresolved":true,"context_lines":[{"line_number":1016,"context_line":"        :returns: :class:`~openstack.image.v2.image.Image` object."},{"line_number":1017,"context_line":"        \"\"\""},{"line_number":1018,"context_line":"        server \u003d self._get_resource(_server.Server, server)"},{"line_number":1019,"context_line":"        image_id \u003d server.backup(self, name, backup_type, rotation)"},{"line_number":1020,"context_line":"        image \u003d self._connection.get_image(image_id)"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        if not wait:"},{"line_number":1023,"context_line":"            return image"},{"line_number":1024,"context_line":"        return self._connection.wait_for_image(image, timeout\u003dtimeout)"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    def pause_server(self, server):"},{"line_number":1027,"context_line":"        \"\"\"Pauses a server and changes its status to ``PAUSED``."}],"source_content_type":"text/x-python","patch_set":2,"id":"94597044_94bae012","line":1024,"range":{"start_line":1019,"start_character":0,"end_line":1024,"end_character":70},"updated":"2025-05-19 12:30:06.000000000","message":"Can we just return the image ID? If we want to do this kind of cross-service interaction, we should do it in the cloud layer.\n\n*Later:* Ah, I see you\u0027re copying what `create_server_image` does. I don\u0027t like it, but at least it\u0027s consistent. If we\u0027re doing this, please document the additional parameters and ideally make them kwarg-only.","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7ad305afa158cef5dd028513f3acef9b0d46bcdc","unresolved":true,"context_lines":[{"line_number":1016,"context_line":"        :returns: :class:`~openstack.image.v2.image.Image` object."},{"line_number":1017,"context_line":"        \"\"\""},{"line_number":1018,"context_line":"        server \u003d self._get_resource(_server.Server, server)"},{"line_number":1019,"context_line":"        image_id \u003d server.backup(self, name, backup_type, rotation)"},{"line_number":1020,"context_line":"        image \u003d self._connection.get_image(image_id)"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        if not wait:"},{"line_number":1023,"context_line":"            return image"},{"line_number":1024,"context_line":"        return self._connection.wait_for_image(image, timeout\u003dtimeout)"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    def pause_server(self, server):"},{"line_number":1027,"context_line":"        \"\"\"Pauses a server and changes its status to ``PAUSED``."}],"source_content_type":"text/x-python","patch_set":2,"id":"d799245e_bbd32a22","line":1024,"range":{"start_line":1019,"start_character":0,"end_line":1024,"end_character":70},"in_reply_to":"94597044_94bae012","updated":"2025-06-10 12:33:18.000000000","message":"Yes I made this return the image for consistency, but sure I can update the docs.\nif you wnat just the uuid you can use the non proxy version.","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd649a2b831daa81c436637ca534969f85ac0d09","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"        :returns: :class:`~openstack.image.v2.image.Image` object."},{"line_number":1017,"context_line":"        \"\"\""},{"line_number":1018,"context_line":"        server \u003d self._get_resource(_server.Server, server)"},{"line_number":1019,"context_line":"        image_id \u003d server.backup(self, name, backup_type, rotation)"},{"line_number":1020,"context_line":"        image \u003d self._connection.get_image(image_id)"},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"        if not wait:"},{"line_number":1023,"context_line":"            return image"},{"line_number":1024,"context_line":"        return self._connection.wait_for_image(image, timeout\u003dtimeout)"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    def pause_server(self, server):"},{"line_number":1027,"context_line":"        \"\"\"Pauses a server and changes its status to ``PAUSED``."}],"source_content_type":"text/x-python","patch_set":2,"id":"dd0a99cb_fa356071","line":1024,"range":{"start_line":1019,"start_character":0,"end_line":1024,"end_character":70},"in_reply_to":"d799245e_bbd32a22","updated":"2026-02-25 20:48:39.000000000","message":"Done","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"}],"openstack/compute/v2/server.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b62e6db681edb7d3a9fabb5ac49c05fd6c5686b","unresolved":true,"context_lines":[{"line_number":654,"context_line":"        }"},{"line_number":655,"context_line":"        microversion \u003d None"},{"line_number":656,"context_line":"        if utils.supports_microversion(session, \u00272.45\u0027):"},{"line_number":657,"context_line":"            microversion \u003d \u00272.45\u0027"},{"line_number":658,"context_line":"        response \u003d self._action(session, body, microversion)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d17c994a_ecd5e9a0","line":657,"updated":"2025-05-19 12:30:06.000000000","message":"Is there a reason for this. Can we document it (via a comment) if so? Or remove if not.","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"83382cc43298edb618b6cec6aa4e2305ac12cec4","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        }"},{"line_number":655,"context_line":"        microversion \u003d None"},{"line_number":656,"context_line":"        if utils.supports_microversion(session, \u00272.45\u0027):"},{"line_number":657,"context_line":"            microversion \u003d \u00272.45\u0027"},{"line_number":658,"context_line":"        response \u003d self._action(session, body, microversion)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"8b42d33c_91b9f7c6","line":657,"in_reply_to":"6ed61917_cd371087","updated":"2026-02-26 13:45:31.000000000","message":"Done","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7ad305afa158cef5dd028513f3acef9b0d46bcdc","unresolved":true,"context_lines":[{"line_number":654,"context_line":"        }"},{"line_number":655,"context_line":"        microversion \u003d None"},{"line_number":656,"context_line":"        if utils.supports_microversion(session, \u00272.45\u0027):"},{"line_number":657,"context_line":"            microversion \u003d \u00272.45\u0027"},{"line_number":658,"context_line":"        response \u003d self._action(session, body, microversion)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"6ed61917_cd371087","line":657,"in_reply_to":"d17c994a_ecd5e9a0","updated":"2025-06-10 12:33:18.000000000","message":"its kind of for the same reason as https://review.opendev.org/c/openstack/openstacksdk/+/948584/2/openstack/compute/v2/server.py#521\n\ni say kind of because that comment is clearly not correct but i was trying tno to change unrelated things\n\nthe reaon nova retruned the image id orginly in the lcoation header is that is the semanticly correct thign to do in a hypermeida respocen\njson over took hypermedia as the default for rest api but when nova started it had\nan xml api and the convetion we have now did not exist yet.\n\nthe original comment in create_image was added by https://github.com/openstack/openstacksdk/commit/9cce6310940e2426dfcb92e0ecb4c82b93e7788a\n\nwhen i read it it made be honstly pretty angry  at how badly it misrepresnt what is happening in nova api.\n\ni was going to jsut striaght up delete it btu i decied it was out os scope so i intentionally didnt add that coment here because i tought it was pretty obvious\nwhat the code was doing\n\nbut ya the tldr is that we use 2.45 https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id41\nmodifed The createImage and createBackup server action APIs to no longer return a Location header in the response for the snapshot image, and instead return a json dict in the response body with an image_id key and uuid value.\n\nthe orginal comment \n```\n        # You won\u0027t believe it - wait, who am I kidding - of course you will!\n        # Nova returns the URL of the image created in the Location\n        # header of the response. (what?) But, even better, the URL it responds\n        # with has a very good chance of being wrong (it is built from\n        # nova.conf values that point to internal API servers in any cloud\n        # large enough to have both public and internal endpoints.\n        # However, nobody has ever noticed this because novaclient doesn\u0027t\n        # actually use that URL - it extracts the id from the end of\n        # the url, then returns the id. This leads us to question:\n        #   a) why Nova is going to return a value in a header\n        #   b) why it\u0027s going to return data that probably broken\n        #   c) indeed the very nature of the fabric of reality\n        # Although it fills us with existential dread, we have no choice but\n        # to follow suit like a lemming being forced over a cliff by evil\n        # producers from Disney.\n```\n\nimplies there is osme hting magical going on but that is not true\nthe behavior is select by the microverion you use just like everythign else is.","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b62e6db681edb7d3a9fabb5ac49c05fd6c5686b","unresolved":true,"context_lines":[{"line_number":658,"context_line":"        response \u003d self._action(session, body, microversion)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        try:"},{"line_number":661,"context_line":"            # There might be a body, there might not be"},{"line_number":662,"context_line":"            response_body \u003d response.json()"},{"line_number":663,"context_line":"        except Exception:"},{"line_number":664,"context_line":"            response_body \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"f80afc9f_976c706f","line":661,"updated":"2025-05-19 12:30:06.000000000","message":"Can you say why? Is this microversion-specific?","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd649a2b831daa81c436637ca534969f85ac0d09","unresolved":false,"context_lines":[{"line_number":658,"context_line":"        response \u003d self._action(session, body, microversion)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        try:"},{"line_number":661,"context_line":"            # There might be a body, there might not be"},{"line_number":662,"context_line":"            response_body \u003d response.json()"},{"line_number":663,"context_line":"        except Exception:"},{"line_number":664,"context_line":"            response_body \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"b51afd22_99091eb2","line":661,"in_reply_to":"7d4c3d76_f3823e4e","updated":"2026-02-25 20:48:39.000000000","message":"Done","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7ad305afa158cef5dd028513f3acef9b0d46bcdc","unresolved":true,"context_lines":[{"line_number":658,"context_line":"        response \u003d self._action(session, body, microversion)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        try:"},{"line_number":661,"context_line":"            # There might be a body, there might not be"},{"line_number":662,"context_line":"            response_body \u003d response.json()"},{"line_number":663,"context_line":"        except Exception:"},{"line_number":664,"context_line":"            response_body \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"7d4c3d76_f3823e4e","line":661,"in_reply_to":"f80afc9f_976c706f","updated":"2025-06-10 12:33:18.000000000","message":"sorry this was copy past form create_image iand the terrible comment there i ment to delet this.\n\nbut yes i was trying not to diverge form the existin pattern so i reused the exisitng code even though i really dislike it becuase it clear dose not under stand how nova microverion work\n\nthere will ether be a body or not depneing on the microversion but\nfor some reason the create_image code was written to use a fallback approch instead of the micvroverion","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"}],"releasenotes/notes/return-image-from-server-backup-fadca5e03c36ef7e.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7ad305afa158cef5dd028513f3acef9b0d46bcdc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The compute api always returns the image that was created as"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"bd59cd2e_761f0bde","line":1,"updated":"2025-06-10 12:33:18.000000000","message":"ack ill fix these all up when i respin.","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b62e6db681edb7d3a9fabb5ac49c05fd6c5686b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The compute api always returns the image that was created as"},{"line_number":5,"context_line":"    a result of the server backup instance action."},{"line_number":6,"context_line":"    Until now the sdk has not returned the image uuid from"},{"line_number":7,"context_line":"    the backup action or the image object from the backup_server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3344fbb1_5c4999cc","line":4,"updated":"2025-05-19 12:30:06.000000000","message":"```suggestion\n    The Compute API always returns the image that was created as\n```","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd649a2b831daa81c436637ca534969f85ac0d09","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The compute api always returns the image that was created as"},{"line_number":5,"context_line":"    a result of the server backup instance action."},{"line_number":6,"context_line":"    Until now the sdk has not returned the image uuid from"},{"line_number":7,"context_line":"    the backup action or the image object from the backup_server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"b5f3f1cf_9e50b90e","line":4,"in_reply_to":"3344fbb1_5c4999cc","updated":"2026-02-25 20:48:39.000000000","message":"Done","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b62e6db681edb7d3a9fabb5ac49c05fd6c5686b","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    a result of the server backup instance action."},{"line_number":6,"context_line":"    Until now the sdk has not returned the image uuid from"},{"line_number":7,"context_line":"    the backup action or the image object from the backup_server"},{"line_number":8,"context_line":"    proxy. This has now been fixed to bring the backup api bindings"},{"line_number":9,"context_line":"    inline with the snapshot api bindings."},{"line_number":10,"context_line":"    For details see:"},{"line_number":11,"context_line":"    https://bugs.launchpad.net/python-openstackclient/+bug/2110035"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"2d324ccf_688b909a","line":8,"range":{"start_line":8,"start_character":55,"end_line":8,"end_character":58},"updated":"2025-05-19 12:30:06.000000000","message":"```suggestion\n    proxy. This has now been fixed to bring the backup API bindings\n```","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd649a2b831daa81c436637ca534969f85ac0d09","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    a result of the server backup instance action."},{"line_number":6,"context_line":"    Until now the sdk has not returned the image uuid from"},{"line_number":7,"context_line":"    the backup action or the image object from the backup_server"},{"line_number":8,"context_line":"    proxy. This has now been fixed to bring the backup api bindings"},{"line_number":9,"context_line":"    inline with the snapshot api bindings."},{"line_number":10,"context_line":"    For details see:"},{"line_number":11,"context_line":"    https://bugs.launchpad.net/python-openstackclient/+bug/2110035"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ebf777aa_15b8683d","line":8,"range":{"start_line":8,"start_character":55,"end_line":8,"end_character":58},"in_reply_to":"2d324ccf_688b909a","updated":"2026-02-25 20:48:39.000000000","message":"Done","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4b62e6db681edb7d3a9fabb5ac49c05fd6c5686b","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Until now the sdk has not returned the image uuid from"},{"line_number":7,"context_line":"    the backup action or the image object from the backup_server"},{"line_number":8,"context_line":"    proxy. This has now been fixed to bring the backup api bindings"},{"line_number":9,"context_line":"    inline with the snapshot api bindings."},{"line_number":10,"context_line":"    For details see:"},{"line_number":11,"context_line":"    https://bugs.launchpad.net/python-openstackclient/+bug/2110035"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"b7fa7a94_17f119a9","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":42},"updated":"2025-05-19 12:30:06.000000000","message":"```suggestion\n    inline with the snapshot api bindings.\n```","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd649a2b831daa81c436637ca534969f85ac0d09","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Until now the sdk has not returned the image uuid from"},{"line_number":7,"context_line":"    the backup action or the image object from the backup_server"},{"line_number":8,"context_line":"    proxy. This has now been fixed to bring the backup api bindings"},{"line_number":9,"context_line":"    inline with the snapshot api bindings."},{"line_number":10,"context_line":"    For details see:"},{"line_number":11,"context_line":"    https://bugs.launchpad.net/python-openstackclient/+bug/2110035"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5da5fe9e_47e6d7a3","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":42},"in_reply_to":"b7fa7a94_17f119a9","updated":"2026-02-25 20:48:39.000000000","message":"Done","commit_id":"b3d6b0b4b1d9ee9bd3182471e9b56910fca3a64c"}]}
