)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b797174b8788163b773fc810a03471b529b51efe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9a9456d2_cbc4798d","updated":"2024-07-24 22:48:07.000000000","message":"I\u0027ll note, generally, that it\u0027d be ideal if this didn\u0027t merge until the nova change did, just in case there is bikeshedding over instance_info keys, but realistically this behavior is not nova dependent; any user of Ironic can set the valid metadata and have Ironic respect it.","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7f22070276ef023a6531d69a6a9db4373761e751","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"547ca093_303028e4","updated":"2024-08-16 20:59:21.000000000","message":"Thanks for feedback, will update this over the weekend.","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e25f34023eb8bf2488eb7cb8a1429f4f096ca88a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"72223dd6_0f7d2e28","updated":"2024-08-19 20:40:29.000000000","message":"Aug 18 23:44:25.764300 np0038211681 ironic-conductor[103265]: DEBUG ironic.conductor.deployments [None req-7b5daad5-c613-4fdf-ab6b-ddd30f9962db None None] Adding lessee $(project)s to node 0eefe9ac-869c-44f3-bb88-1b408d0e66a8. {{(pid\u003d103265) start_deploy /opt/stack/ironic/ironic/conductor/deployments.py:121}}","commit_id":"6b318f4c8154ff84aa82e3cb57e3b33e0adb9431"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"56c15d26b0fc57ea243bef0afd17875fccbaa17c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"30e90c73_f26946a8","updated":"2024-08-19 22:45:52.000000000","message":"CI failures unrelated, proof it\u0027s working:\n\nAug 19 21:08:46.501591 np0038219225 ironic-conductor[88719]: DEBUG ironic.conductor.deployments [None req-9d397d19-e7aa-4c45-b036-d10b78a9ed05 None None] Adding lessee 542bd186fe484901aa784dbe82118981 to node 5b7fa1b6-e872-4d1c-870b-28d51c66267d. {{(pid\u003d88719) start_deploy /opt/stack/ironic/ironic/conductor/deployments.py:121}}","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5ddef927c527b6f689ae8943608e6a294a0fd378","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a32d1449_d123c415","updated":"2024-08-30 00:04:10.000000000","message":"minor nits really but it would be nice to have an explcit debug level log message that records the lessee when a lesse is asigned?granted? on a node.\n\nit would have made proving this works form ci logs simpler","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"816fd3a4361b6540ffee59332d7f829f5be105dc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1ffc80b9_f2eb5d1a","updated":"2024-08-27 16:51:31.000000000","message":"recheck want a clean ci run and updated logs","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"dec16db6a2d9289bed4a9998721594ea87f8e634","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a6b4798a_e272ba82","updated":"2024-08-30 18:23:30.000000000","message":"revision incoming today","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ae354fe6804933656316afa68b292188306c4347","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b1438d89_bf7fafa7","updated":"2024-09-03 01:12:29.000000000","message":"Patchset incoming!","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"846046cac377706670fb53b400c620c60edb8efa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"aad8ec4d_48060496","updated":"2024-09-02 16:58:19.000000000","message":"need to fix node.save() at a minimum; will get a patchset posted","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e8fc63e8d3ac393eb144ec9fa028edaa31554aab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6638772f_ddd701f0","updated":"2024-09-03 03:53:59.000000000","message":"Sep 03 01:56:19.645274 np0038364294 ironic-conductor[125987]: DEBUG ironic.conductor.deployments [None req-8e86c178-cc84-4361-b831-06de14fd1b85 None None] Adding lessee 112daaaff50543bd841fe23ff45dbea3 to node f5a1dc12-07ec-4214-825c-2f0a2fcfd0e9. {{(pid\u003d125987) apply_automatic_lessee /opt/stack/ironic/ironic/conductor/deployments.py:116}}","commit_id":"0eda3d65ea8b05e250e61e9957c50a226a3baf74"}],"ironic/common/lessee_sources.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e0f46355976c7dd0c09942ae4d63d169c6de46e8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"28c66d0c_0e628b85","line":22,"updated":"2024-09-02 16:42:20.000000000","message":"nit: it\u0027s about the time we start using Python enums rather than just string constants","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"ce6e5002bd95085a314ac18a73578f8bae95551e","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"627f1f69_a7b13bad","line":22,"in_reply_to":"092b26e9_6c1d53c2","updated":"2024-09-03 17:51:33.000000000","message":"Sean, I don\u0027t understand what the __getattr__ is protecting against in the example. Cause it already throws an error if the item doesn\u0027t exist. Now the __setattr__ is a great point and something upstream should have (much like frozen on dataclasses).","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"846046cac377706670fb53b400c620c60edb8efa","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ee878df5_77bdca66","line":22,"in_reply_to":"28c66d0c_0e628b85","updated":"2024-09-02 16:58:19.000000000","message":"cardoe gave the same general feedback, my suggestion was if we were going to switch to actual ENUMs we do it in a single change that makes it all look similar, rather than piecemeal.","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"28317bc7bc7be9b8542691342ca1a8550a8fbfbe","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"74ab637f_b79d08c6","line":22,"in_reply_to":"627f1f69_a7b13bad","updated":"2024-09-04 00:07:46.000000000","message":"it makes this work\n\n\u003e\u003e\u003e HealthcheckStatus.PASS\n\u003cHealthcheckStatus.PASS: \u0027pass\u0027\u003e\n\u003e\u003e\u003e HealthcheckStatus.FAKE\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"/home/smooney/hacking/enums.py\", line 10, in __getattr__\n    raise AttributeError(\u0027%s %r has no attribute %r\u0027\nAttributeError: FrozenEnum \u0027HealthcheckStatus\u0027 has no attribute \u0027FAKE\u0027\n\u003e\u003e\u003e","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"66a448a3308632e80f9526e95413166e8a5ab303","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"e81db784_1b5c70f6","line":22,"in_reply_to":"74ab637f_b79d08c6","updated":"2024-09-04 00:09:46.000000000","message":"to be more precies witouth it you gett\n```\n\u003e\u003e\u003e HealthcheckStatus.PASS\n\u003cHealthcheckStatus.PASS: \u0027pass\u0027\u003e\n\u003e\u003e\u003e HealthcheckStatus.FAKE\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"/nix/store/7faz5qyn410gpnnfg4aawdr2mnybr8vf-python3-3.11.4/lib/python3.11/enum.py\", line 783, in __getattr__\n    raise AttributeError(name) from None\nAttributeError: FAKE\n```\n\nits still an atibute error but the error message is much worse","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ae354fe6804933656316afa68b292188306c4347","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"092b26e9_6c1d53c2","line":22,"in_reply_to":"e5f4f5a4_d64e4500","updated":"2024-09-03 01:12:29.000000000","message":"Sounds like an even better reason to do the whole set in one go as a refactor.","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0a895b8691443afcc8c18713f12a0cd22bcba3f6","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"NONE \u003d \u0027none\u0027"},{"line_number":22,"context_line":"\"Do not set lessee\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"REQUEST \u003d \u0027request\u0027"},{"line_number":25,"context_line":"\"Use metadata in request context\""}],"source_content_type":"text/x-python","patch_set":4,"id":"e5f4f5a4_d64e4500","line":22,"in_reply_to":"ee878df5_77bdca66","updated":"2024-09-02 17:44:20.000000000","message":"just be aware that python enums by defautl do not prevent you form using enum value outseide of the defied set.\n\nso if you want to do that you have to create \"frozen\" enums like this\n\nhttps://review.opendev.org/c/openstack/nova/+/825015/21/nova/healthcheck/constants.py\n\notherwise the dont actully proved any addtioal protection over arbitry constants.","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"}],"ironic/conductor/deployments.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5ddef927c527b6f689ae8943608e6a294a0fd378","unresolved":true,"context_lines":[{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"},{"line_number":115,"context_line":"                          \u0027node %(uuid)s.\u0027,"},{"line_number":116,"context_line":"                          {\u0027uuid\u0027: node.uuid})"},{"line_number":117,"context_line":"        # NOTE(JayF): the CONF.conductor.automatic_lessee_source \u003d\u003d \u0027none\u0027"},{"line_number":118,"context_line":"        # falls through since project will never be set."},{"line_number":119,"context_line":"        if project:"}],"source_content_type":"text/x-python","patch_set":3,"id":"89294443_df739758","line":116,"updated":"2024-08-30 00:04:10.000000000","message":"it woudl be better if you could also print a debug log message when\nthis works as currently there is no log message that prints even at debug level that i can see to show that this feature work.","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"238ed3735d8b671ab0a63f10a35dd9d494d8b515","unresolved":true,"context_lines":[{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"},{"line_number":115,"context_line":"                          \u0027node %(uuid)s.\u0027,"},{"line_number":116,"context_line":"                          {\u0027uuid\u0027: node.uuid})"},{"line_number":117,"context_line":"        # NOTE(JayF): the CONF.conductor.automatic_lessee_source \u003d\u003d \u0027none\u0027"},{"line_number":118,"context_line":"        # falls through since project will never be set."},{"line_number":119,"context_line":"        if project:"}],"source_content_type":"text/x-python","patch_set":3,"id":"8e09c7b5_715f61fe","line":116,"in_reply_to":"64fb710d_0abab344","updated":"2024-08-30 18:47:13.000000000","message":"I\u0027m confused by this feedback; line 121 is the log you\u0027re asking for AFAICT?","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"dec16db6a2d9289bed4a9998721594ea87f8e634","unresolved":true,"context_lines":[{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"},{"line_number":115,"context_line":"                          \u0027node %(uuid)s.\u0027,"},{"line_number":116,"context_line":"                          {\u0027uuid\u0027: node.uuid})"},{"line_number":117,"context_line":"        # NOTE(JayF): the CONF.conductor.automatic_lessee_source \u003d\u003d \u0027none\u0027"},{"line_number":118,"context_line":"        # falls through since project will never be set."},{"line_number":119,"context_line":"        if project:"}],"source_content_type":"text/x-python","patch_set":3,"id":"64fb710d_0abab344","line":116,"in_reply_to":"89294443_df739758","updated":"2024-08-30 18:23:30.000000000","message":"Sure, SGTM. Will add to next revision.","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"117a80c0e0c1b7fc89cd275470e510589b1d2f73","unresolved":true,"context_lines":[{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"},{"line_number":115,"context_line":"                          \u0027node %(uuid)s.\u0027,"},{"line_number":116,"context_line":"                          {\u0027uuid\u0027: node.uuid})"},{"line_number":117,"context_line":"        # NOTE(JayF): the CONF.conductor.automatic_lessee_source \u003d\u003d \u0027none\u0027"},{"line_number":118,"context_line":"        # falls through since project will never be set."},{"line_number":119,"context_line":"        if project:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7c161598_f5e1fa2f","line":116,"in_reply_to":"8e09c7b5_715f61fe","updated":"2024-08-31 01:02:41.000000000","message":"they answer is simple it was 1 am  and i missed it :) yep that is what i was looking for.","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e0f46355976c7dd0c09942ae4d63d169c6de46e8","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            instance_info.pop(\u0027kernel\u0027, None)"},{"line_number":94,"context_line":"            instance_info.pop(\u0027ramdisk\u0027, None)"},{"line_number":95,"context_line":"            node.instance_info \u003d instance_info"},{"line_number":96,"context_line":"    elif CONF.conductor.automatic_lessee:"},{"line_number":97,"context_line":"        # TODO(JayF): During 2025.1 cycle, remove automatic_lessee boolean"},{"line_number":98,"context_line":"        #  config."},{"line_number":99,"context_line":"        project \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"6acfe4c2_b6bce849","line":96,"updated":"2024-09-02 16:42:20.000000000","message":"nit: I\u0027d prefer a helper function for the whole automatic_lessee handling to avoid bloating this already large function","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ae354fe6804933656316afa68b292188306c4347","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            instance_info.pop(\u0027kernel\u0027, None)"},{"line_number":94,"context_line":"            instance_info.pop(\u0027ramdisk\u0027, None)"},{"line_number":95,"context_line":"            node.instance_info \u003d instance_info"},{"line_number":96,"context_line":"    elif CONF.conductor.automatic_lessee:"},{"line_number":97,"context_line":"        # TODO(JayF): During 2025.1 cycle, remove automatic_lessee boolean"},{"line_number":98,"context_line":"        #  config."},{"line_number":99,"context_line":"        project \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"54f99223_8490477b","line":96,"in_reply_to":"6acfe4c2_b6bce849","updated":"2024-09-03 01:12:29.000000000","message":"yeah, good call, I did it. It helped to be able to write a docstring","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e0f46355976c7dd0c09942ae4d63d169c6de46e8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            # NOTE(JayF): If we have a project_id explicitly set (typical nova"},{"line_number":109,"context_line":"            #  case), use it. Otherwise, try to derive it from the context of"},{"line_number":110,"context_line":"            #  the request (typical standalone+keystone) case."},{"line_number":111,"context_line":"            project \u003d node.instance_info.get(\u0027project_id\u0027, None)"},{"line_number":112,"context_line":"            if project is None:"},{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"6fdcf162_f863b38c","line":111,"updated":"2024-09-02 16:42:20.000000000","message":"nit: 2nd argument redundant","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e0f46355976c7dd0c09942ae4d63d169c6de46e8","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            #  the request (typical standalone+keystone) case."},{"line_number":111,"context_line":"            project \u003d node.instance_info.get(\u0027project_id\u0027, None)"},{"line_number":112,"context_line":"            if project is None:"},{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"},{"line_number":115,"context_line":"                          \u0027node %(uuid)s.\u0027,"},{"line_number":116,"context_line":"                          {\u0027uuid\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":4,"id":"b66f8161_a4ac13a6","line":113,"updated":"2024-09-02 16:42:20.000000000","message":"nit: are we fine with logging this by default for all standalone users?","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ae354fe6804933656316afa68b292188306c4347","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            #  the request (typical standalone+keystone) case."},{"line_number":111,"context_line":"            project \u003d node.instance_info.get(\u0027project_id\u0027, None)"},{"line_number":112,"context_line":"            if project is None:"},{"line_number":113,"context_line":"                LOG.debug(\u0027Could not automatically save lessee: node[\u0027"},{"line_number":114,"context_line":"                          \u0027\\\u0027instance_info\\\u0027][\\\u0027project_id\\\u0027] is unset for \u0027"},{"line_number":115,"context_line":"                          \u0027node %(uuid)s.\u0027,"},{"line_number":116,"context_line":"                          {\u0027uuid\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":4,"id":"c35b5945_f0b718c0","line":113,"in_reply_to":"b66f8161_a4ac13a6","updated":"2024-09-03 01:12:29.000000000","message":"It\u0027s at debug level, I think it should be kept.","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e0f46355976c7dd0c09942ae4d63d169c6de46e8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    # validates only the necessary variables for different"},{"line_number":140,"context_line":"    # image types."},{"line_number":141,"context_line":"    if utils.update_image_type(task.context, task.node):"},{"line_number":142,"context_line":"        node.save()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    try:"},{"line_number":145,"context_line":"        task.driver.power.validate(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"95c18e85_6e6ea001","line":142,"updated":"2024-09-02 16:42:20.000000000","message":"This save may not happen since it\u0027s conditional. Maybe add \"or project\" to the previous line?","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ae354fe6804933656316afa68b292188306c4347","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    # validates only the necessary variables for different"},{"line_number":140,"context_line":"    # image types."},{"line_number":141,"context_line":"    if utils.update_image_type(task.context, task.node):"},{"line_number":142,"context_line":"        node.save()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    try:"},{"line_number":145,"context_line":"        task.driver.power.validate(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"11535121_74717592","line":142,"in_reply_to":"95c18e85_6e6ea001","updated":"2024-09-03 01:12:29.000000000","message":"nice catch","commit_id":"4ebd53cf387d25d4a362b24fbab803a729fdf706"}],"ironic/conf/conductor.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ba5f65ebb0f4f7843b4b17c029776481e0e1415a","unresolved":true,"context_lines":[{"line_number":350,"context_line":"    # preference, as implemented here, is to leave it a boolean and prefer"},{"line_number":351,"context_line":"    # explicit metadata (instance_info) over implicit metadata (from keystone)"},{"line_number":352,"context_line":"    # if they conflict, but we may want to add a toggle for what kind of md"},{"line_number":353,"context_line":"    # to respect."},{"line_number":354,"context_line":"    cfg.BoolOpt(\u0027automatic_lessee\u0027,"},{"line_number":355,"context_line":"                default\u003dFalse,"},{"line_number":356,"context_line":"                mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dc389473_01d971ae","line":353,"updated":"2024-07-24 22:52:23.000000000","message":"drawing attention to this\n\nI think having the explicit metadata override implicit metadata when it exists is ideal; but I can understand with the potential security implications that users may want to lock it down to one way or another with certainty.\n\nIn which case, I\u0027d migrate this to a enum config, and have the values represent where the automatic_lessee metadata comes from (and have \"True\" emulate the existing behavior)","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"a395622fa10b0065082a0d290ea597fd2d630b45","unresolved":true,"context_lines":[{"line_number":350,"context_line":"    # preference, as implemented here, is to leave it a boolean and prefer"},{"line_number":351,"context_line":"    # explicit metadata (instance_info) over implicit metadata (from keystone)"},{"line_number":352,"context_line":"    # if they conflict, but we may want to add a toggle for what kind of md"},{"line_number":353,"context_line":"    # to respect."},{"line_number":354,"context_line":"    cfg.BoolOpt(\u0027automatic_lessee\u0027,"},{"line_number":355,"context_line":"                default\u003dFalse,"},{"line_number":356,"context_line":"                mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2a7f0e6a_46746ff7","line":353,"in_reply_to":"28b2b1e7_68fa695f","updated":"2024-08-29 15:07:12.000000000","message":"I\u0027m happy with the approach in the latest version.","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ebaf50f796cdaaff7bf9d9a7808c1876fe1c9182","unresolved":true,"context_lines":[{"line_number":350,"context_line":"    # preference, as implemented here, is to leave it a boolean and prefer"},{"line_number":351,"context_line":"    # explicit metadata (instance_info) over implicit metadata (from keystone)"},{"line_number":352,"context_line":"    # if they conflict, but we may want to add a toggle for what kind of md"},{"line_number":353,"context_line":"    # to respect."},{"line_number":354,"context_line":"    cfg.BoolOpt(\u0027automatic_lessee\u0027,"},{"line_number":355,"context_line":"                default\u003dFalse,"},{"line_number":356,"context_line":"                mutable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":1,"id":"28b2b1e7_68fa695f","line":353,"in_reply_to":"dc389473_01d971ae","updated":"2024-08-14 15:21:15.000000000","message":"I just chatted with JayF here, and I think two different levels of options make sense.\n\nBecause, in large part, your not going to have requests coming in with the token bearing the original user token under current use patterns with nova. Which means it is the exception, not the rule.\n\nThe rule would be nova explicitly setting a field in metadata and providing us that context. That can change and evolve, and we could then potentially build a third option, but hiding that in the code just makes it less discoverable and through configuration just makes it explicit.\n\nSo, tldr, add a new option to represent the way.","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"}],"releasenotes/notes/automatic-lessee-iinfo-37abe917b8cb5c36.yaml":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"87dec55c3735fc39b792fc62ca9df4129bc03c14","unresolved":true,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Ironic now supports automatically setting node.lessee at deployment time"},{"line_number":4,"context_line":"    using metadata provided at deploy time, typically by OpenStack Nova. When"},{"line_number":5,"context_line":"    ``[conductor]/automatic_lessee`` is true, Ironic will set the lessee field"},{"line_number":6,"context_line":"    on the node and remove it when undeployed. If available, this defaults to"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fc24ecec_56b74d5b","line":3,"updated":"2024-07-24 22:48:36.000000000","message":"Open question: Should I note in security notes that any user with access to set node.instance_info now implicitly has the ability to set node.lessee?","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"95668903c07e058febfaf05743d1759b65d2e74e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Ironic now supports automatically setting node.lessee at deployment time"},{"line_number":4,"context_line":"    using metadata provided at deploy time, typically by OpenStack Nova. When"},{"line_number":5,"context_line":"    ``[conductor]/automatic_lessee`` is true, Ironic will set the lessee field"},{"line_number":6,"context_line":"    on the node and remove it when undeployed. If available, this defaults to"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5b198852_3a24a8be","line":3,"in_reply_to":"74f0b99d_cf306e1b","updated":"2024-08-14 15:16:31.000000000","message":"Yes I would agree this should be documented.","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"8f1a2a851e9efe9a81c0d44be6640eafc41b9c06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Ironic now supports automatically setting node.lessee at deployment time"},{"line_number":4,"context_line":"    using metadata provided at deploy time, typically by OpenStack Nova. When"},{"line_number":5,"context_line":"    ``[conductor]/automatic_lessee`` is true, Ironic will set the lessee field"},{"line_number":6,"context_line":"    on the node and remove it when undeployed. If available, this defaults to"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"74f0b99d_cf306e1b","line":3,"in_reply_to":"fc24ecec_56b74d5b","updated":"2024-07-30 12:01:11.000000000","message":"Sounds like a good idea to note (somewhere).","commit_id":"e643a502289f2a0c7dc17c28f4800dfd44b57c9c"}],"releasenotes/notes/automatic-lessee-source-37abe917b8cb5c36.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5ddef927c527b6f689ae8943608e6a294a0fd378","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    Ironic will now automatically set the node.lessee field for all "},{"line_number":22,"context_line":"    deployments by default when provided in node instance_info at deployment "},{"line_number":23,"context_line":"    time. Deployers are encouraged to review their security settings and "},{"line_number":24,"context_line":"    Ironic Secure RBAC documentation to ensure no unexpected access is granted."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"29f134f4_fabdc28b","line":24,"updated":"2024-08-30 00:04:10.000000000","message":"also whitespace :)","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"117a80c0e0c1b7fc89cd275470e510589b1d2f73","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    Ironic will now automatically set the node.lessee field for all "},{"line_number":22,"context_line":"    deployments by default when provided in node instance_info at deployment "},{"line_number":23,"context_line":"    time. Deployers are encouraged to review their security settings and "},{"line_number":24,"context_line":"    Ironic Secure RBAC documentation to ensure no unexpected access is granted."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"85d499e1_71a4a2c5","line":24,"in_reply_to":"141d6fd6_6951ebe6","updated":"2024-08-31 01:02:41.000000000","message":"this is one of the things I love using pre-commit for for what it\u0027s worth.\n\neven if I decide to use an ide I still do all git commands from the terminal so I have whitespace issues all the time if I\u0027m working on a project without it because\ni have gotten so used to pre-commit fixing it for me.","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"dec16db6a2d9289bed4a9998721594ea87f8e634","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    Ironic will now automatically set the node.lessee field for all "},{"line_number":22,"context_line":"    deployments by default when provided in node instance_info at deployment "},{"line_number":23,"context_line":"    time. Deployers are encouraged to review their security settings and "},{"line_number":24,"context_line":"    Ironic Secure RBAC documentation to ensure no unexpected access is granted."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"141d6fd6_6951ebe6","line":24,"in_reply_to":"29f134f4_fabdc28b","updated":"2024-08-30 18:23:30.000000000","message":"aside: my IDE has been doing this recently with yaml files, it\u0027s highly obnoxious. Will fix 😊","commit_id":"d30b21e6c84817536fed5aadca30ee8eed8cb526"}]}
