)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"56eba4f93f5d5745d1a22c25f7211dc21182a31d","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2/OVN] Add external_ids key for SNAT rules"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch updates the method for creating snats in OVN backend and updates previously created snat rules to include the Neutron\u0027s owner key. This snat update task runs only once during the maintenance task, and if all entries are already configured, no action is performed."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Related-bug: #2027742"},{"line_number":12,"context_line":"Change-Id: I3478b3319d92047972d33c33a76615f76d14daaf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"be3285e9_762d8cfe","line":9,"updated":"2024-02-06 15:30:14.000000000","message":"The above should have line breaks","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"5754da86712e8da503c0563f26a99c94b5ce2636","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2/OVN] Add external_ids key for SNAT rules"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch updates the method for creating snats in OVN backend and updates previously created snat rules to include the Neutron\u0027s owner key. This snat update task runs only once during the maintenance task, and if all entries are already configured, no action is performed."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Related-bug: #2027742"},{"line_number":12,"context_line":"Change-Id: I3478b3319d92047972d33c33a76615f76d14daaf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6b438793_1a724df4","line":9,"in_reply_to":"be3285e9_762d8cfe","updated":"2024-02-20 17:27:32.000000000","message":"Done","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"3a0767f5196639a4098a05cc740aeeca44d5a6f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c5d54ad9_df7ec93a","updated":"2024-02-06 17:57:23.000000000","message":"Thanks for taking a look at this Brian, please, se my inline comments.","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"56eba4f93f5d5745d1a22c25f7211dc21182a31d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0c7f8854_b3c58132","updated":"2024-02-06 15:30:14.000000000","message":"Thanks for working on this, let\u0027s just wait for the spec to be approved before merging, but that will hopefully happen today.","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"df07c9da0fd73869f3db502c43484f3489ca4754","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bf4df2c1_2a22fda7","updated":"2024-02-06 11:51:54.000000000","message":"recheck unrelated errors","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"5754da86712e8da503c0563f26a99c94b5ce2636","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"71c893e7_43ab6b8f","updated":"2024-02-20 17:27:32.000000000","message":"Thanks for the review Brian.","commit_id":"abbd6cf0c93bc4eedd51c136f90f280385ebfc5d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f564026debd1815cc475ad3be84f7fc039929a8d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e5a5c76a_548d1f55","updated":"2024-02-20 23:17:30.000000000","message":"Just one nit","commit_id":"3eb98d4b0903e62db1e76679cdc6446addbae823"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6cd3cbf45396c967fe981251a1e3ecb34dfb269b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d00776b5_767bc2cf","updated":"2024-03-25 00:29:38.000000000","message":"Needs a manual rebase","commit_id":"cdbe5307be9e0b2c406c87da5fa1be526952dcc5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"19955e583094f96428ee135167432b7a8785c600","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"51e465e5_e78b1cdf","updated":"2024-08-07 22:26:42.000000000","message":"Sorry, this needs another manual rebase.","commit_id":"f65a924686ae99f7c13fc3a5e651eb65f93bc31c"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f6df2228154bdda68132cd72af401d4546c51bee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"294958ea_c553df38","updated":"2024-08-28 18:57:41.000000000","message":"This or https://review.opendev.org/c/openstack/neutron/+/926495 will need a rebase depending on which merges first.","commit_id":"4a51256a7f932bacee65faa707f7340b2d910e82"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"5480360b36aac2eb85d1316e20a5326f28d2a8a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"320cb7d2_d5514a2f","updated":"2024-08-22 21:00:20.000000000","message":"recheck unrelated NovaServers.boot_and_delete_server error","commit_id":"4a51256a7f932bacee65faa707f7340b2d910e82"}],"neutron/common/ovn/constants.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"95f2e10cce9289787ee18d459d5469770bfb4e57","unresolved":true,"context_lines":[{"line_number":56,"context_line":"METADATA_LIVENESS_CHECK_EXT_ID_KEY \u003d \u0027neutron:metadata_liveness_check_at\u0027"},{"line_number":57,"context_line":"OVN_PORT_BINDING_PROFILE \u003d portbindings.PROFILE"},{"line_number":58,"context_line":"OVN_HOST_ID_EXT_ID_KEY \u003d \u0027neutron:host_id\u0027"},{"line_number":59,"context_line":"OVN_ROUTER_IS_SNAT \u003d \u0027neutron:is_snat\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MIGRATING_ATTR \u003d \u0027migrating_to\u0027"},{"line_number":62,"context_line":"OVN_ROUTER_PORT_OPTION_KEYS \u003d [\u0027router-port\u0027, \u0027nat-addresses\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ecfa46f9_617daddb","line":59,"updated":"2024-02-22 17:25:49.000000000","message":"Should this be like the others? OVN_ROUTER_IS_SNAT_EXT_ID_KEY ?","commit_id":"7752de0f68d3c647591215e366778e36a3e270fc"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"c16394556eeccc04e5bb03ff178a3b453cb9b1d0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"METADATA_LIVENESS_CHECK_EXT_ID_KEY \u003d \u0027neutron:metadata_liveness_check_at\u0027"},{"line_number":57,"context_line":"OVN_PORT_BINDING_PROFILE \u003d portbindings.PROFILE"},{"line_number":58,"context_line":"OVN_HOST_ID_EXT_ID_KEY \u003d \u0027neutron:host_id\u0027"},{"line_number":59,"context_line":"OVN_ROUTER_IS_SNAT \u003d \u0027neutron:is_snat\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MIGRATING_ATTR \u003d \u0027migrating_to\u0027"},{"line_number":62,"context_line":"OVN_ROUTER_PORT_OPTION_KEYS \u003d [\u0027router-port\u0027, \u0027nat-addresses\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"46da984b_0ea78d60","line":59,"in_reply_to":"ecfa46f9_617daddb","updated":"2024-03-04 21:48:37.000000000","message":"Sure, I\u0027ll change this, thanks!","commit_id":"7752de0f68d3c647591215e366778e36a3e270fc"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/commands.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"ce376894ca56f992f45eeabf7238c0cff71f575d","unresolved":true,"context_lines":[{"line_number":836,"context_line":""},{"line_number":837,"context_line":"class DeleteNATRuleInLRouterCommand(command.BaseCommand):"},{"line_number":838,"context_line":"    # TODO(chandrav): Add unit tests, bug #1638715."},{"line_number":839,"context_line":"    def __init__(self, api, lrouter, if_exists, **columns):"},{"line_number":840,"context_line":"        super(DeleteNATRuleInLRouterCommand, self).__init__(api)"},{"line_number":841,"context_line":"        self.lrouter \u003d lrouter"},{"line_number":842,"context_line":"        self.columns \u003d columns"}],"source_content_type":"text/x-python","patch_set":10,"id":"e28d675e_87cfd32f","line":839,"updated":"2025-04-10 14:59:48.000000000","message":"What was the reason for this change? it doesn\u0027t look like it makes any functional difference since there were no changes to what information was being used.","commit_id":"7bfe0d9b844dc1989eea6bd5e3a56572b2288969"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"ce376894ca56f992f45eeabf7238c0cff71f575d","unresolved":true,"context_lines":[{"line_number":695,"context_line":"    def add_nat_rule_in_lrouter(self, lrouter, **columns):"},{"line_number":696,"context_line":"        return cmd.AddNATRuleInLRouterCommand(self, lrouter, **columns)"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def delete_nat_rule_in_lrouter(self, lrouter, if_exists\u003dTrue, **columns):"},{"line_number":699,"context_line":"        return cmd.DeleteNATRuleInLRouterCommand(self, lrouter, if_exists,"},{"line_number":700,"context_line":"                                                 **columns)"},{"line_number":701,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5caecae4_de780ac5","line":698,"updated":"2025-04-10 14:59:48.000000000","message":"same comment as above. This doesn\u0027t seem to make any difference other than making the arguments *look* optional, but they aren\u0027t because columns[x] is referenced in the DeleteNATRuleInLrouterCommand for each of the arguments that were previously passed. This must makes it less obvious what needs to be passed.","commit_id":"7bfe0d9b844dc1989eea6bd5e3a56572b2288969"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"56eba4f93f5d5745d1a22c25f7211dc21182a31d","unresolved":true,"context_lines":[{"line_number":1189,"context_line":"                # Skip SNAT rule that are already configured with an"},{"line_number":1190,"context_line":"                # external_id key"},{"line_number":1191,"context_line":"                if ovn_const.OVN_ROUTER_IS_SNAT not in \\"},{"line_number":1192,"context_line":"                        nat[\u0027external_ids\u0027].keys():"},{"line_number":1193,"context_line":"                    snat_update.append({\u0027snat\u0027: nat,"},{"line_number":1194,"context_line":"                        \u0027router\u0027: router.name.replace(\u0027neutron-\u0027, \u0027\u0027)})"},{"line_number":1195,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a330ea19_fe5a31cd","line":1192,"updated":"2024-02-06 15:30:14.000000000","message":"nit:\n\n    if (ovn_const.OVN_ROUTER_IS_SNAT not in\n            nat[\u0027external_ids\u0027].keys()):\n            \n(no backslash)","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"5754da86712e8da503c0563f26a99c94b5ce2636","unresolved":false,"context_lines":[{"line_number":1189,"context_line":"                # Skip SNAT rule that are already configured with an"},{"line_number":1190,"context_line":"                # external_id key"},{"line_number":1191,"context_line":"                if ovn_const.OVN_ROUTER_IS_SNAT not in \\"},{"line_number":1192,"context_line":"                        nat[\u0027external_ids\u0027].keys():"},{"line_number":1193,"context_line":"                    snat_update.append({\u0027snat\u0027: nat,"},{"line_number":1194,"context_line":"                        \u0027router\u0027: router.name.replace(\u0027neutron-\u0027, \u0027\u0027)})"},{"line_number":1195,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ea008c30_f22d5328","line":1192,"in_reply_to":"a330ea19_fe5a31cd","updated":"2024-02-20 17:27:32.000000000","message":"Done","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"ce376894ca56f992f45eeabf7238c0cff71f575d","unresolved":true,"context_lines":[{"line_number":1351,"context_line":"        return router_snats"},{"line_number":1352,"context_line":""},{"line_number":1353,"context_line":"    # TODO(racosta): Remove this method in the E+2 cycle (SLURP release)"},{"line_number":1354,"context_line":"    @has_lock_periodic(spacing\u003d600, run_immediately\u003dTrue)"},{"line_number":1355,"context_line":"    def update_snat_rules_with_external_ids(self):"},{"line_number":1356,"context_line":"        \"\"\"Set the external_ids Neutron\u0027s ownership key for all snat rules."},{"line_number":1357,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"2869da96_db373235","line":1354,"updated":"2025-04-10 14:59:48.000000000","message":"I haven\u0027t analyzed it it fully yet, so it may not be an issue, but there are *a lot* of nested loops here, with some of the underlying ovn_client methods looping over the same things (like loops over fixed_ips, etc.) Have we tested this with a large number routers and nat rules? Just to make sure we don\u0027t run into a scaling issue. If we haven\u0027t tested it at scale, I can probably try to put together a test script.","commit_id":"7bfe0d9b844dc1989eea6bd5e3a56572b2288969"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"ce376894ca56f992f45eeabf7238c0cff71f575d","unresolved":true,"context_lines":[{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"        snats_cache \u003d {}"},{"line_number":1374,"context_line":"        cmds \u003d []"},{"line_number":1375,"context_line":"        columns \u003d {\u0027external_ids\u0027: {ovn_const.OVN_ROUTER_IS_SNAT_EXT_ID_KEY:"},{"line_number":1376,"context_line":"                                    \u0027true\u0027}}"},{"line_number":1377,"context_line":"        for snat in snat_update:"},{"line_number":1378,"context_line":"            lrouter \u003d utils.ovn_name(snat[\u0027router\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"59e095e0_e1c20d9d","line":1375,"updated":"2025-04-10 14:59:48.000000000","message":"Should we instead of doing neutron:is_nat just store the normal external_ids that we would store on things like dnat_or_snat entries, e.g. neutron:device_id, neutron:device_owner etc. when calling update_snat()?","commit_id":"7bfe0d9b844dc1989eea6bd5e3a56572b2288969"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"56eba4f93f5d5745d1a22c25f7211dc21182a31d","unresolved":true,"context_lines":[{"line_number":1944,"context_line":"                        for gw_info in self._get_gw_info(context, gw_port)"},{"line_number":1945,"context_line":"                        if gw_info.ip_version !\u003d const.IP_VERSION_6"},{"line_number":1946,"context_line":"                        for network in networks]"},{"line_number":1947,"context_line":""},{"line_number":1948,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":"    def create_provnet_port(self, network_id, segment, txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e292134_b5f7ee54","line":1947,"updated":"2024-02-06 15:30:14.000000000","message":"Is there any way to do this without duplicating all the code? for example, just setting columns dictionary?","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"c16394556eeccc04e5bb03ff178a3b453cb9b1d0","unresolved":false,"context_lines":[{"line_number":1944,"context_line":"                        for gw_info in self._get_gw_info(context, gw_port)"},{"line_number":1945,"context_line":"                        if gw_info.ip_version !\u003d const.IP_VERSION_6"},{"line_number":1946,"context_line":"                        for network in networks]"},{"line_number":1947,"context_line":""},{"line_number":1948,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":"    def create_provnet_port(self, network_id, segment, txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"4027d016_9f8d9223","line":1947,"in_reply_to":"2e5d6c2c_9bb9d4e5","updated":"2024-03-04 21:48:37.000000000","message":"Done","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"3a0767f5196639a4098a05cc740aeeca44d5a6f9","unresolved":true,"context_lines":[{"line_number":1944,"context_line":"                        for gw_info in self._get_gw_info(context, gw_port)"},{"line_number":1945,"context_line":"                        if gw_info.ip_version !\u003d const.IP_VERSION_6"},{"line_number":1946,"context_line":"                        for network in networks]"},{"line_number":1947,"context_line":""},{"line_number":1948,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":"    def create_provnet_port(self, network_id, segment, txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c34d54ca_2cf9a332","line":1947,"in_reply_to":"5e292134_b5f7ee54","updated":"2024-02-06 17:57:23.000000000","message":"Good question! I took a look at this when I was implementing it and didn\u0027t see an easy way to pass columns to the delete_nat_rule_in_lrouter method. \n\n\"def delete_nat_rule_in_lrouter(self, lrouter, type, logical_ip,\n                                   external_ip, if_exists\u003dTrue)\"\n\nThis delete function fixed specific columns as static arguments (such as type, logical_ip, and external_ip). Therefore, to change this it is necessary to include a new columns dict in the argument list, or, transform the \"type, logical_ip, and external_ip\" in a dict list, changing all the methods that call it in cascade.\n\nI don\u0027t know what would be better here, if anyone has a suggestion.\nThanks","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d0aa4e5c91554ed350107eb2cae262cb0d7010d9","unresolved":true,"context_lines":[{"line_number":1944,"context_line":"                        for gw_info in self._get_gw_info(context, gw_port)"},{"line_number":1945,"context_line":"                        if gw_info.ip_version !\u003d const.IP_VERSION_6"},{"line_number":1946,"context_line":"                        for network in networks]"},{"line_number":1947,"context_line":""},{"line_number":1948,"context_line":"        self._transaction(commands, txn\u003dtxn)"},{"line_number":1949,"context_line":""},{"line_number":1950,"context_line":"    def create_provnet_port(self, network_id, segment, txn\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e5d6c2c_9bb9d4e5","line":1947,"in_reply_to":"c34d54ca_2cf9a332","updated":"2024-02-22 17:15:25.000000000","message":"I really just meant this, similar done in update_port() above:\n\n        columns \u003d {}\n        if enable_snat:\n            columns \u003d {\u0027external_ids\u0027: {ovn_const.OVN_ROUTER_IS_SNAT:\n                                        \u0027true\u0027}}\n        commands \u003d [func(gw_lrouter_name, type\u003d\u0027snat\u0027, logical_ip\u003dnetwork,\n                         external_ip\u003dgw_info.router_ip, **columns)\n                    for gw_port in self._get_router_gw_ports(context,\n                                                             router[\u0027id\u0027])\n                    for gw_info in self._get_gw_info(context, gw_port)\n                    if gw_info.ip_version !\u003d const.IP_VERSION_6\n                    for network in networks]","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"}],"releasenotes/notes/add-external-ids-key-for-snat-91290bcf42e26255.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"56eba4f93f5d5745d1a22c25f7211dc21182a31d","unresolved":true,"context_lines":[{"line_number":3,"context_line":"    The OVN ML2 mechanism driver for NAT rules only include the Neutron key in"},{"line_number":4,"context_line":"    the external_ids register for `dnat_and_snats` floating ips. The snats"},{"line_number":5,"context_line":"    associated with logical routers do not have information about Neutron\u0027s"},{"line_number":6,"context_line":"    ownership in the OVN Northbound database."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The snats start writing the external_ids key `neutron:is_snat` in the"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"873c57dc_dbf1813b","line":6,"updated":"2024-02-06 15:30:14.000000000","message":"I don\u0027t think we need a prelude section, I would just put this all in features to keep it all together.","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"5754da86712e8da503c0563f26a99c94b5ce2636","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    The OVN ML2 mechanism driver for NAT rules only include the Neutron key in"},{"line_number":4,"context_line":"    the external_ids register for `dnat_and_snats` floating ips. The snats"},{"line_number":5,"context_line":"    associated with logical routers do not have information about Neutron\u0027s"},{"line_number":6,"context_line":"    ownership in the OVN Northbound database."},{"line_number":7,"context_line":"features:"},{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    The snats start writing the external_ids key `neutron:is_snat` in the"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"a96b3d77_f9a51dca","line":6,"in_reply_to":"873c57dc_dbf1813b","updated":"2024-02-20 17:27:32.000000000","message":"Done","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"56eba4f93f5d5745d1a22c25f7211dc21182a31d","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    updated only once during the maintenance task to include the"},{"line_number":13,"context_line":"    `neutron:is_snat` key in the external_ids register. In case all snat"},{"line_number":14,"context_line":"    entries are already configured using the Neutron\u0027s ownership key, no"},{"line_number":15,"context_line":"    maintenance action will be performed."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"8661cbbf_5b0504a9","line":15,"updated":"2024-02-06 15:30:14.000000000","message":"I think this can be shortened up to this:\n\nThe OVN ML2 mechanism driver for NAT rules now includes the Neutron key\n``neutron:is_snat`` in the external_ids register for default SNAT (\"snats\")\nentries in the OVN Northbound database, so they can be identified as being\nowned by Neutron. Previously created SNAT rules will be updated during the maintenance task to include the new key if it is not already present.","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"5754da86712e8da503c0563f26a99c94b5ce2636","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    updated only once during the maintenance task to include the"},{"line_number":13,"context_line":"    `neutron:is_snat` key in the external_ids register. In case all snat"},{"line_number":14,"context_line":"    entries are already configured using the Neutron\u0027s ownership key, no"},{"line_number":15,"context_line":"    maintenance action will be performed."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3265104b_534e9f73","line":15,"in_reply_to":"8661cbbf_5b0504a9","updated":"2024-02-20 17:27:32.000000000","message":"Thanks for your suggestion ;)","commit_id":"6ee638ab91378c8daedfb51c2633dd1d878e4d7b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f564026debd1815cc475ad3be84f7fc039929a8d","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The OVN ML2 mechanism driver for NAT rules now includes the Neutron key"},{"line_number":5,"context_line":"    `neutron:is_snat` in the external_ids register for default SNAT (\"snats\")"},{"line_number":6,"context_line":"    entries in the OVN Northbound database, so they can be identified as being"},{"line_number":7,"context_line":"    owned by Neutron. Previously created SNAT rules will be updated during the"},{"line_number":8,"context_line":"    maintenance task to include the new key if it is not already present."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"53f91b5d_1685b23c","line":5,"updated":"2024-02-20 23:17:30.000000000","message":"I think we want to make this bold, which requires two ``, one makes it italic.\n\n``neutron:is_snat``","commit_id":"3eb98d4b0903e62db1e76679cdc6446addbae823"},{"author":{"_account_id":35432,"name":"Roberto Acosta","display_name":"rbartzen","email":"rbartzen@gmail.com","username":"rbartzen"},"change_message_id":"87b9c402b3bc0a8a13fc101f05f5507f5dcb8c1f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The OVN ML2 mechanism driver for NAT rules now includes the Neutron key"},{"line_number":5,"context_line":"    `neutron:is_snat` in the external_ids register for default SNAT (\"snats\")"},{"line_number":6,"context_line":"    entries in the OVN Northbound database, so they can be identified as being"},{"line_number":7,"context_line":"    owned by Neutron. Previously created SNAT rules will be updated during the"},{"line_number":8,"context_line":"    maintenance task to include the new key if it is not already present."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"228def60_1cdd88fb","line":5,"in_reply_to":"53f91b5d_1685b23c","updated":"2024-02-21 00:57:29.000000000","message":"Done","commit_id":"3eb98d4b0903e62db1e76679cdc6446addbae823"}]}
