)]}'
{"/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":"6a31e1f89f3083f14c8bfc700b7f263ccf9b6293","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"46030920_f4008c77","updated":"2026-01-28 18:24:46.000000000","message":"-1 for comment around explicitness in config descriptor","commit_id":"6811ff4486958237e09712beda0947e073dca775"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"0dbe9fbea5067e238334c1623659ea5f2fa72e4b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"552d0fe0_3558984a","in_reply_to":"46030920_f4008c77","updated":"2026-02-06 20:07:20.000000000","message":"Done","commit_id":"6811ff4486958237e09712beda0947e073dca775"}],"ironic/common/trait_based_networking/plan.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":"6a31e1f89f3083f14c8bfc700b7f263ccf9b6293","unresolved":true,"context_lines":[{"line_number":166,"context_line":"                           traits: list[base.NetworkTrait]"},{"line_number":167,"context_line":"                           ) -\u003e list[base.NetworkTrait]:"},{"line_number":168,"context_line":"    instance_traits \u003d node.instance_info.get(\u0027traits\u0027) or []"},{"line_number":169,"context_line":"    return [trait for trait in traits if trait.name in set(instance_traits)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"c6c95abe_18692ec5","line":169,"updated":"2026-01-28 18:24:46.000000000","message":"This is non-actionable.\n\nThis is a weird case.\n\nIn the nova world, using instance_info(traits) means that an operator, using flavors, can adjust the traits to communicate to Ironic how to network a node. This is an explicit feature of TBN.\n\nHowever, for standalone Ironic, a user may not be populating node traits under instance_info. I\u0027m curious how this would look in the case of e.g. a metal3 deployment.","commit_id":"6811ff4486958237e09712beda0947e073dca775"},{"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":"8639d2ff4fdf008549997f7c061031a10b1c9b6b","unresolved":true,"context_lines":[{"line_number":166,"context_line":"                           traits: list[base.NetworkTrait]"},{"line_number":167,"context_line":"                           ) -\u003e list[base.NetworkTrait]:"},{"line_number":168,"context_line":"    instance_traits \u003d node.instance_info.get(\u0027traits\u0027) or []"},{"line_number":169,"context_line":"    return [trait for trait in traits if trait.name in set(instance_traits)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"e4c0d545_b7c98ef7","line":169,"in_reply_to":"c6c95abe_18692ec5","updated":"2026-01-28 18:25:19.000000000","message":"It occurs to me this only would happen if someone had neutron+ironic but not using nova to front it. A niche situation for sure.","commit_id":"6811ff4486958237e09712beda0947e073dca775"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"00a0799e3f7c375c1c8cb6fb1d739425d4c3fbfe","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                           traits: list[base.NetworkTrait]"},{"line_number":167,"context_line":"                           ) -\u003e list[base.NetworkTrait]:"},{"line_number":168,"context_line":"    instance_traits \u003d node.instance_info.get(\u0027traits\u0027) or []"},{"line_number":169,"context_line":"    return [trait for trait in traits if trait.name in set(instance_traits)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"883ccc5d_4215020d","line":169,"in_reply_to":"e4c0d545_b7c98ef7","updated":"2026-01-29 17:59:40.000000000","message":"Acknowledged","commit_id":"6811ff4486958237e09712beda0947e073dca775"}],"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":"6a31e1f89f3083f14c8bfc700b7f263ccf9b6293","unresolved":true,"context_lines":[{"line_number":735,"context_line":"            \u0027configuration file supplied to ironic, that trait will be used. \u0027"},{"line_number":736,"context_line":"            \u0027Otherwise, a pre-defined default trait will apply which \u0027"},{"line_number":737,"context_line":"            \u0027will generate an action to attach the first available port or \u0027"},{"line_number":738,"context_line":"            \u0027portgroup.\u0027"},{"line_number":739,"context_line":"        )),"},{"line_number":740,"context_line":"    cfg.BoolOpt(\u0027enable_health_monitoring\u0027,"},{"line_number":741,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"e594d4c5_3c5b8f66","line":738,"updated":"2026-01-28 18:24:46.000000000","message":"We need to be explicit that this trait\u0027s configuration will apply to a node even if that node doesn\u0027t have the trait (or vice-versa; either way the behavior should be explicit).\n\nRemember based on previous comment, we may have cases where len(node.traits) \u003e 0 but len(node.instance_info[traits]) \u003d\u003d 0","commit_id":"6811ff4486958237e09712beda0947e073dca775"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"00a0799e3f7c375c1c8cb6fb1d739425d4c3fbfe","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            \u0027configuration file supplied to ironic, that trait will be used. \u0027"},{"line_number":736,"context_line":"            \u0027Otherwise, a pre-defined default trait will apply which \u0027"},{"line_number":737,"context_line":"            \u0027will generate an action to attach the first available port or \u0027"},{"line_number":738,"context_line":"            \u0027portgroup.\u0027"},{"line_number":739,"context_line":"        )),"},{"line_number":740,"context_line":"    cfg.BoolOpt(\u0027enable_health_monitoring\u0027,"},{"line_number":741,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":4,"id":"10865a7e_1720c28a","line":738,"in_reply_to":"e594d4c5_3c5b8f66","updated":"2026-01-29 17:59:40.000000000","message":"Done","commit_id":"6811ff4486958237e09712beda0947e073dca775"},{"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":"560631e9949116c9f008dac552f4764b4ac96891","unresolved":true,"context_lines":[{"line_number":737,"context_line":"            \u0027will generate an action to attach the first available port or \u0027"},{"line_number":738,"context_line":"            \u0027portgroup. To be clear: If this option is True and TBN can \u0027"},{"line_number":739,"context_line":"            \u0027find no other traits to apply to the node, then \u0027"},{"line_number":740,"context_line":"            \u0027\"CUSTOM_DEFAULT_TBN_TRAIT\" will be applied.\u0027"},{"line_number":741,"context_line":"        )),"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    cfg.BoolOpt(\u0027enable_health_monitoring\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"6dd3abd5_f748ebf7","line":740,"updated":"2026-02-03 22:12:15.000000000","message":"\"If this option is set to True and there are no matching traits, CUSTOM_DEFAULT_TBN_TRAIT is applied. This behavior does not require CUSTOM_DEFAULT_TBN_TRAIT to be added to node traits.\"","commit_id":"efbe0750c8a2181cc92e0287f755676a909f7e6d"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"bf32a6f0a4f5d9f8dd6bd8151929f745f5bef8f0","unresolved":false,"context_lines":[{"line_number":737,"context_line":"            \u0027will generate an action to attach the first available port or \u0027"},{"line_number":738,"context_line":"            \u0027portgroup. To be clear: If this option is True and TBN can \u0027"},{"line_number":739,"context_line":"            \u0027find no other traits to apply to the node, then \u0027"},{"line_number":740,"context_line":"            \u0027\"CUSTOM_DEFAULT_TBN_TRAIT\" will be applied.\u0027"},{"line_number":741,"context_line":"        )),"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    cfg.BoolOpt(\u0027enable_health_monitoring\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ac305aba_9b6adbdc","line":740,"in_reply_to":"6dd3abd5_f748ebf7","updated":"2026-02-06 20:07:01.000000000","message":"Done","commit_id":"efbe0750c8a2181cc92e0287f755676a909f7e6d"}],"ironic/drivers/modules/network/common.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":"6a31e1f89f3083f14c8bfc700b7f263ccf9b6293","unresolved":true,"context_lines":[{"line_number":622,"context_line":"                raise exception.TBNNoTraitsApplicableToNode("},{"line_number":623,"context_line":"                        node\u003dtask.node.uuid)"},{"line_number":624,"context_line":"            else:"},{"line_number":625,"context_line":"                LOG.warning(_(\u0027_vif_attach_tbn: No applicable traits found \u0027"},{"line_number":626,"context_line":"                              \u0027for node %(node)s. Trait Based Networking \u0027"},{"line_number":627,"context_line":"                              \u0027unable to plan networking actions without \u0027"},{"line_number":628,"context_line":"                              \u0027any traits.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba464d8d_bed48b78","line":625,"updated":"2026-01-28 18:24:46.000000000","message":"same deal re: i18n and logs","commit_id":"6811ff4486958237e09712beda0947e073dca775"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"00a0799e3f7c375c1c8cb6fb1d739425d4c3fbfe","unresolved":false,"context_lines":[{"line_number":622,"context_line":"                raise exception.TBNNoTraitsApplicableToNode("},{"line_number":623,"context_line":"                        node\u003dtask.node.uuid)"},{"line_number":624,"context_line":"            else:"},{"line_number":625,"context_line":"                LOG.warning(_(\u0027_vif_attach_tbn: No applicable traits found \u0027"},{"line_number":626,"context_line":"                              \u0027for node %(node)s. Trait Based Networking \u0027"},{"line_number":627,"context_line":"                              \u0027unable to plan networking actions without \u0027"},{"line_number":628,"context_line":"                              \u0027any traits.\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"6f2588df_5a35b74d","line":625,"in_reply_to":"ba464d8d_bed48b78","updated":"2026-01-29 17:59:40.000000000","message":"Done","commit_id":"6811ff4486958237e09712beda0947e073dca775"}]}
