)]}'
{"/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":"56391b167d2acb5221f94f8d693ea0abef71f827","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f1035c84_061f9e97","updated":"2025-11-10 19:13:53.000000000","message":"I can upgrade this to a +2 later if needed. Just starting the journey through all the patches now :)","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b35f5342_9edaafc3","updated":"2025-11-11 19:03:49.000000000","message":"One further item which is a nit: It might make sense to add a release note now, and add *or* update the release note as we go down the patch series. Specifically to ensure there is sufficient context conveyed in the release notes. I quickly jumped through to the end of the chain and and didn\u0027t see a release note anywhere.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1a8d70cf_13164971","updated":"2025-11-14 20:31:35.000000000","message":"Comments addressed.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"10ed847f5724d902d670d91fc8e83447735d3736","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d3df7cf7_0ee5e257","updated":"2025-11-28 12:53:28.000000000","message":"/recheck","commit_id":"b8f3318ca67f3e51e8f6c7eed4edb9eaba54cb3f"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f9040176_634a0c11","updated":"2025-11-27 16:41:38.000000000","message":"comments addressed, PTAL","commit_id":"b8f3318ca67f3e51e8f6c7eed4edb9eaba54cb3f"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"fe9c1d05d1dabf503b788a1d4e603bc275683e38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"981d84cb_f92e64dd","updated":"2025-11-30 19:20:38.000000000","message":"recheck","commit_id":"b8f3318ca67f3e51e8f6c7eed4edb9eaba54cb3f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"83545b7acd104bc49269648b9f21cad8fc022664","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"905647fb_68facbdc","updated":"2025-12-01 10:01:08.000000000","message":"recheck NODE_FAILURE","commit_id":"b8f3318ca67f3e51e8f6c7eed4edb9eaba54cb3f"}],"ironic/command/networking.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"7dad4518_b2a57831","line":1,"range":{"start_line":1,"start_character":4,"end_line":1,"end_character":25},"updated":"2025-11-11 19:03:49.000000000","message":"fwiw, I think there is a standard/resolution to not carry encoding tags.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"4c6a8714_f900c3de","line":1,"range":{"start_line":1,"start_character":4,"end_line":1,"end_character":25},"in_reply_to":"7dad4518_b2a57831","updated":"2025-11-14 20:31:35.000000000","message":"Done","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def main():"},{"line_number":41,"context_line":"    # NOTE: Safeguard to prevent \u0027ironic.networking.manager\u0027"},{"line_number":42,"context_line":"    # from being imported prior to the configuration options being loaded."},{"line_number":43,"context_line":"    assert \u0027ironic.networking.manager\u0027 not in sys.modules"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f335d8b5_dea1e9ed","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":12},"updated":"2025-11-11 19:03:49.000000000","message":"Please swap this to the expected form in the community style, \"note(handle): text\"","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def main():"},{"line_number":41,"context_line":"    # NOTE: Safeguard to prevent \u0027ironic.networking.manager\u0027"},{"line_number":42,"context_line":"    # from being imported prior to the configuration options being loaded."},{"line_number":43,"context_line":"    assert \u0027ironic.networking.manager\u0027 not in sys.modules"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df6b61b2_5bf45bbd","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":12},"in_reply_to":"f335d8b5_dea1e9ed","updated":"2025-11-14 20:31:35.000000000","message":"Done","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"}],"ironic/conf/networking.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":"56391b167d2acb5221f94f8d693ea0abef71f827","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def register_opts(conf):"},{"line_number":134,"context_line":"    conf.register_opts(opts, group\u003d\u0027networking\u0027)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":1,"id":"deb8bd31_34688bfc","line":134,"updated":"2025-11-10 19:13:53.000000000","message":"ironic-networking?","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def register_opts(conf):"},{"line_number":134,"context_line":"    conf.register_opts(opts, group\u003d\u0027networking\u0027)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":1,"id":"74c7ccd2_80a5cb52","line":134,"in_reply_to":"29fc5a82_3e77ae35","updated":"2025-11-14 20:31:35.000000000","message":"Ya, this was intentionally set to \"networking\".  Unless there is a strong objection I\u0027d like to keep it this way for the reasons Julia listed in the next comment in opts.py.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def register_opts(conf):"},{"line_number":134,"context_line":"    conf.register_opts(opts, group\u003d\u0027networking\u0027)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":1,"id":"29fc5a82_3e77ae35","line":134,"in_reply_to":"deb8bd31_34688bfc","updated":"2025-11-11 19:03:49.000000000","message":"I think it might actually be networking based upon the code/pattern. We\u0027re establishing a pattern and grouping of [networking] with this, so think it tracks.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0a0e2eee8d859dae88e12c70307e16f631d421cd","unresolved":true,"context_lines":[{"line_number":20,"context_line":"    # and networking service can use different transports if necessary."},{"line_number":21,"context_line":"    cfg.StrOpt(\u0027rpc_transport\u0027,"},{"line_number":22,"context_line":"               default\u003dNone,"},{"line_number":23,"context_line":"               choices\u003d[\u0027json-rpc\u0027, \u0027oslo_messaging\u0027, \u0027none\u0027],"},{"line_number":24,"context_line":"               help\u003d_(\u0027The transport mechanism used for RPC communication. \u0027"},{"line_number":25,"context_line":"                      \u0027This can be set to \"json-rpc\" for JSON-RPC, \u0027"},{"line_number":26,"context_line":"                      \u0027\"oslo_messaging\" for Oslo Messaging, or \"none\" \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5bad0e9f_69968af3","line":23,"updated":"2025-11-21 16:36:46.000000000","message":"\"none\" cannot actually be used with networking, you have an explicit check for it in RPC API","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    # and networking service can use different transports if necessary."},{"line_number":21,"context_line":"    cfg.StrOpt(\u0027rpc_transport\u0027,"},{"line_number":22,"context_line":"               default\u003dNone,"},{"line_number":23,"context_line":"               choices\u003d[\u0027json-rpc\u0027, \u0027oslo_messaging\u0027, \u0027none\u0027],"},{"line_number":24,"context_line":"               help\u003d_(\u0027The transport mechanism used for RPC communication. \u0027"},{"line_number":25,"context_line":"                      \u0027This can be set to \"json-rpc\" for JSON-RPC, \u0027"},{"line_number":26,"context_line":"                      \u0027\"oslo_messaging\" for Oslo Messaging, or \"none\" \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"256efc8f_40be90d9","line":23,"in_reply_to":"5bad0e9f_69968af3","updated":"2025-11-27 16:41:38.000000000","message":"Done","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"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":"2aba1d09683a9715fd45a3dc6d4995170c202235","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027switch_config_file\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Path to the switch configuration file that defines \u0027"},{"line_number":31,"context_line":"                      \u0027switches to be acted upon.\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027driver_config_dir\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027/etc/ironic/networking\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path to the driver configuration directory. This \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"badceccc_ffa311e0","line":31,"updated":"2025-11-21 21:41:04.000000000","message":"Re-iterating my original comment here: \n- We need to document, in this help string, what filetype it is. I believe it\u0027s JSON.\n- If it is JSON, either this needs to be YAML, or Clif\u0027s (TBN) needs to be JSON. We should not have two separate formats for external additional configuration.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027switch_config_file\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Path to the switch configuration file that defines \u0027"},{"line_number":31,"context_line":"                      \u0027switches to be acted upon.\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027driver_config_dir\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027/etc/ironic/networking\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path to the driver configuration directory. This \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"ee0a45b9_733c5f07","line":31,"in_reply_to":"badceccc_ffa311e0","updated":"2025-11-27 16:41:38.000000000","message":"The switch configuration file is a ini file just like the main ironic conf file.  It is documented here:  https://review.opendev.org/c/openstack/ironic/+/966471\nI will add a statement here to that effect.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"7338346b7cc68cebc9d566bc81282414698e549f","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027switch_config_file\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Path to the switch configuration file that defines \u0027"},{"line_number":31,"context_line":"                      \u0027switches to be acted upon.\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027driver_config_dir\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027/etc/ironic/networking\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path to the driver configuration directory. This \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"967f1487_f601448f","line":31,"in_reply_to":"badceccc_ffa311e0","updated":"2025-11-22 00:07:02.000000000","message":"We also need some kind of validation for the file format.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"7338346b7cc68cebc9d566bc81282414698e549f","unresolved":true,"context_lines":[{"line_number":30,"context_line":"               help\u003d_(\u0027Path to the switch configuration file that defines \u0027"},{"line_number":31,"context_line":"                      \u0027switches to be acted upon.\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027driver_config_dir\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027/etc/ironic/networking\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path to the driver configuration directory. This \u0027"},{"line_number":35,"context_line":"                      \u0027is used to dynamically write driver config files that \u0027"},{"line_number":36,"context_line":"                      \u0027are derived from entries in the file specified by the \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"039d0d21_4eb31e07","line":33,"updated":"2025-11-22 00:07:02.000000000","message":"This is really a state directory of the process no? So /etc/ shouldn\u0027t be used?","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               help\u003d_(\u0027Path to the switch configuration file that defines \u0027"},{"line_number":31,"context_line":"                      \u0027switches to be acted upon.\u0027)),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027driver_config_dir\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027/etc/ironic/networking\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path to the driver configuration directory. This \u0027"},{"line_number":35,"context_line":"                      \u0027is used to dynamically write driver config files that \u0027"},{"line_number":36,"context_line":"                      \u0027are derived from entries in the file specified by the \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"17d9496e_a88d859a","line":33,"in_reply_to":"039d0d21_4eb31e07","updated":"2025-11-27 16:41:38.000000000","message":"Will move to /var/lib/ironic/networking","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"7338346b7cc68cebc9d566bc81282414698e549f","unresolved":true,"context_lines":[{"line_number":53,"context_line":"                       \u0027Only drivers listed here will be loaded and made \u0027"},{"line_number":54,"context_line":"                       \u0027available for use. An empty list means no switch \u0027"},{"line_number":55,"context_line":"                       \u0027drivers will be loaded.\u0027)),"},{"line_number":56,"context_line":"    cfg.ListOpt(\u0027allowed_vlans\u0027,"},{"line_number":57,"context_line":"                default\u003d[],"},{"line_number":58,"context_line":"                help\u003d_(\u0027A list of VLAN IDs that are allowed to be used for \u0027"},{"line_number":59,"context_line":"                       \u0027port configuration. If not specified, all VLAN IDs \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"50ed6403_31746a0e","line":56,"updated":"2025-11-22 00:07:02.000000000","message":"This is a poor syntax cause you might have different VLAN ranges for different switches. You should look at how the Neutron type_vlan does this. I would likely treat physical_network as a switch pair identifier and group VLANs under that.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                       \u0027Only drivers listed here will be loaded and made \u0027"},{"line_number":54,"context_line":"                       \u0027available for use. An empty list means no switch \u0027"},{"line_number":55,"context_line":"                       \u0027drivers will be loaded.\u0027)),"},{"line_number":56,"context_line":"    cfg.ListOpt(\u0027allowed_vlans\u0027,"},{"line_number":57,"context_line":"                default\u003d[],"},{"line_number":58,"context_line":"                help\u003d_(\u0027A list of VLAN IDs that are allowed to be used for \u0027"},{"line_number":59,"context_line":"                       \u0027port configuration. If not specified, all VLAN IDs \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"6888ae67_e1d92945","line":56,"in_reply_to":"50ed6403_31746a0e","updated":"2025-11-27 16:41:38.000000000","message":"I think it would be best to keep this as a global if they want to dictate some global values across all of their switches, but also support a per-switch value directly in the switch configuration file.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"7338346b7cc68cebc9d566bc81282414698e549f","unresolved":true,"context_lines":[{"line_number":64,"context_line":"                       \u0027ID values or range of values. For example, \u0027"},{"line_number":65,"context_line":"                       \u0027100,101,102-104,106 would allow VLANs 100, 101, \u0027"},{"line_number":66,"context_line":"                       \u0027102, 103, 104, and 106, but not 105.\u0027)),"},{"line_number":67,"context_line":"    cfg.ListOpt(\u0027denied_vlans\u0027,"},{"line_number":68,"context_line":"                default\u003d[],"},{"line_number":69,"context_line":"                help\u003d_(\u0027A list of VLAN IDs that are not allowed to be used \u0027"},{"line_number":70,"context_line":"                       \u0027for port configuration. If not specified, no VLAN IDs \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"69d995f3_d10e9a55","line":67,"updated":"2025-11-22 00:07:02.000000000","message":"The help for this option is the same as the allow but doesn\u0027t make sense. Why even have this option. If its in allowed then its good. If its not in allowed then its denied.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                       \u0027ID values or range of values. For example, \u0027"},{"line_number":65,"context_line":"                       \u0027100,101,102-104,106 would allow VLANs 100, 101, \u0027"},{"line_number":66,"context_line":"                       \u0027102, 103, 104, and 106, but not 105.\u0027)),"},{"line_number":67,"context_line":"    cfg.ListOpt(\u0027denied_vlans\u0027,"},{"line_number":68,"context_line":"                default\u003d[],"},{"line_number":69,"context_line":"                help\u003d_(\u0027A list of VLAN IDs that are not allowed to be used \u0027"},{"line_number":70,"context_line":"                       \u0027for port configuration. If not specified, no VLAN IDs \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"b07380ce_66c34a29","line":67,"in_reply_to":"69d995f3_d10e9a55","updated":"2025-11-27 16:41:38.000000000","message":"Removed","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0a0e2eee8d859dae88e12c70307e16f631d421cd","unresolved":true,"context_lines":[{"line_number":77,"context_line":"                       \u0027102, 103, 104, and 106, but not 105.\u0027)),"},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027allow_port_channels\u0027,"},{"line_number":79,"context_line":"                default\u003dFalse,"},{"line_number":80,"context_line":"                help\u003d_(\u0027Whether to allow management of port channels.\u0027)),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027cleaning_network\u0027,"},{"line_number":82,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":83,"context_line":"               help\u003d_(\u0027The network to use for cleaning nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"0f2765cc_558e16d2","line":80,"updated":"2025-11-21 16:36:46.000000000","message":"nit: some guidance on when to enable it and what the tradeoffs are would be helpful","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a4075a93dfa0b7eba144313a346c0f9079c77c1f","unresolved":true,"context_lines":[{"line_number":77,"context_line":"                       \u0027102, 103, 104, and 106, but not 105.\u0027)),"},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027allow_port_channels\u0027,"},{"line_number":79,"context_line":"                default\u003dFalse,"},{"line_number":80,"context_line":"                help\u003d_(\u0027Whether to allow management of port channels.\u0027)),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027cleaning_network\u0027,"},{"line_number":82,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":83,"context_line":"               help\u003d_(\u0027The network to use for cleaning nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"4c28d314_df53a788","line":80,"in_reply_to":"0f2765cc_558e16d2","updated":"2025-11-21 18:30:19.000000000","message":"It also, wouldn\u0027t be awful to explicitly indicate non-cisco terminology, bonded ports. Even in the ironic terminology itself, its port groups.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"7338346b7cc68cebc9d566bc81282414698e549f","unresolved":true,"context_lines":[{"line_number":77,"context_line":"                       \u0027102, 103, 104, and 106, but not 105.\u0027)),"},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027allow_port_channels\u0027,"},{"line_number":79,"context_line":"                default\u003dFalse,"},{"line_number":80,"context_line":"                help\u003d_(\u0027Whether to allow management of port channels.\u0027)),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027cleaning_network\u0027,"},{"line_number":82,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":83,"context_line":"               help\u003d_(\u0027The network to use for cleaning nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"e4e50d51_42282df6","line":80,"in_reply_to":"4c28d314_df53a788","updated":"2025-11-22 00:07:02.000000000","message":"The generic phrase would be MLAG (Multi-Link Aggregation Groups).","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                       \u0027102, 103, 104, and 106, but not 105.\u0027)),"},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027allow_port_channels\u0027,"},{"line_number":79,"context_line":"                default\u003dFalse,"},{"line_number":80,"context_line":"                help\u003d_(\u0027Whether to allow management of port channels.\u0027)),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027cleaning_network\u0027,"},{"line_number":82,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":83,"context_line":"               help\u003d_(\u0027The network to use for cleaning nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"cb0a35cb_00c14242","line":80,"in_reply_to":"e4e50d51_42282df6","updated":"2025-11-27 16:41:38.000000000","message":"option removed.  ...and \u0027portchannel\u0027 renamed to \u0027lag\u0027 throughout.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0a0e2eee8d859dae88e12c70307e16f631d421cd","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                      \u0027expressed as {access|trunk}/native_vlan\u003dVLAN_ID. Can \u0027"},{"line_number":85,"context_line":"                      \u0027be overridden on a per-node basis using the \u0027"},{"line_number":86,"context_line":"                      \u0027driver_info attribute and specifying this as \u0027"},{"line_number":87,"context_line":"                      \u0027`standalone_cleaning_network`\u0027)),"},{"line_number":88,"context_line":"    cfg.StrOpt(\u0027rescuing_network\u0027,"},{"line_number":89,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":90,"context_line":"               help\u003d_(\u0027The network to use for rescuing nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"83fe3a8f_36a8c93f","line":87,"updated":"2025-11-21 16:36:46.000000000","message":"Why diverge from the prior art of driver_info[cleaning_network], i.e. why the `standalone_` prefix? It\u0027s not that a node can be simultaneously used with standalone and neutron networking.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                      \u0027expressed as {access|trunk}/native_vlan\u003dVLAN_ID. Can \u0027"},{"line_number":85,"context_line":"                      \u0027be overridden on a per-node basis using the \u0027"},{"line_number":86,"context_line":"                      \u0027driver_info attribute and specifying this as \u0027"},{"line_number":87,"context_line":"                      \u0027`standalone_cleaning_network`\u0027)),"},{"line_number":88,"context_line":"    cfg.StrOpt(\u0027rescuing_network\u0027,"},{"line_number":89,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":90,"context_line":"               help\u003d_(\u0027The network to use for rescuing nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"0eaf402f_bc17b6b5","line":87,"in_reply_to":"09e1618f_14d2e3cf","updated":"2025-11-27 16:41:38.000000000","message":"Done","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a4075a93dfa0b7eba144313a346c0f9079c77c1f","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                      \u0027expressed as {access|trunk}/native_vlan\u003dVLAN_ID. Can \u0027"},{"line_number":85,"context_line":"                      \u0027be overridden on a per-node basis using the \u0027"},{"line_number":86,"context_line":"                      \u0027driver_info attribute and specifying this as \u0027"},{"line_number":87,"context_line":"                      \u0027`standalone_cleaning_network`\u0027)),"},{"line_number":88,"context_line":"    cfg.StrOpt(\u0027rescuing_network\u0027,"},{"line_number":89,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":90,"context_line":"               help\u003d_(\u0027The network to use for rescuing nodes.  This should be \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"09e1618f_14d2e3cf","line":87,"in_reply_to":"83fe3a8f_36a8c93f","updated":"2025-11-21 18:30:19.000000000","message":"This is a really good point.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0a0e2eee8d859dae88e12c70307e16f631d421cd","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def register_opts(conf):"},{"line_number":134,"context_line":"    conf.register_opts(opts, group\u003d\u0027networking\u0027)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":2,"id":"607e2ec2_dcc0281b","line":134,"updated":"2025-11-21 16:36:46.000000000","message":"This is why a `standalone_` prefix could be useful to clearly distinguish this configuration from anything neutron-related. My worry is Neutron users trying to set `[networking]idle_network` and wondering why nothing happens.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"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":"a776023ffa96dcf60e2dc152d6048ce52acd8993","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def register_opts(conf):"},{"line_number":134,"context_line":"    conf.register_opts(opts, group\u003d\u0027networking\u0027)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":2,"id":"c5b04a24_e03f908c","line":134,"in_reply_to":"607e2ec2_dcc0281b","updated":"2025-11-21 21:37:05.000000000","message":"I like the idea of ironic_networking for this, fwiw, but standalone_networking is OK too.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def register_opts(conf):"},{"line_number":134,"context_line":"    conf.register_opts(opts, group\u003d\u0027networking\u0027)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d259b39_3dacdefd","line":134,"in_reply_to":"c5b04a24_e03f908c","updated":"2025-11-27 16:41:38.000000000","message":"Ok, will go with \"ironic_networking\" since it aligns with process name.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"}],"ironic/conf/opts.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":"56391b167d2acb5221f94f8d693ea0abef71f827","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    (\u0027metrics\u0027, ironic.conf.metrics.opts),"},{"line_number":45,"context_line":"    (\u0027metrics_statsd\u0027, ironic.conf.metrics.statsd_opts),"},{"line_number":46,"context_line":"    (\u0027molds\u0027, ironic.conf.molds.opts),"},{"line_number":47,"context_line":"    (\u0027networking\u0027, ironic.conf.networking.list_opts()),"},{"line_number":48,"context_line":"    # Expose the networking-specific JSON-RPC group for sample configs"},{"line_number":49,"context_line":"    (\u0027networking_json_rpc\u0027, ironic.conf.json_rpc.list_opts()),"},{"line_number":50,"context_line":"    (\u0027neutron\u0027, ironic.conf.neutron.list_opts()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"308b6ad7_9e81c661","line":47,"updated":"2025-11-10 19:13:53.000000000","message":"ironic-networking?","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    (\u0027metrics\u0027, ironic.conf.metrics.opts),"},{"line_number":45,"context_line":"    (\u0027metrics_statsd\u0027, ironic.conf.metrics.statsd_opts),"},{"line_number":46,"context_line":"    (\u0027molds\u0027, ironic.conf.molds.opts),"},{"line_number":47,"context_line":"    (\u0027networking\u0027, ironic.conf.networking.list_opts()),"},{"line_number":48,"context_line":"    # Expose the networking-specific JSON-RPC group for sample configs"},{"line_number":49,"context_line":"    (\u0027networking_json_rpc\u0027, ironic.conf.json_rpc.list_opts()),"},{"line_number":50,"context_line":"    (\u0027neutron\u0027, ironic.conf.neutron.list_opts()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"bd5dc110_31df9ae7","line":47,"in_reply_to":"308b6ad7_9e81c661","updated":"2025-11-11 19:03:49.000000000","message":"[ironic-networking] would be awkward in ironic-networking.conf or ironic.conf.\n\nI\u0027m not sure if dashes are permitted in sections too. Underscores have been the pattern for ages too. I think networking sort of just works here, unless you hoping to disambiguate from Neutron.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    (\u0027metrics\u0027, ironic.conf.metrics.opts),"},{"line_number":45,"context_line":"    (\u0027metrics_statsd\u0027, ironic.conf.metrics.statsd_opts),"},{"line_number":46,"context_line":"    (\u0027molds\u0027, ironic.conf.molds.opts),"},{"line_number":47,"context_line":"    (\u0027networking\u0027, ironic.conf.networking.list_opts()),"},{"line_number":48,"context_line":"    # Expose the networking-specific JSON-RPC group for sample configs"},{"line_number":49,"context_line":"    (\u0027networking_json_rpc\u0027, ironic.conf.json_rpc.list_opts()),"},{"line_number":50,"context_line":"    (\u0027neutron\u0027, ironic.conf.neutron.list_opts()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"4920dc7a_c028696d","line":47,"in_reply_to":"bd5dc110_31df9ae7","updated":"2025-11-14 20:31:35.000000000","message":"Leaving as \"networking\", see other comment.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"}],"ironic/networking/api.py":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"7338346b7cc68cebc9d566bc81282414698e549f","unresolved":true,"context_lines":[{"line_number":56,"context_line":"    :param native_vlan: VLAN ID to be set on the port."},{"line_number":57,"context_line":"    :param allowed_vlans: List of allowed VLAN IDs to be added(optional)."},{"line_number":58,"context_line":"    :param default_vlan: VLAN ID to removed from the port(optional)."},{"line_number":59,"context_line":"    :param portchannel_name: Port channel name if port is part of a"},{"line_number":60,"context_line":"                              channel."},{"line_number":61,"context_line":"    :raises: InvalidParameterValue if validation fails."},{"line_number":62,"context_line":"    :raises: NetworkError if the network operation fails."}],"source_content_type":"text/x-python","patch_set":2,"id":"c38adc48_ae4b0a1e","line":59,"updated":"2025-11-22 00:07:02.000000000","message":"This is a vendor specific name.","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    :param native_vlan: VLAN ID to be set on the port."},{"line_number":57,"context_line":"    :param allowed_vlans: List of allowed VLAN IDs to be added(optional)."},{"line_number":58,"context_line":"    :param default_vlan: VLAN ID to removed from the port(optional)."},{"line_number":59,"context_line":"    :param portchannel_name: Port channel name if port is part of a"},{"line_number":60,"context_line":"                              channel."},{"line_number":61,"context_line":"    :raises: InvalidParameterValue if validation fails."},{"line_number":62,"context_line":"    :raises: NetworkError if the network operation fails."}],"source_content_type":"text/x-python","patch_set":2,"id":"fdde762a_eb64a8b5","line":59,"in_reply_to":"c38adc48_ae4b0a1e","updated":"2025-11-27 16:41:38.000000000","message":"renamed to \u0027lag\u0027 throughout","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"}],"ironic/networking/manager.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":34,"context_line":"class NetworkingManager(object):"},{"line_number":35,"context_line":"    \"\"\"Ironic Networking service manager.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # NOTE: This must be in sync with rpcapi.NetworkingAPI\u0027s."},{"line_number":38,"context_line":"    RPC_API_VERSION \u003d \"1.2\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b40cc1f0_e9117fd2","line":37,"range":{"start_line":37,"start_character":5,"end_line":37,"end_character":11},"updated":"2025-11-11 19:03:49.000000000","message":"Please convert this to the community note format.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class NetworkingManager(object):"},{"line_number":35,"context_line":"    \"\"\"Ironic Networking service manager.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # NOTE: This must be in sync with rpcapi.NetworkingAPI\u0027s."},{"line_number":38,"context_line":"    RPC_API_VERSION \u003d \"1.2\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e88cb1aa_6c822138","line":37,"range":{"start_line":37,"start_character":5,"end_line":37,"end_character":11},"in_reply_to":"b40cc1f0_e9117fd2","updated":"2025-11-14 20:31:35.000000000","message":"Done","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    \"\"\"Ironic Networking service manager.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # NOTE: This must be in sync with rpcapi.NetworkingAPI\u0027s."},{"line_number":38,"context_line":"    RPC_API_VERSION \u003d \"1.2\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"25cea106_b89e6e57","line":38,"updated":"2025-11-11 19:03:49.000000000","message":"Starting at 1.2?","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \"\"\"Ironic Networking service manager.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # NOTE: This must be in sync with rpcapi.NetworkingAPI\u0027s."},{"line_number":38,"context_line":"    RPC_API_VERSION \u003d \"1.2\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"38572c7a_3f452bd2","line":38,"in_reply_to":"25cea106_b89e6e57","updated":"2025-11-14 20:31:35.000000000","message":"shoot, not sure what happened here.  perhaps Claude bumped it when I added something to the API at some point and I didn\u0027t notice.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"}],"ironic/networking/rpcapi.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    |    1.0 - Initial version."},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # NOTE: This must be in sync with manager.NetworkingManager\u0027s."},{"line_number":42,"context_line":"    RPC_API_VERSION \u003d \"1.0\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"8fd0e8a9_8d1e1b92","line":41,"range":{"start_line":41,"start_character":6,"end_line":41,"end_character":10},"updated":"2025-11-11 19:03:49.000000000","message":"Please convert this to the community style of note.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    |    1.0 - Initial version."},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # NOTE: This must be in sync with manager.NetworkingManager\u0027s."},{"line_number":42,"context_line":"    RPC_API_VERSION \u003d \"1.0\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c73ba1fb_7b676d27","line":41,"range":{"start_line":41,"start_character":6,"end_line":41,"end_character":10},"in_reply_to":"8fd0e8a9_8d1e1b92","updated":"2025-11-14 20:31:35.000000000","message":"Done","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0a0e2eee8d859dae88e12c70307e16f631d421cd","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    def __init__(self, topic\u003dNone):"},{"line_number":45,"context_line":"        super(NetworkingAPI, self).__init__()"},{"line_number":46,"context_line":"        self.topic \u003d topic"},{"line_number":47,"context_line":"        if self.topic is None:"},{"line_number":48,"context_line":"            if networking_utils.rpc_transport() \u003d\u003d \"json-rpc\":"},{"line_number":49,"context_line":"                # Use host_ip and port from the JSON-RPC config for topic"},{"line_number":50,"context_line":"                host_ip \u003d CONF.networking_json_rpc.host_ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"b84afbad_0e32b4fd","line":47,"updated":"2025-11-21 16:36:46.000000000","message":"nit: it looks like some of this code could be extracted into a helper to share it with the old RPCAPI","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"54bcf53b46f89f9b1578288536e5d70525f27ff1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def __init__(self, topic\u003dNone):"},{"line_number":45,"context_line":"        super(NetworkingAPI, self).__init__()"},{"line_number":46,"context_line":"        self.topic \u003d topic"},{"line_number":47,"context_line":"        if self.topic is None:"},{"line_number":48,"context_line":"            if networking_utils.rpc_transport() \u003d\u003d \"json-rpc\":"},{"line_number":49,"context_line":"                # Use host_ip and port from the JSON-RPC config for topic"},{"line_number":50,"context_line":"                host_ip \u003d CONF.networking_json_rpc.host_ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"d84d31cb_ee19853e","line":47,"in_reply_to":"b84afbad_0e32b4fd","updated":"2025-11-27 16:41:38.000000000","message":"i\u0027d like to defer that...","commit_id":"66fed0cbff9e17f710f168896ba4578930bcff39"}],"ironic/tests/unit/networking/test_rpc_service.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"268718552d96f0c3f7aa894514e43f4bac3f6d2d","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestNetworkingRPCService(tests_base.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @mock.patch.object(json_rpc_server, \"WSGIService\", autospec\u003dTrue)"},{"line_number":30,"context_line":"    @mock.patch.object("},{"line_number":31,"context_line":"        rpc_service.objects_base, \"IronicObjectSerializer\", autospec\u003dTrue"}],"source_content_type":"text/x-python","patch_set":1,"id":"3b044400_d056d1fe","line":28,"updated":"2025-11-11 19:03:49.000000000","message":"I guess I see something missing in terms of the rpc service testing, and I\u0027m not sure the \"right\" way to approach this because this is a weird offshot.\n\nSpecifically in ironic, we have some established versions detailed in ironic/common/release_mappings.py for the purpose of upgrade navigation. Specifically tested in ironic/tests/unit/common/test_release_mappings.py but the bottom line of that is we explicitly test to validate that the object version matches the expectation of the code. i.e. What is version 1.2 right now in the rpc service declaration, is actually 1.2 as well, or at least that it is stated in the release mappings.\n\nI feel like this is something we need to test/assert/ensure (pick your favorite word for it), and it could be a follow-up, but it feels like it is something we need to ensure is at least somehow tested so we don\u0027t accidently break things upon updating the version. I do like the idea of just adding a test to ironic/tests/unit/common/test_release_mappings.py, or we could potentially do it here. Options are sort of open.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"},{"author":{"_account_id":25437,"name":"Allain Legacy","email":"alegacy@redhat.com","username":"alegacy"},"change_message_id":"2c0b4b1bb33eedecee22e3c9e2d41377cd9fb268","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestNetworkingRPCService(tests_base.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @mock.patch.object(json_rpc_server, \"WSGIService\", autospec\u003dTrue)"},{"line_number":30,"context_line":"    @mock.patch.object("},{"line_number":31,"context_line":"        rpc_service.objects_base, \"IronicObjectSerializer\", autospec\u003dTrue"}],"source_content_type":"text/x-python","patch_set":1,"id":"6967e391_67be5744","line":28,"in_reply_to":"3b044400_d056d1fe","updated":"2025-11-14 20:31:35.000000000","message":"Ok, I think I\u0027ve fixed this up.","commit_id":"88111acb40aea2b69f2df8f3fb419ed1ce3fdedf"}]}
