)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"40871e905d16a7f37f16496bfa5ab60692f0ecfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"933044cd_9cc55c22","updated":"2023-11-13 12:14:31.000000000","message":"https://github.com/openstack/nova/blob/96d7c42e2759cd90930a0c5b31ea1b2b412baa2d/nova/api/openstack/compute/assisted_volume_snapshots.py#L88-L89\n\ndelete_info is being passed form cinder\n\nso this looks like a potential cinder bug or tempest issue.\n\nim not sure its valid to call teh assisted_volume_snapshots for a ceph backend driver.","commit_id":"cdbecdee0676cd4d1143cb68c24a44c3ef6ab9ea"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a719cef0da1db8d195720725f52d8924021e3496","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"962aa344_4960b30f","updated":"2023-11-13 12:33:43.000000000","message":"you will need to add unit/functional tests to cover this change by the way","commit_id":"cdbecdee0676cd4d1143cb68c24a44c3ef6ab9ea"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"67f145d5729c64b04f873b3d0da61ea1528c4961","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ecbf77b7_d3c866f7","updated":"2023-11-17 07:06:38.000000000","message":"I have addressed your comments and updated the patch accordingly.\n\nThanks!","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"42729fea35d8cc8b847fdd4b9d008c0ede89714f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8637f5dc_677de2b3","updated":"2024-01-06 22:50:46.000000000","message":"recheck i want to see new results for this","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"d6497898a889d50935f2fa24f8bf5c8ec1e6febc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"69e1f43b_45dcc9ca","updated":"2024-05-10 10:55:36.000000000","message":"recheck tempest-integrated-compute-enforce-scope-new-defaults TIMED_OUT","commit_id":"44325c7ea21d9e5214b3eb76c020abd791fab0c6"}],"nova/api/openstack/compute/assisted_volume_snapshots.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5d1d32092d30473ece31fb401dba19b459dcf0af","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            delete_info \u003d jsonutils.loads(delete_metadata[\u0027delete_info\u0027])"},{"line_number":90,"context_line":"            volume_id \u003d delete_info[\u0027volume_id\u0027]"},{"line_number":91,"context_line":"            delete_type \u003d delete_info[\u0027type\u0027]"},{"line_number":92,"context_line":"            if delete_type not in [\u0027qcow2\u0027, \u0027vmdk\u0027, \u0027vhd\u0027]:"},{"line_number":93,"context_line":"                msg \u003d _(\u0027delete_info type is required.\u0027)"},{"line_number":94,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a1cba1d_053cd123","line":91,"updated":"2024-06-03 19:15:07.000000000","message":"I added a comment on the bug https://bugs.launchpad.net/nova/+bug/2033541 that I found the same as sean-k-mooney, that ``type`` is not required for ``delete_info`` and it\u0027s not an error for it to be missing. So I don\u0027t think it\u0027s correct to raise a 400 Bad Request if it\u0027s not provided.\n\nAs for the upstream CI tracebacks, it seems like assisted volume snapshots are not appropriate for Ceph but are running in the Ceph job anyway, so that\u0027s likely why we\u0027re seeing it in the logs but not seeing it cause job failures.\n\nThere is still a bug that ``type`` shouldn\u0027t be treated as required and should not be logging tracebacks, however, that raises the question of, if ``type`` is not required, then what are we supposed to do with it? It was not clear to me based on the code I saw in Cinder and Nova.","commit_id":"44325c7ea21d9e5214b3eb76c020abd791fab0c6"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"0d01042005f2683862155eb73385ea8667284f22","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            delete_info \u003d jsonutils.loads(delete_metadata[\u0027delete_info\u0027])"},{"line_number":90,"context_line":"            volume_id \u003d delete_info[\u0027volume_id\u0027]"},{"line_number":91,"context_line":"            delete_type \u003d delete_info[\u0027type\u0027]"},{"line_number":92,"context_line":"            if delete_type not in [\u0027qcow2\u0027, \u0027vmdk\u0027, \u0027vhd\u0027]:"},{"line_number":93,"context_line":"                msg \u003d _(\u0027delete_info type is required.\u0027)"},{"line_number":94,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d453e300_2f469c4a","line":91,"in_reply_to":"3a1cba1d_053cd123","updated":"2024-07-30 10:16:56.000000000","message":"Thanks for your suggestions.\n\nI have modified the change.\nWe are raising InvalidInput only if the type is present and not from valid values.\nIf its not present, we proceed further.","commit_id":"44325c7ea21d9e5214b3eb76c020abd791fab0c6"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"4c8bddc826bf61b44fa8a621ae1b3bc630f6537b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            delete_info \u003d jsonutils.loads(delete_metadata[\u0027delete_info\u0027])"},{"line_number":90,"context_line":"            volume_id \u003d delete_info[\u0027volume_id\u0027]"},{"line_number":91,"context_line":"            delete_type \u003d delete_info[\u0027type\u0027]"},{"line_number":92,"context_line":"            if delete_type not in [\u0027qcow2\u0027, \u0027vmdk\u0027, \u0027vhd\u0027]:"},{"line_number":93,"context_line":"                msg \u003d _(\u0027delete_info type is required.\u0027)"},{"line_number":94,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"a7ff54b4_ca3be7b4","line":91,"in_reply_to":"d453e300_2f469c4a","updated":"2025-06-12 07:00:30.000000000","message":"Done","commit_id":"44325c7ea21d9e5214b3eb76c020abd791fab0c6"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"03949f11f1f167fd6bc2192f73fef348cb151d53","unresolved":true,"context_lines":[{"line_number":3681,"context_line":"                delete_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027):"},{"line_number":3682,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info[\u0027type\u0027]"},{"line_number":3683,"context_line":"            raise exception.InternalError(msg)"},{"line_number":3684,"context_line":""},{"line_number":3685,"context_line":"        try:"},{"line_number":3686,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3687,"context_line":"        except exception.InstanceNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"26d36f04_2396a9b0","line":3684,"updated":"2023-11-13 12:04:58.000000000","message":"this is similar to https://review.opendev.org/c/openstack/nova/+/858129\nhowever unlike that where the message is just log here we raise if the value is not set.\n\nso you are changing the behvior here \n\nthe code below this can assume that we are using qcow prior to this change it cant after.","commit_id":"cdbecdee0676cd4d1143cb68c24a44c3ef6ab9ea"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"40871e905d16a7f37f16496bfa5ab60692f0ecfe","unresolved":true,"context_lines":[{"line_number":3681,"context_line":"                delete_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027):"},{"line_number":3682,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info[\u0027type\u0027]"},{"line_number":3683,"context_line":"            raise exception.InternalError(msg)"},{"line_number":3684,"context_line":""},{"line_number":3685,"context_line":"        try:"},{"line_number":3686,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3687,"context_line":"        except exception.InstanceNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"afd82b44_0b2821ce","line":3684,"in_reply_to":"26d36f04_2396a9b0","updated":"2023-11-13 12:14:31.000000000","message":"i dont think this is the correct fix\n\nhave you checked wehre delete_info is created in the case of the ceph backend","commit_id":"cdbecdee0676cd4d1143cb68c24a44c3ef6ab9ea"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"67f145d5729c64b04f873b3d0da61ea1528c4961","unresolved":false,"context_lines":[{"line_number":3681,"context_line":"                delete_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027):"},{"line_number":3682,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info[\u0027type\u0027]"},{"line_number":3683,"context_line":"            raise exception.InternalError(msg)"},{"line_number":3684,"context_line":""},{"line_number":3685,"context_line":"        try:"},{"line_number":3686,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3687,"context_line":"        except exception.InstanceNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9082c3c0_a6fb42b4","line":3684,"in_reply_to":"4ba61068_b31521d0","updated":"2023-11-17 07:06:38.000000000","message":"Done","commit_id":"cdbecdee0676cd4d1143cb68c24a44c3ef6ab9ea"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a719cef0da1db8d195720725f52d8924021e3496","unresolved":true,"context_lines":[{"line_number":3681,"context_line":"                delete_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027):"},{"line_number":3682,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info[\u0027type\u0027]"},{"line_number":3683,"context_line":"            raise exception.InternalError(msg)"},{"line_number":3684,"context_line":""},{"line_number":3685,"context_line":"        try:"},{"line_number":3686,"context_line":"            guest \u003d self._host.get_guest(instance)"},{"line_number":3687,"context_line":"        except exception.InstanceNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4ba61068_b31521d0","line":3684,"in_reply_to":"afd82b44_0b2821ce","updated":"2023-11-13 12:33:43.000000000","message":"if (delete_info and (\u0027type\u0027  not in delete_info or\n                delete_info[\u0027type\u0027] !\u003d \u0027qcow2\u0027)):\n\n the correct check would be \n \n althoguh delete_info i snot optional\n \n it default to none because of how RPC versioning works but its required.\n \n so really we woudl want to break this up a little\n ```\n if (not delete_info):\n     msg \u003d _(\u0027delete_info is required\u0027)\n     raise exception.InvalidInput(reason\u003dmsg)\ndelete_info_type \u003d delete_info.get(\u0027type\u0027, None)\n if (delete_info_type !\u003d \u0027qcow2\u0027):\n     msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type \n     raise exception.InvalidInput(reason\u003dmsg)\n```","commit_id":"cdbecdee0676cd4d1143cb68c24a44c3ef6ab9ea"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4479eca9a5b3407899f93167af1425f6f012f094","unresolved":true,"context_lines":[{"line_number":3677,"context_line":"        LOG.debug(\u0027volume_snapshot_delete: delete_info: %s\u0027, delete_info,"},{"line_number":3678,"context_line":"                  instance\u003dinstance)"},{"line_number":3679,"context_line":""},{"line_number":3680,"context_line":"        if (not delete_info):"},{"line_number":3681,"context_line":"            msg \u003d _(\u0027delete_info is required.\u0027)"},{"line_number":3682,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ced6af04_033c9c0d","line":3680,"updated":"2024-01-08 17:30:00.000000000","message":"You should not have parens around this condition.\n\nAlso, this can be `None` because it\u0027s an optional kwarg above, probably from an older version of the RPC API. It\u0027s not legit to turn it into a hard fail. If it\u0027s required, this method needs to lose the `\u003dNone` default above and we need to track down where this was called without that param, if it\u0027s happening.","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"0d01042005f2683862155eb73385ea8667284f22","unresolved":false,"context_lines":[{"line_number":3677,"context_line":"        LOG.debug(\u0027volume_snapshot_delete: delete_info: %s\u0027, delete_info,"},{"line_number":3678,"context_line":"                  instance\u003dinstance)"},{"line_number":3679,"context_line":""},{"line_number":3680,"context_line":"        if (not delete_info):"},{"line_number":3681,"context_line":"            msg \u003d _(\u0027delete_info is required.\u0027)"},{"line_number":3682,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bedd4a3a_f4006fc8","line":3680,"in_reply_to":"ced6af04_033c9c0d","updated":"2024-07-30 10:16:56.000000000","message":"Acknowledged","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4479eca9a5b3407899f93167af1425f6f012f094","unresolved":true,"context_lines":[{"line_number":3681,"context_line":"            msg \u003d _(\u0027delete_info is required.\u0027)"},{"line_number":3682,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"},{"line_number":3684,"context_line":"        if (delete_info_type !\u003d \u0027qcow2\u0027):"},{"line_number":3685,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type"},{"line_number":3686,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3687,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5d02183d_152fc6a0","line":3684,"updated":"2024-01-08 17:30:00.000000000","message":"Please don\u0027t add these parens.","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"0d01042005f2683862155eb73385ea8667284f22","unresolved":false,"context_lines":[{"line_number":3681,"context_line":"            msg \u003d _(\u0027delete_info is required.\u0027)"},{"line_number":3682,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"},{"line_number":3684,"context_line":"        if (delete_info_type !\u003d \u0027qcow2\u0027):"},{"line_number":3685,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type"},{"line_number":3686,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3687,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"59249375_d85eaba4","line":3684,"in_reply_to":"5d02183d_152fc6a0","updated":"2024-07-30 10:16:56.000000000","message":"Acknowledged","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4479eca9a5b3407899f93167af1425f6f012f094","unresolved":true,"context_lines":[{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"},{"line_number":3684,"context_line":"        if (delete_info_type !\u003d \u0027qcow2\u0027):"},{"line_number":3685,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type"},{"line_number":3686,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3687,"context_line":""},{"line_number":3688,"context_line":"        try:"},{"line_number":3689,"context_line":"            guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3c4b6e5d_6e83844e","line":3686,"updated":"2024-01-08 17:30:00.000000000","message":"This feels like a very deep place to be validating input to me, given that we\u0027re passing this over RPC to the manager and then to the driver. Its also a cast at the RPC layer which means this exception and message will never be seen by the user.\n\nWhen can this ever be anything other than `qcow2`? Is it always required for all libvirt-based guests?","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"0d01042005f2683862155eb73385ea8667284f22","unresolved":false,"context_lines":[{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"},{"line_number":3684,"context_line":"        if (delete_info_type !\u003d \u0027qcow2\u0027):"},{"line_number":3685,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type"},{"line_number":3686,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3687,"context_line":""},{"line_number":3688,"context_line":"        try:"},{"line_number":3689,"context_line":"            guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf90b4c9_64586ca2","line":3686,"in_reply_to":"1dd94001_3040496f","updated":"2024-07-30 10:16:56.000000000","message":"Done","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f454eadeff1042dfa67c1d7acf432a2cfd1bba00","unresolved":true,"context_lines":[{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"},{"line_number":3684,"context_line":"        if (delete_info_type !\u003d \u0027qcow2\u0027):"},{"line_number":3685,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type"},{"line_number":3686,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3687,"context_line":""},{"line_number":3688,"context_line":"        try:"},{"line_number":3689,"context_line":"            guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"cd25b48a_5b05cc3f","line":3686,"in_reply_to":"3c4b6e5d_6e83844e","updated":"2024-01-08 17:36:47.000000000","message":"so i asked the same questtion in the bug\n\nhttps://bugs.launchpad.net/nova/+bug/2033541/comments/3\n\ni intially tought we shoudl fix it here \nhttps://github.com/openstack/nova/blob/96d7c42e2759cd90930a0c5b31ea1b2b412baa2d/nova/api/openstack/compute/assisted_volume_snapshots.py#L88-L89\n\nthe type is not required in the delete info \n\nhttps://bugs.launchpad.net/nova/+bug/2033541/comments/4\n\nso i dont think i  have foudn a case where its somethign other then qcow, at least for libvirt\n\nbut the reasoning for why we can just do this check in the api is the format depends on teh virt driver.\n\ni.e. this would be vmdk for vmware and vhd for hyperv.\n\nwe could i guess just reject raw in the api or only accept qcow,vmdk and vhd if type is present?\n\n\ni dont really like do ing backend depented checks in teh api validation code but i agree this is very late to catch this\n\ni also agree with the prens comments above.","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8ad49c9f5ed4e70d28d1978f673b90eb78a532d2","unresolved":true,"context_lines":[{"line_number":3683,"context_line":"        delete_info_type \u003d delete_info.get(\u0027type\u0027, None)"},{"line_number":3684,"context_line":"        if (delete_info_type !\u003d \u0027qcow2\u0027):"},{"line_number":3685,"context_line":"            msg \u003d _(\u0027Unknown delete_info type %s\u0027) % delete_info_type"},{"line_number":3686,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":3687,"context_line":""},{"line_number":3688,"context_line":"        try:"},{"line_number":3689,"context_line":"            guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1dd94001_3040496f","line":3686,"in_reply_to":"cd25b48a_5b05cc3f","updated":"2024-01-08 17:46:40.000000000","message":"\u003e but the reasoning for why we can just do this check in the api is the format depends on teh virt driver.\n\nI\u0027m not necessarily suggesting we catch it in the API. However, it being called from a cast means (to me) that it\u0027s probably not important to raise InvalidInput, which will not be seen by the user and I suspect will generate a trace in the logs.\n\n\u003e i.e. this would be vmdk for vmware and vhd for hyperv.\n\u003e \n\u003e we could i guess just reject raw in the api or only accept qcow,vmdk and vhd if type is present?\n\nI don\u0027t know, and I don\u0027t even know when you would pass nothing for libvirt vs. qcow2. If the latter is the only reasonable value and it\u0027s just a hoop the user needs to jump through, perhaps the libvirt driver can/should assume qcow2 if it\u0027s not provided?\n\n\u003e i dont really like do ing backend depented checks in teh api validation code but i agree this is very late to catch this\n\nMe either, but \"InvalidInput\" suggests to me that maybe the API should have a list of valid values and check that it was at least one of those things.. We can save the \"it was valid but just not one of the supported ones for the virt driver in use\" for the case where it clears the validity check and just isn\u0027t appropriate for the virt driver (i.e. the backend-specific bit).\n\nMy real point is - if there\u0027s no value other than qcow2 allowed, and empty clearly isn\u0027t right, should we just be assuming qcow2 instead of requiring this hurdle to be cleared by the user? If not, then it would certainly be a better user experience to do this in the API so the user can *ever* know they were wrong.","commit_id":"e7b09ad78b188f31987fb1409050a22b4f9ad326"}]}
