)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"4b555609b4f3d8b325969bcd84be33c2ea0518a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0c308872_74a8dea3","updated":"2025-09-11 09:48:55.000000000","message":"Please review. It\u0027s automation blocker for SRBAC.","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"10d064f00375c76b36552462cb8c12fb3f480e6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f002ff51_33d88ebe","updated":"2025-10-16 13:38:16.000000000","message":"This change is correct from the cinder side.  Let me explain, because it seems weird that this field would be denied to a user with only the \u0027reader\u0027 role.\n\nIt\u0027s basically a backward compatibility thing.  The \u0027os-volume-type-access:is_public\u0027 field was introduced by an API extension in v2; is_public was introduced in v3 as a way to simplify the volume-type response, and is_public is not governed by any particular policy.  However, the v3 response makes use of the extension code in generating the v3 response.  The old volume-type-access-extension had a policy that governed it, but this policy was not fine-grained and in addition to showing the field, also allowed mutable changes.  Thus, the policy governing the volume-type-access-extension is denied to someone with only the \u0027reader\u0027 role.  This was thought not to be a big deal because the reader still has access to the \u0027is_public\u0027 field, which conveys the same information.\n\n(Note: the volume-type-access policy was split into multiple policies to address this issue, but we haven\u0027t removed the original policy yet to preserve backward compatibility, though that time has probably come.  But that is a separate issue.)","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"74b8321b5b3e84289d8e35f8fabca47eda3412db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9fa590e6_25b4162d","updated":"2025-10-29 16:30:06.000000000","message":"lgtm","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"147139243e585cd1ed30d6e0dc6c3fc95fe7e2ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c25484a8_cf3c075b","updated":"2025-11-04 12:04:04.000000000","message":"openstack-tox-py39 fails due to https://bugs.launchpad.net/tempest/+bug/2130551, it requires https://review.opendev.org/c/openstack/tempest/+/965903","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"f61f88edcdd99915c8cbf966b1237a3f0c96a67c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3e1a3bf7_2fdb76da","updated":"2025-11-01 19:35:08.000000000","message":"recheck","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"68d7e269b766d729c4236d069ab8d8a1f5a03611","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ad083f96_15c62963","updated":"2025-10-30 19:39:33.000000000","message":"recheck","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"9cb986758cab31c5bfe2b8faeb1e358675eee53d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d180c716_7cb2bda9","updated":"2025-11-04 09:03:39.000000000","message":"recheck","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"84dce052ecd6340a40ffb78fd38e2a590260bbd8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fc4a4854_94c0de94","updated":"2025-10-29 20:18:41.000000000","message":"recheck","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"c2829ab2f031ce497b42da3438d56c08b51bf5ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"950ae588_b452bffb","in_reply_to":"c25484a8_cf3c075b","updated":"2025-11-04 13:20:43.000000000","message":"Thank you!\nrebased on https://review.opendev.org/c/openstack/tempest/+/965903","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"07621ee2bfb95e9c80c7d8e90644a991a226352c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3351a255_42cc0d93","in_reply_to":"f002ff51_33d88ebe","updated":"2025-10-16 13:43:21.000000000","message":"Thank you, Brian!\nI couldn\u0027t explain it better","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"4b2f4110299af65db6fb6bf9456625497185e72a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b9a74d28_e27d1cc4","updated":"2025-11-07 08:33:52.000000000","message":"I\u0027ve rebase it","commit_id":"51150f9ee5706515410410d03d159b862daafcdd"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5b1d8a979be3a288462cef6a2ff36ca9cb176567","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"240e3e84_1960fd9b","updated":"2025-11-06 19:33:32.000000000","message":"recheck depds are merged","commit_id":"51150f9ee5706515410410d03d159b862daafcdd"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"be7b51f9488ab5fbed6c36ad715383ddb0ccf340","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"548bd3a7_cc1d1be8","updated":"2025-11-07 11:00:50.000000000","message":"recheck\n\na single ssh timeout in a single test in nova-ceph-multistore","commit_id":"401f669b9ed3e1021aedb413b448e79a6966bc9e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8d5010b2dd848fa5e4162ce39bab09a850bc5a47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"96ab713d_f6833cfe","updated":"2025-11-07 17:26:30.000000000","message":"thanks","commit_id":"401f669b9ed3e1021aedb413b448e79a6966bc9e"}],"tempest/lib/api_schema/response/volume/volume_types.py":[{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"a4e3e637b236ee411ded6ed9da15270beb8ddd3b","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        \u0027qos_specs_id\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027format\u0027: \u0027uuid\u0027}"},{"line_number":32,"context_line":"    },"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027is_public\u0027, \u0027description\u0027, \u0027id\u0027]"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"show_volume_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"1518bebb_a525aaf7","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":58},"updated":"2025-09-15 05:32:41.000000000","message":"Instead of simply removing this attribute to avoid validation errors, I\u0027d suggest implementing dynamic schema validation that adapts to the actual API response.\nThe issue here is that os-volume-type-access:is_public is only present for Admin/Member roles but missing for Reader roles.","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"453448f566028a9e4ef177a77e29bb006e6a7757","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        \u0027qos_specs_id\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027format\u0027: \u0027uuid\u0027}"},{"line_number":32,"context_line":"    },"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027is_public\u0027, \u0027description\u0027, \u0027id\u0027]"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"show_volume_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa65e764_0a078cb4","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":58},"in_reply_to":"1518bebb_a525aaf7","updated":"2025-09-17 08:29:36.000000000","message":"Thank you, Liron!\nSo I checked other (maybe more robust) options for this issue and there are 3:\n1. Set the property as \"optional\" like I did - very simple fix, easier to understand and the property is redundent since there is also the \"is_public\" property.\n2. Change the test and add options like \"skip_validation\" and send it all the way to the method that validates.\n3. Make the validation conditional - add another condition that determinse which property to show and in which case.\n\nIMO, this fix is easier, understandable and less complex.Ttherefore I think it should stay as it is - but let\u0027s talk about it ;)","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"74b8321b5b3e84289d8e35f8fabca47eda3412db","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        \u0027qos_specs_id\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027format\u0027: \u0027uuid\u0027}"},{"line_number":32,"context_line":"    },"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027is_public\u0027, \u0027description\u0027, \u0027id\u0027]"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"show_volume_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9578c5a3_53289044","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":58},"in_reply_to":"84653698_af6a6d1c","updated":"2025-10-29 16:30:06.000000000","message":"Yeah, we do not need to be dynamic here instead this is correct fix to not expect the field as mandatory when field is controlled by the policy(or any config way). We do dynamic validation when things are changed in microversion.","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":35834,"name":"Yosi Ben Shimon","display_name":"Yosi Ben Shimon","email":"ybenshim@redhat.com","username":"ybenshim"},"change_message_id":"9a8be3c9b7adc2d4aee41553540a2d2884b96955","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        \u0027qos_specs_id\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027format\u0027: \u0027uuid\u0027}"},{"line_number":32,"context_line":"    },"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027is_public\u0027, \u0027description\u0027, \u0027id\u0027]"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"show_volume_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"975c3b80_b79a4b7d","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":58},"in_reply_to":"8c7f72d3_fce19bfe","updated":"2025-09-17 09:38:42.000000000","message":"This also can be enhenced by changing the role_specific_field to be a list to support future similare properties.\nWhat I\u0027m trying to say is that since \u0027os-volume-type-access:is_public\u0027 is not going to be removed, and it\u0027s redundant (we have \u0027is_public\u0027), we actually not need to validate it and use it. and therefore, it can be optional.\nIf this property will be removed from the response API, then we should remove it from \"required\" and \"optional\".","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"10d064f00375c76b36552462cb8c12fb3f480e6f","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        \u0027qos_specs_id\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027format\u0027: \u0027uuid\u0027}"},{"line_number":32,"context_line":"    },"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027is_public\u0027, \u0027description\u0027, \u0027id\u0027]"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"show_volume_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"84653698_af6a6d1c","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":58},"in_reply_to":"975c3b80_b79a4b7d","updated":"2025-10-16 13:38:16.000000000","message":"@Liron: I may be misunderstanding what you are proposing, but given the role of tempest in preventing API regressions, I don\u0027t think we want to do dynamic validation based on the response content?  (Though I admit that your proposal is quite clever!)","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"},{"author":{"_account_id":19262,"name":"Liron Kuchlani","email":"lkuchlan@redhat.com","username":"lkuchlan"},"change_message_id":"63800a4ecdf639a4fe5dd32ed985e9c086ca8fcb","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        \u0027qos_specs_id\u0027: {\u0027type\u0027: [\u0027string\u0027, \u0027null\u0027], \u0027format\u0027: \u0027uuid\u0027}"},{"line_number":32,"context_line":"    },"},{"line_number":33,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":34,"context_line":"    \u0027required\u0027: [\u0027name\u0027, \u0027is_public\u0027, \u0027description\u0027, \u0027id\u0027]"},{"line_number":35,"context_line":"}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"show_volume_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"8c7f72d3_fce19bfe","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":58},"in_reply_to":"aa65e764_0a078cb4","updated":"2025-09-17 08:52:42.000000000","message":"Please see below an example of how this case can be handled:\n\n  def show_volume_type(self, volume_type_id):\n      url \u003d \"types/%s\" % volume_type_id\n      resp, body \u003d self.get(url)\n\n      # Dynamically adjust schema based on response content\n      validation_schema \u003d copy.deepcopy(schema.common_show_volume_type)\n      volume_type_data \u003d body.get(\u0027volume_type\u0027, {})\n\n      # Remove role-specific field from validation if not present in response\n      role_specific_field \u003d \u0027os-volume-type-access:is_public\u0027\n      if role_specific_field not in volume_type_data:\n          validation_schema[\u0027properties\u0027].pop(role_specific_field, None)\n          if role_specific_field in validation_schema[\u0027required\u0027]:\n              validation_schema[\u0027required\u0027].remove(role_specific_field)\n\n      self.validate_response(validation_schema, resp, body)\n      return rest_client.ResponseBody(resp, body)","commit_id":"31632139b03bd184044b21c507b9381d3ae37584"}]}
