)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"795469eeaf049da6ec90c67157b8f4b61c5e8af2","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Thomas Goirand \u003czigo@debian.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-03-09 10:38:04 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Feature: allow blacklisting of network_ids"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In our public cloud deployment, we offer a shared network with public"},{"line_number":10,"context_line":"IPs. Unfortunately, users using this network as VIP for Octavia, may"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dc154ad1_df5fd998","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":27},"updated":"2026-03-24 08:25:44.000000000","message":"denylist","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"642296973e129aba056d8eed38b14d30e4047eaf","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Thomas Goirand \u003czigo@debian.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-03-09 10:38:04 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Feature: allow blacklisting of network_ids"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In our public cloud deployment, we offer a shared network with public"},{"line_number":10,"context_line":"IPs. Unfortunately, users using this network as VIP for Octavia, may"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"05c4d020_ad04b01d","line":7,"range":{"start_line":7,"start_character":15,"end_line":7,"end_character":27},"in_reply_to":"dc154ad1_df5fd998","updated":"2026-03-24 12:32:31.000000000","message":"Done","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"795469eeaf049da6ec90c67157b8f4b61c5e8af2","unresolved":true,"context_lines":[{"line_number":9,"context_line":"In our public cloud deployment, we offer a shared network with public"},{"line_number":10,"context_line":"IPs. Unfortunately, users using this network as VIP for Octavia, may"},{"line_number":11,"context_line":"face the issue that sometime, there\u0027s no port available for failover."},{"line_number":12,"context_line":"We would like therefore, to allow blacklisting of this network, so"},{"line_number":13,"context_line":"that there\u0027s no risk a user attemps to reserve a VIP in this network."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Signed-off-by: Thomas Goirand \u003czigo@debian.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"0d613b59_4fb09e67","line":12,"range":{"start_line":12,"start_character":34,"end_line":12,"end_character":46},"updated":"2026-03-24 08:25:44.000000000","message":"denylist","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"642296973e129aba056d8eed38b14d30e4047eaf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"In our public cloud deployment, we offer a shared network with public"},{"line_number":10,"context_line":"IPs. Unfortunately, users using this network as VIP for Octavia, may"},{"line_number":11,"context_line":"face the issue that sometime, there\u0027s no port available for failover."},{"line_number":12,"context_line":"We would like therefore, to allow blacklisting of this network, so"},{"line_number":13,"context_line":"that there\u0027s no risk a user attemps to reserve a VIP in this network."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Signed-off-by: Thomas Goirand \u003czigo@debian.org\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fcb8db8b_83173786","line":12,"range":{"start_line":12,"start_character":34,"end_line":12,"end_character":46},"in_reply_to":"0d613b59_4fb09e67","updated":"2026-03-24 12:32:31.000000000","message":"Done","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"7ff600af297005ba7ffe66594d6380ecb954bd19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"79eac74b_6b7fcc82","updated":"2026-03-09 09:02:04.000000000","message":"just a quick comment on the use of \"blacklist\"\n\ncan you also add a releasenote?","commit_id":"e7c542a8c41365c48051be1f65b68fbc0f40a836"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"795469eeaf049da6ec90c67157b8f4b61c5e8af2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"dbd92898_2923325e","updated":"2026-03-24 08:25:44.000000000","message":"can you include a releasenote that mentions this new config setting?","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"23e04b94c2e5b2683a0e9c3b2469418334e31c6a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5cebf7a0_f2a185e8","updated":"2026-05-19 09:47:47.000000000","message":"LGTM - Tested with assistance from Claude code","commit_id":"a8a7942756b01710f42534a798a12653206fa81f"}],"octavia/common/config.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"7ff600af297005ba7ffe66594d6380ecb954bd19","unresolved":true,"context_lines":[{"line_number":257,"context_line":"                help\u003d_(\u0027List of network_ids that are valid for VIP \u0027"},{"line_number":258,"context_line":"                       \u0027creation. If this field is empty, no validation \u0027"},{"line_number":259,"context_line":"                       \u0027is performed.\u0027)),"},{"line_number":260,"context_line":"    cfg.ListOpt(\u0027blacklist_vip_networks\u0027,"},{"line_number":261,"context_line":"                default\u003d[],"},{"line_number":262,"context_line":"                help\u003d_(\u0027List of network_ids that are explicitely blacklisted \u0027"},{"line_number":263,"context_line":"                       \u0027for VIP creation. If this field is empty, no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"52f5d8a4_07ad7c5d","line":260,"range":{"start_line":260,"start_character":17,"end_line":260,"end_character":26},"updated":"2026-03-09 09:02:04.000000000","message":"just a quick note here, the correct term should be \"denylist\" (or disallowedlist)","commit_id":"e7c542a8c41365c48051be1f65b68fbc0f40a836"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"b391d4684613b0a02afa8192348ed84a7bde9705","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                help\u003d_(\u0027List of network_ids that are valid for VIP \u0027"},{"line_number":258,"context_line":"                       \u0027creation. If this field is empty, no validation \u0027"},{"line_number":259,"context_line":"                       \u0027is performed.\u0027)),"},{"line_number":260,"context_line":"    cfg.ListOpt(\u0027blacklist_vip_networks\u0027,"},{"line_number":261,"context_line":"                default\u003d[],"},{"line_number":262,"context_line":"                help\u003d_(\u0027List of network_ids that are explicitely blacklisted \u0027"},{"line_number":263,"context_line":"                       \u0027for VIP creation. If this field is empty, no \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"21b579ef_b7d5056c","line":260,"range":{"start_line":260,"start_character":17,"end_line":260,"end_character":26},"in_reply_to":"52f5d8a4_07ad7c5d","updated":"2026-03-09 09:31:45.000000000","message":"Done","commit_id":"e7c542a8c41365c48051be1f65b68fbc0f40a836"}],"octavia/common/validate.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"795469eeaf049da6ec90c67157b8f4b61c5e8af2","unresolved":true,"context_lines":[{"line_number":412,"context_line":"def network_denylist_by_config(network_id):"},{"line_number":413,"context_line":"    denylist \u003d CONF.networking.denylist_vip_networks"},{"line_number":414,"context_line":"    if isinstance(denylist, list) and len(denylist) \u003e 0:"},{"line_number":415,"context_line":"        if network_id in CONF.networking.denylist_vip_networks:"},{"line_number":416,"context_line":"            raise exceptions.ValidationException(detail\u003d_("},{"line_number":417,"context_line":"                \u0027Supplied VIP network_id is not allowed by the configuration \u0027"},{"line_number":418,"context_line":"                \u0027of this deployment.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"b0f71d3c_69847f05","line":415,"range":{"start_line":415,"start_character":11,"end_line":415,"end_character":62},"updated":"2026-03-24 08:25:44.000000000","message":"for an unknown reason (to me), network_allowed_by_config puts all the strings in lowercase (line 405-406), I wonder if we should do the same there, or we should just ignore the behavior of the network_allowed_by_config, any opinions on that?","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"642296973e129aba056d8eed38b14d30e4047eaf","unresolved":false,"context_lines":[{"line_number":412,"context_line":"def network_denylist_by_config(network_id):"},{"line_number":413,"context_line":"    denylist \u003d CONF.networking.denylist_vip_networks"},{"line_number":414,"context_line":"    if isinstance(denylist, list) and len(denylist) \u003e 0:"},{"line_number":415,"context_line":"        if network_id in CONF.networking.denylist_vip_networks:"},{"line_number":416,"context_line":"            raise exceptions.ValidationException(detail\u003d_("},{"line_number":417,"context_line":"                \u0027Supplied VIP network_id is not allowed by the configuration \u0027"},{"line_number":418,"context_line":"                \u0027of this deployment.\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9e3a40ca_a571c651","line":415,"range":{"start_line":415,"start_character":11,"end_line":415,"end_character":62},"in_reply_to":"b0f71d3c_69847f05","updated":"2026-03-24 12:32:31.000000000","message":"Ok, did the same.","commit_id":"cc81363afdc2d0e4f1d8e6793469d09a6eb91f49"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"53db25332cf0c31a768618964355e6bd4be1437f","unresolved":true,"context_lines":[{"line_number":413,"context_line":"    denylist \u003d CONF.networking.denylist_vip_networks"},{"line_number":414,"context_line":"    if isinstance(denylist, list) and len(denylist) \u003e 0:"},{"line_number":415,"context_line":"        denylist \u003d map(str.lower, denylist)"},{"line_number":416,"context_line":"        if network_id.lower() in CONF.networking.denylist_vip_networks:"},{"line_number":417,"context_line":"            raise exceptions.ValidationException(detail\u003d_("},{"line_number":418,"context_line":"                \u0027Supplied VIP network_id is not allowed by the configuration \u0027"},{"line_number":419,"context_line":"                \u0027of this deployment.\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"446d44c6_097cb8c1","line":416,"range":{"start_line":416,"start_character":33,"end_line":416,"end_character":70},"updated":"2026-05-12 13:36:36.000000000","message":"should be:\n\n```suggestion\n        if network_id.lower() in denylist:\n```","commit_id":"a4a7d1317e3098fa9b38e077cab604bf9e77e332"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"37dce2d6cfc8d6691d38f0558501174bb457f546","unresolved":false,"context_lines":[{"line_number":413,"context_line":"    denylist \u003d CONF.networking.denylist_vip_networks"},{"line_number":414,"context_line":"    if isinstance(denylist, list) and len(denylist) \u003e 0:"},{"line_number":415,"context_line":"        denylist \u003d map(str.lower, denylist)"},{"line_number":416,"context_line":"        if network_id.lower() in CONF.networking.denylist_vip_networks:"},{"line_number":417,"context_line":"            raise exceptions.ValidationException(detail\u003d_("},{"line_number":418,"context_line":"                \u0027Supplied VIP network_id is not allowed by the configuration \u0027"},{"line_number":419,"context_line":"                \u0027of this deployment.\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"4c54d99e_78f4184b","line":416,"range":{"start_line":416,"start_character":33,"end_line":416,"end_character":70},"in_reply_to":"446d44c6_097cb8c1","updated":"2026-05-12 13:38:41.000000000","message":"Done","commit_id":"a4a7d1317e3098fa9b38e077cab604bf9e77e332"}],"octavia/tests/unit/common/test_validate.py":[{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"6f5166a1cc5e3b6f4b6e96f5377dac8c9d1c98cf","unresolved":true,"context_lines":[{"line_number":365,"context_line":"            exceptions.ValidationException,"},{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"}],"source_content_type":"text/x-python","patch_set":1,"id":"e1a88ffc_7ec8e213","line":368,"updated":"2026-03-09 09:01:04.000000000","message":"The test is doing the same way as blacklist but that\u0027s not what we want here. So I suggest generating one UUID and test if it raise.","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"81222230f21e051bff3eeb2e2bf1bbc56531c8ef","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            exceptions.ValidationException,"},{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"}],"source_content_type":"text/x-python","patch_set":1,"id":"52ae4138_363e469d","line":368,"in_reply_to":"1492d46d_2a8c148f","updated":"2026-03-09 09:35:02.000000000","message":"As seen with you, the test is correct.","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"2d31b8c9baf2e8e0ca47773757e60a63cad00627","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            exceptions.ValidationException,"},{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"}],"source_content_type":"text/x-python","patch_set":1,"id":"0bcee99f_0cfdfc51","line":368,"in_reply_to":"1492d46d_2a8c148f","updated":"2026-03-09 09:34:03.000000000","message":"my bad it\u0027s all good","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"7243338b738aa1baf35bcf3e552e429b28926d02","unresolved":true,"context_lines":[{"line_number":365,"context_line":"            exceptions.ValidationException,"},{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"}],"source_content_type":"text/x-python","patch_set":1,"id":"1492d46d_2a8c148f","line":368,"in_reply_to":"e1a88ffc_7ec8e213","updated":"2026-03-09 09:01:36.000000000","message":"same way as whitelist*","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"6f5166a1cc5e3b6f4b6e96f5377dac8c9d1c98cf","unresolved":true,"context_lines":[{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","}],"source_content_type":"text/x-python","patch_set":1,"id":"4a2d73dd_1e68b740","line":369,"updated":"2026-03-09 09:01:04.000000000","message":"```suggestion\n        net_id \u003d uuidutils.generate_uuid()\n```","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"81222230f21e051bff3eeb2e2bf1bbc56531c8ef","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","}],"source_content_type":"text/x-python","patch_set":1,"id":"71d587b9_a85b9969","line":369,"in_reply_to":"4a2d73dd_1e68b740","updated":"2026-03-09 09:35:02.000000000","message":"Acknowledged","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"2d31b8c9baf2e8e0ca47773757e60a63cad00627","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            validate.network_allowed_by_config, net_id3)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def test_network_blacklist_by_config(self):"},{"line_number":369,"context_line":"        net_id1 \u003d uuidutils.generate_uuid()"},{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","}],"source_content_type":"text/x-python","patch_set":1,"id":"2d77f707_59bc8467","line":369,"in_reply_to":"4a2d73dd_1e68b740","updated":"2026-03-09 09:34:03.000000000","message":"Done","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"6f5166a1cc5e3b6f4b6e96f5377dac8c9d1c98cf","unresolved":true,"context_lines":[{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","},{"line_number":373,"context_line":"                         blacklist_vip_networks\u003d[net_id1, net_id2])"},{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d2f0d5b6_30a16519","line":373,"updated":"2026-03-09 09:01:04.000000000","message":"```suggestion\n                         blacklist_vip_networks\u003d[net_id])\n```","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"81222230f21e051bff3eeb2e2bf1bbc56531c8ef","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","},{"line_number":373,"context_line":"                         blacklist_vip_networks\u003d[net_id1, net_id2])"},{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5176059e_d9f2bcfb","line":373,"in_reply_to":"d2f0d5b6_30a16519","updated":"2026-03-09 09:35:02.000000000","message":"Acknowledged","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"2d31b8c9baf2e8e0ca47773757e60a63cad00627","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        net_id2 \u003d uuidutils.generate_uuid("},{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","},{"line_number":373,"context_line":"                         blacklist_vip_networks\u003d[net_id1, net_id2])"},{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5241b375_777183db","line":373,"in_reply_to":"d2f0d5b6_30a16519","updated":"2026-03-09 09:34:03.000000000","message":"Done","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"6f5166a1cc5e3b6f4b6e96f5377dac8c9d1c98cf","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","},{"line_number":373,"context_line":"                         blacklist_vip_networks\u003d[net_id1, net_id2])"},{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"},{"line_number":377,"context_line":"            validate.network_blacklist_by_config, net_id1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab93e49_91e025dc","line":374,"updated":"2026-03-09 09:01:04.000000000","message":"```suggestion\n        validate.network_allowed_by_config(net_id)\n```","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"81222230f21e051bff3eeb2e2bf1bbc56531c8ef","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","},{"line_number":373,"context_line":"                         blacklist_vip_networks\u003d[net_id1, net_id2])"},{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"},{"line_number":377,"context_line":"            validate.network_blacklist_by_config, net_id1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"eb1331bb_6d115e3d","line":374,"in_reply_to":"bab93e49_91e025dc","updated":"2026-03-09 09:35:02.000000000","message":"Acknowledged","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"2d31b8c9baf2e8e0ca47773757e60a63cad00627","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        net_id3 \u003d uuidutils.generate_uuid())"},{"line_number":372,"context_line":"        self.conf.config(group\u003d\"networking\","},{"line_number":373,"context_line":"                         blacklist_vip_networks\u003d[net_id1, net_id2])"},{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"},{"line_number":377,"context_line":"            validate.network_blacklist_by_config, net_id1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2234a4df_374c2735","line":374,"in_reply_to":"bab93e49_91e025dc","updated":"2026-03-09 09:34:03.000000000","message":"Done","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"6f5166a1cc5e3b6f4b6e96f5377dac8c9d1c98cf","unresolved":true,"context_lines":[{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"},{"line_number":377,"context_line":"            validate.network_blacklist_by_config, net_id1)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def test_qos_policy_exists(self):"},{"line_number":380,"context_line":"        qos_policy_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"8672b4df_15d30efc","line":377,"updated":"2026-03-09 09:01:04.000000000","message":"```suggestion\n            validate.network_blacklist_by_config, net_id)\n```","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"81222230f21e051bff3eeb2e2bf1bbc56531c8ef","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"},{"line_number":377,"context_line":"            validate.network_blacklist_by_config, net_id1)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def test_qos_policy_exists(self):"},{"line_number":380,"context_line":"        qos_policy_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1a1265d_6f859ace","line":377,"in_reply_to":"8672b4df_15d30efc","updated":"2026-03-09 09:35:02.000000000","message":"Acknowledged","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"},{"author":{"_account_id":37313,"name":"MAILLET-CONTOZ Nicolas","display_name":"Nicolas MAILLET-CONTOZ","email":"nicolas.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"2d31b8c9baf2e8e0ca47773757e60a63cad00627","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        validate.network_allowed_by_config(net_id3)"},{"line_number":375,"context_line":"        self.assertRaises("},{"line_number":376,"context_line":"            exceptions.ValidationException,"},{"line_number":377,"context_line":"            validate.network_blacklist_by_config, net_id1)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def test_qos_policy_exists(self):"},{"line_number":380,"context_line":"        qos_policy_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d7b2441_7355703f","line":377,"in_reply_to":"8672b4df_15d30efc","updated":"2026-03-09 09:34:03.000000000","message":"Done","commit_id":"b2d44511efbfd5559c7f9425a0ded0d67939f3fe"}]}
