)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"423954c46b0d26aacc57cc02d9c27ada65db3fc8","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add utility to replace crypt.mksalt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The crypt module was removed in Python 3.13. Import the existing logic"},{"line_number":10,"context_line":"from nova as the utility function to replace crypt.mksalt . This will"},{"line_number":11,"context_line":"be used by ironic and nova at least."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1b34b8f60a1c2ee215f0df81a543308ed6fefb4e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"d8143057_84454971","line":10,"range":{"start_line":10,"start_character":5,"end_line":10,"end_character":9},"updated":"2024-11-18 16:30:27.000000000","message":"Did you mean in Ironic ?\nhttps://opendev.org/openstack/ironic/src/commit/c80b8bfdb2eb18d49b049f093c8c79ffd5cac164/ironic/conductor/utils.py#L1391\n\nI didn\u0027t find trace of this logic in nova","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"ccf5f566da005e115d1d564e897d1d0a9588885a","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add utility to replace crypt.mksalt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The crypt module was removed in Python 3.13. Import the existing logic"},{"line_number":10,"context_line":"from nova as the utility function to replace crypt.mksalt . This will"},{"line_number":11,"context_line":"be used by ironic and nova at least."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1b34b8f60a1c2ee215f0df81a543308ed6fefb4e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"f205ed77_beea5081","line":10,"range":{"start_line":10,"start_character":5,"end_line":10,"end_character":9},"in_reply_to":"d8143057_84454971","updated":"2024-11-18 16:32:43.000000000","message":"See https://github.com/openstack/nova/blob/1acaf899a6964484e5b5be4337618ebbe6ca8dbb/nova/virt/disk/api.py#L600-L625 .","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"eebc20ff610c6b0f990e8a132ed27f3c323eb923","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add utility to replace crypt.mksalt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The crypt module was removed in Python 3.13. Import the existing logic"},{"line_number":10,"context_line":"from nova as the utility function to replace crypt.mksalt . This will"},{"line_number":11,"context_line":"be used by ironic and nova at least."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I1b34b8f60a1c2ee215f0df81a543308ed6fefb4e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5329549b_4cc81a53","line":10,"range":{"start_line":10,"start_character":5,"end_line":10,"end_character":9},"in_reply_to":"f205ed77_beea5081","updated":"2024-11-18 16:47:43.000000000","message":"Ah, indeed, thanks for the link.\nSo if I correctly understood, Nova and Ironic will drop their implementation to adopt this uniformed way of salting things, exact?\n\nIronic only support SHA* when Nova still support MD5 and DES. On Ironic that\u0027s not a problem because your proposal is well aligned with what they have.\n\nThe major difference between Ironic and Nova is that this kind utility doesn\u0027t have the same visiblity. On Ironic it seems to be part of the public API, where on Nova it is part of a private API. \n\nAccounting the private nature on this on Nova, I don\u0027t think that abruptly removing the MD5 and DES is a problem, I don\u0027t think we have to respect a deprecation period first, but I prefer to double check with you to be sure that this removal won\u0027t abruptly break some calls.\n\nPlease can you confirm that point?","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"f15f517cfbe87058d9fc88c599c10a36d72c9766","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"49e2bb1b_c9e1600e","updated":"2024-11-18 16:38:54.000000000","message":"Else the motivation be","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"6361f9042f94e47dd5a281ff272a11d360829825","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4c655309_33283896","updated":"2024-11-18 16:51:06.000000000","message":"Sorry I didn\u0027t finished to wrote my sentence, so, the motivation behind this patch are legit and I give a +1 to support it by waiting for a confirmation on my parallel question","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"}],"oslo_utils/secretutils.py":[{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"f15f517cfbe87058d9fc88c599c10a36d72c9766","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    if method not in methods:"},{"line_number":71,"context_line":"        raise ValueError(\u0027Unsupported method: %s\u0027 % method)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    salt_set \u003d _string.ascii_letters + _string.digits + \u0027./\u0027"},{"line_number":74,"context_line":"    return (methods[method] +"},{"line_number":75,"context_line":"            \u0027\u0027.join([random.choice(salt_set) for c in range(16)]))"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"8804d44a_230d4fb0","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":60},"updated":"2024-11-18 16:38:54.000000000","message":"What do you think about using passlib and is salt features?\nhttps://passlib.readthedocs.io/\n\nThe CPython doc advocate for using hashlib or/and passlib https://docs.python.org/3.11/library/crypt.html","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"93ead4f174669f887034736a93517f7c1944cdeb","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    if method not in methods:"},{"line_number":71,"context_line":"        raise ValueError(\u0027Unsupported method: %s\u0027 % method)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    salt_set \u003d _string.ascii_letters + _string.digits + \u0027./\u0027"},{"line_number":74,"context_line":"    return (methods[method] +"},{"line_number":75,"context_line":"            \u0027\u0027.join([random.choice(salt_set) for c in range(16)]))"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"cf8447c3_c33e1dc0","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":60},"in_reply_to":"8804d44a_230d4fb0","updated":"2024-11-18 16:51:01.000000000","message":"Unfortunately passlib has been updated for 4 years and is not compatible with latest deps. Keystone has been using it but now it has removed dependency on passlib because of the bad maintenance status.\n\nhashlib is not enough for our use case because we have to create a record in the format inserted into /etc/shadow.\n\nThat\u0027s why I\u0027m adding these utility methods instead of using external libs.","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"d7a3f665211f0acc726eefd676c7697480e600dd","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    if method not in methods:"},{"line_number":71,"context_line":"        raise ValueError(\u0027Unsupported method: %s\u0027 % method)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    salt_set \u003d _string.ascii_letters + _string.digits + \u0027./\u0027"},{"line_number":74,"context_line":"    return (methods[method] +"},{"line_number":75,"context_line":"            \u0027\u0027.join([random.choice(salt_set) for c in range(16)]))"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"4cc9dcbb_0031111f","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":60},"in_reply_to":"cf8447c3_c33e1dc0","updated":"2024-11-27 13:39:07.000000000","message":"\u003e Unfortunately passlib has been updated for 4 years\n\nOops I meant to say that passlib has **NOT** been updated for 4 years ...","commit_id":"0fbfd4de9c6bbb433f8cd752a56e43342e5a2fc4"}]}
