)]}'
{"/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":"815f9efc0fd250cdd62d6a560118559c30075762","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3847a339_405aeb59","updated":"2024-09-08 17:56:18.000000000","message":"Thanks for the submission!\n\nI have not reviewed the code yet, but have read through it generally -- don\u0027t take this as a full review.\n\nThis needs a release note. Also adding documentation and an RFE bug describing the change in behavior would be ideal. TBH I don\u0027t care so much about the bug as I do it being clearly documented what the new behavior is.","commit_id":"26077c627f19884a8a5a373b2998670bcfd1bcca"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"11a95c02a56121b2f3057e75ce8043699954f71c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7466ae73_f385ab4d","in_reply_to":"3847a339_405aeb59","updated":"2024-10-16 17:21:10.000000000","message":"For the docs - what would be a good place? configuration.rst only lists how to configure various options - supporting Neutron Trunk ports doesn\u0027t really require that.","commit_id":"26077c627f19884a8a5a373b2998670bcfd1bcca"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"f4cdedaf84ba1b50c22153ecd008f5dc7d8136c7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a89d71eb_72ffbb1e","in_reply_to":"50576121_581682ad","updated":"2025-02-18 16:03:11.000000000","message":"I\u0027m happy to do a follow up to create a support matrix in the docs (and maybe refresh them a bit) - I\u0027ll post that on top of that patch later this week.","commit_id":"26077c627f19884a8a5a373b2998670bcfd1bcca"},{"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":"0e2530a7d3ab5d918f02de4260fd33eed1609cfc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"50576121_581682ad","in_reply_to":"7466ae73_f385ab4d","updated":"2025-02-18 16:00:12.000000000","message":"Honestly I think this is sorta pointing to the problem. We don\u0027t really have a list of supported features in NGS. There\u0027s a reason this question wasn\u0027t associated with a -1, I don\u0027t think we should block your patch on essentially an ngs-wide problem, but if there\u0027s time, improving that would be nice.","commit_id":"26077c627f19884a8a5a373b2998670bcfd1bcca"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"97a33978d49db7cb6d8322f3103ab5da4cfb25ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"78ed089e_686ac2de","in_reply_to":"a89d71eb_72ffbb1e","updated":"2025-02-20 07:55:46.000000000","message":"Done","commit_id":"26077c627f19884a8a5a373b2998670bcfd1bcca"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b10443f6a557fa14562ef7375b733be3c7c9b7b3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d8547724_318d15aa","updated":"2024-10-07 08:06:25.000000000","message":"to highlight Jay\u0027s comment, please add a release note, documentation and an RFE request from launchpad, thanks!","commit_id":"e7a2227b62c704793d80ece72e674c8fd3a92e3b"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"ab2ce545f9e62ad661e81b0831938ef16cfaaf91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"2083e6ef_091bd1d0","updated":"2024-10-24 15:01:45.000000000","message":"TODO: Add support for subports","commit_id":"200d3f610a1698bf829e8864705e482599d2866e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"0f6fd3e378b2f33ac68c62cf165e838cc7b6abab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"79884497_7f7bc75b","updated":"2024-11-04 17:28:56.000000000","message":"TODO: unit tests for trunk driver","commit_id":"ede78d948a22e2a3447ac651a7242b819e3b42f8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"eef3882ac3526806d815d9c023b00fbda6ba428c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"ede49a07_e563443b","updated":"2025-01-27 14:56:59.000000000","message":"Hello Ironic community, if no objections I will pick up this patch and push updates.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"eef3882ac3526806d815d9c023b00fbda6ba428c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"80e7b952_07fe547d","updated":"2025-01-27 14:56:59.000000000","message":"hello ironic community, are there any plans to push an update to this patch?","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"8de8668c41265af738492130fc2d4560a8b24ed3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"5fb0d9a5_da99558e","in_reply_to":"1f794352_5ab34751","updated":"2025-02-18 13:08:40.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4cae0f5e7fdc8ec739cc5830cac42900a4110696","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":19,"id":"1f794352_5ab34751","in_reply_to":"37a3632b_fa2f8a21","updated":"2025-01-27 15:13:05.000000000","message":"ok, let me than left a comments based on my downstream work.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c7e3e62a12b33473308b03efebfdd1971f87d9e9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":19,"id":"37a3632b_fa2f8a21","in_reply_to":"ede49a07_e563443b","updated":"2025-01-27 15:06:40.000000000","message":"I have objections, I\u0027m actively working on it.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"525470c6cb2f0086115259aa52027fa307ae5f37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"d70ecc39_72bd7111","updated":"2025-02-04 17:15:36.000000000","message":"the patch is ready for review, I\u0027m working on tempest scenario tests for this feature. @mnasiadka@gmail.com please remove work in progress from the patch.","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3f3fd0a86590029810b0f13cab08554579514f88","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"ef81ed81_14aa610c","in_reply_to":"4fb0c77d_975e17ca","updated":"2025-02-07 15:41:38.000000000","message":"@mnasiadka@gmail.com what kind of docs do we need? something like support matrix of the features? I\u0027m not sure we have any docs in n-g-s for this right now. And it will be highlighted in the release notes for users.","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"df79f744c8de759c382aad0b2f8bd6b00f271cd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9f76c845_f5d32eb1","in_reply_to":"a37405a8_d92ae49d","updated":"2025-02-20 07:56:01.000000000","message":"Done","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"2b553199d440da0cb5b8edc87da4deadcb2517db","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"4fb0c77d_975e17ca","in_reply_to":"d70ecc39_72bd7111","updated":"2025-02-06 07:46:26.000000000","message":"thanks for working on this - we’ll still need docs and description in the bug/rfe","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"8de8668c41265af738492130fc2d4560a8b24ed3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"a37405a8_d92ae49d","in_reply_to":"ef81ed81_14aa610c","updated":"2025-02-18 13:08:40.000000000","message":"@jay@jvf.cc any guidance here? you requested that in the past, and I skimmed NGS docs - can\u0027t really find any sections that would fit - maybe a support matrix would be good?","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9c4e613187fd5bf28ff02a5df6f112e1f5da0c7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"9447e42e_8bd7ee59","updated":"2025-02-07 19:07:15.000000000","message":"A couple minor concerns in-line.","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"feca70d56cfd8416b4dcfc8bf73d017fa30e32d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"61798af0_a5dd82a9","updated":"2025-02-07 20:23:44.000000000","message":"thanks for review TheJulia, I\u0027ll address comments on next week.","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"368840ca63f17a7f5705b9eab44599feb14a5be0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"96694950_06793d94","updated":"2025-02-08 19:00:39.000000000","message":"recheck dependent patch updated","commit_id":"fe62115484747d47d53c29722d2eae71ba23483d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"aef2734cc97708396b7e3b105a5d0f9f1908fdee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"9c00252d_cda3ca48","updated":"2025-02-08 20:18:16.000000000","message":"recheck dependent patch updated","commit_id":"fe62115484747d47d53c29722d2eae71ba23483d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"8b48a7528ddd5cc25f1905147ac3192bc9a9a215","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"bca7f757_8434df51","updated":"2025-02-08 18:04:46.000000000","message":"recheck dependent patch updated","commit_id":"fe62115484747d47d53c29722d2eae71ba23483d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4896d55adb44682302c28b84200b40287d4591af","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"cb76e9e3_d44d3abe","updated":"2025-02-08 15:32:11.000000000","message":"recheck dependent patch updated","commit_id":"fe62115484747d47d53c29722d2eae71ba23483d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0788c5082ada02aa58da457418f107c279ad4d00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"0b936dbe_82ab9b18","updated":"2025-02-09 16:24:39.000000000","message":"recheck to test with latest version of tempest plugin","commit_id":"fe62115484747d47d53c29722d2eae71ba23483d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9c6f054ba322627e2f65e71b0e5b7c15b0149f7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"a56aaf19_cf10efd8","updated":"2025-02-08 21:52:53.000000000","message":"recheck unrelated host is not mapped to any cell","commit_id":"fe62115484747d47d53c29722d2eae71ba23483d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"764725756c615e9bc0c24da0a3599960d2dc4601","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"f70a337b_60c38b9f","updated":"2025-02-16 14:53:50.000000000","message":"recheck ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode","commit_id":"b38df5eb0db42ed2f694fdf5dca6d24dcd3f8174"},{"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":"8fe2a48c7671bcbaafb3a3d53ef45e8b742376dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"e3d078d8_fefb7cd6","updated":"2025-02-19 20:31:45.000000000","message":"Would prefer not +2 as I\u0027m not directly familiar with the switch commands being used, but generally LGTM. If this needs my core review later, please ping me on IRC :).","commit_id":"66e00a5857ed25c83ee0b3db0fb082414c0c3cbb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"30d7cd402b651720d35ad6c3ba9844bbf2f6ebad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"8d1b2ce2_684c5cac","updated":"2025-02-17 21:28:52.000000000","message":"recheck dependency updated","commit_id":"66e00a5857ed25c83ee0b3db0fb082414c0c3cbb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"820bd8634cee534c7bf294a4dc8bd643387a27f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"5865c8a0_0c63480f","updated":"2025-02-17 13:36:11.000000000","message":"recheck dependent patch updated","commit_id":"66e00a5857ed25c83ee0b3db0fb082414c0c3cbb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1bbf51562b199aa188d7615d33c06a25eab32143","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"b8d4a83e_f4c1c19c","updated":"2025-02-17 19:28:50.000000000","message":"recheck post failure","commit_id":"66e00a5857ed25c83ee0b3db0fb082414c0c3cbb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"859a8218d32230c2d0a3303a37abe5ea6a29677b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"5980135e_e330ea0c","updated":"2025-02-17 16:29:05.000000000","message":"recheck tempest plugin is updated","commit_id":"66e00a5857ed25c83ee0b3db0fb082414c0c3cbb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7bbd56fc6af585bf5d10dc3f4fff8e0871445bdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"13317f4f_474a343f","in_reply_to":"e3d078d8_fefb7cd6","updated":"2025-02-20 07:56:38.000000000","message":"I personally did verification on Cumulus only which is added in next patch. Commands for Cisco and Arista were copied from original patch, and they looks reasonable for me.","commit_id":"66e00a5857ed25c83ee0b3db0fb082414c0c3cbb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a4b679c6c366c7e24166122fbf4a535a98ac2f5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"a6046ff5_d1e509a0","updated":"2025-02-27 17:16:23.000000000","message":"recheck unrelated timeout","commit_id":"bcee9e196ea248e6201efe9bd5a7566e2422089b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"8b3d9ea34a6a867b085c4a3cc78486c7d53c9b14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"e85b46ad_38835226","updated":"2025-02-27 09:34:12.000000000","message":"recheck unrelated timeout","commit_id":"bcee9e196ea248e6201efe9bd5a7566e2422089b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d06b25a5d1cd6307d865fdaf426268ef33e08ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"077e06d8_4704d448","updated":"2025-02-28 07:00:30.000000000","message":"trivial rebase after merge conflict","commit_id":"bcee9e196ea248e6201efe9bd5a7566e2422089b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3c103ef0e20ad1942e0f728139f609086ec804d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"ebf12415_a1ad6044","updated":"2025-03-10 15:42:48.000000000","message":"I removed the depends-on the ironic-tempest-plugin change to disjoint the change itself as discussed on IRC this morning after the weekly meeting. I\u0027m otherwise good with this as-is.","commit_id":"ff0085a03af2e18535d395aadcd0262a0731ac12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ad1a8d760661f1c204a693151b8a691210e26cba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"0fe55097_ae21d673","updated":"2025-03-10 17:55:41.000000000","message":"recheck apache did not start unrelated","commit_id":"ff0085a03af2e18535d395aadcd0262a0731ac12"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"59ad9f48fecafa70f9163b037e14df59c03f964d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"464901ee_448f5cac","updated":"2025-03-10 22:06:23.000000000","message":"recheck tempest run command exited with code 1","commit_id":"ff0085a03af2e18535d395aadcd0262a0731ac12"}],"networking_generic_switch/devices/netmiko_devices/__init__.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c8be7c8a7d6d92a9194bcf94eaa1533f5f1c0250","unresolved":true,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    SET_NATIVE_VLAN \u003d None"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    ALLOW_NETWORK_ON_TRUNK \u003d None"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    ERROR_MSG_PATTERNS \u003d ()"},{"line_number":98,"context_line":"    \"\"\"Sequence of error message patterns."}],"source_content_type":"text/x-python","patch_set":19,"id":"1e20a3c1_7ee73066","line":95,"range":{"start_line":95,"start_character":4,"end_line":95,"end_character":26},"updated":"2025-01-27 15:21:56.000000000","message":"DELETE_NETWORK_ON_TRUNK \u003d None","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c40f811fdde0a28af3cb4755cf04e4db6b6556bd","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    SET_NATIVE_VLAN \u003d None"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    ALLOW_NETWORK_ON_TRUNK \u003d None"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    ERROR_MSG_PATTERNS \u003d ()"},{"line_number":98,"context_line":"    \"\"\"Sequence of error message patterns."}],"source_content_type":"text/x-python","patch_set":19,"id":"8df9ac26_ef747989","line":95,"range":{"start_line":95,"start_character":4,"end_line":95,"end_character":26},"in_reply_to":"1e20a3c1_7ee73066","updated":"2025-02-04 13:46:39.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c8be7c8a7d6d92a9194bcf94eaa1533f5f1c0250","unresolved":true,"context_lines":[{"line_number":474,"context_line":"                    segmentation_id\u003dsub_port[\u0027segmentation_id\u0027]))"},{"line_number":475,"context_line":"        return cmd_set"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def get_trunk_subport_cmds(self, port_id, subports):"},{"line_number":478,"context_line":"        cmd_set \u003d []"},{"line_number":479,"context_line":"        for sub_port in subports:"},{"line_number":480,"context_line":"            cmd_set.extend("}],"source_content_type":"text/x-python","patch_set":19,"id":"136e140f_1ef9c952","line":477,"range":{"start_line":477,"start_character":8,"end_line":477,"end_character":30},"updated":"2025-01-27 15:21:56.000000000","message":"get_trunk_subport_add_cmds","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c40f811fdde0a28af3cb4755cf04e4db6b6556bd","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                    segmentation_id\u003dsub_port[\u0027segmentation_id\u0027]))"},{"line_number":475,"context_line":"        return cmd_set"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def get_trunk_subport_cmds(self, port_id, subports):"},{"line_number":478,"context_line":"        cmd_set \u003d []"},{"line_number":479,"context_line":"        for sub_port in subports:"},{"line_number":480,"context_line":"            cmd_set.extend("}],"source_content_type":"text/x-python","patch_set":19,"id":"03c4b616_25784121","line":477,"range":{"start_line":477,"start_character":8,"end_line":477,"end_character":30},"in_reply_to":"136e140f_1ef9c952","updated":"2025-02-04 13:46:39.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9c4e613187fd5bf28ff02a5df6f112e1f5da0c7e","unresolved":true,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @property"},{"line_number":166,"context_line":"    def support_trunk_on_ports(self):"},{"line_number":167,"context_line":"        return self.ADD_NETWORK_TO_TRUNK is not None"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @property"},{"line_number":170,"context_line":"    def support_trunk_on_bond_ports(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"cb95ce79_82c2b8e9","line":167,"updated":"2025-02-07 19:07:15.000000000","message":"Out of curiosity, why not just return self.ADD_NETWORK_TO_TRUNK since we appear to be treating the value as a boolean. This might be clear later on to me, but it just seems like we\u0027re setting up a three state flag which might be okay, but the reality could also end up being an explicit False.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3fb41d88bcaceae80528d27e0da314a5bcf72ba6","unresolved":true,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    @property"},{"line_number":166,"context_line":"    def support_trunk_on_ports(self):"},{"line_number":167,"context_line":"        return self.ADD_NETWORK_TO_TRUNK is not None"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @property"},{"line_number":170,"context_line":"    def support_trunk_on_bond_ports(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"c34a5728_08fa78be","line":167,"in_reply_to":"cb95ce79_82c2b8e9","updated":"2025-02-08 11:59:12.000000000","message":"ADD_NETWORK_TO_TRUNK is a attribute available only on netmiko devices, however this property set in generic device class as we need it to set if non netmiko based switch implements trunk functionality or not. This is useful only for out of tree drivers, but I\u0027m not aware of any of such driver.\n\nmay use bool(self.ADD_NETWORK_TO_TRUNK) actually, I prefer to be consistent in the return value type for the functions.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"}],"networking_generic_switch/devices/netmiko_devices/arista.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c8be7c8a7d6d92a9194bcf94eaa1533f5f1c0250","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    ALLOW_NETWORK_ON_TRUNK \u003d ("},{"line_number":49,"context_line":"        \u0027interface {port}\u0027,"},{"line_number":50,"context_line":"        \u0027switchport trunk allowed vlan add {segmentation_id}\u0027"},{"line_number":51,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":19,"id":"09e1a024_a421f687","line":51,"updated":"2025-01-27 15:21:56.000000000","message":"please implement DELETE_NETWORK_ON_TRUNK for all devices where support is added otherwise its one way ticket functionality.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c40f811fdde0a28af3cb4755cf04e4db6b6556bd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    ALLOW_NETWORK_ON_TRUNK \u003d ("},{"line_number":49,"context_line":"        \u0027interface {port}\u0027,"},{"line_number":50,"context_line":"        \u0027switchport trunk allowed vlan add {segmentation_id}\u0027"},{"line_number":51,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":19,"id":"c4c37834_f5b52059","line":51,"in_reply_to":"09e1a024_a421f687","updated":"2025-02-04 13:46:39.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"}],"networking_generic_switch/devices/netmiko_devices/cumulus.py":[{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"d328ae80760a18097002b7ca2d9bb3436567716b","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        \u0027nv config save\u0027,"},{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    SET_NATIVE_VLAN \u003d ["},{"line_number":141,"context_line":"        \u0027nv set interface {port} bridge domain br_default untagged \u0027"},{"line_number":142,"context_line":"        \u0027{segmentation_id}\u0027,"},{"line_number":143,"context_line":"        \u0027nv set interface {port} bridge domain br_default vlan \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"6034eb3d_e2f11a87","line":140,"updated":"2024-10-30 08:57:46.000000000","message":"Unfortunately with nvue setting untagged/vlan will not remove an access property. We will need to explicitly unset access here (and vice versa where we set access).\n\nExample here: https://github.com/stackhpc/networking-generic-switch/pull/95/commits/a0724690e52dbf02542c138429f95a5f9074f05d","commit_id":"200d3f610a1698bf829e8864705e482599d2866e"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"424f0649e17f11c9057f15bc1a5a7ac02e6e97a3","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        \u0027nv config save\u0027,"},{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    SET_NATIVE_VLAN \u003d ["},{"line_number":141,"context_line":"        \u0027nv set interface {port} bridge domain br_default untagged \u0027"},{"line_number":142,"context_line":"        \u0027{segmentation_id}\u0027,"},{"line_number":143,"context_line":"        \u0027nv set interface {port} bridge domain br_default vlan \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"a9efb87e_f5472371","line":140,"in_reply_to":"18d29413_cb56a23c","updated":"2025-01-02 16:52:35.000000000","message":"Yes, I\u0027ve been using the default vlan option","commit_id":"200d3f610a1698bf829e8864705e482599d2866e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"90393488c8804f1b24ddd727722b52cf2f7b8c9d","unresolved":true,"context_lines":[{"line_number":137,"context_line":"        \u0027nv config save\u0027,"},{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    SET_NATIVE_VLAN \u003d ["},{"line_number":141,"context_line":"        \u0027nv set interface {port} bridge domain br_default untagged \u0027"},{"line_number":142,"context_line":"        \u0027{segmentation_id}\u0027,"},{"line_number":143,"context_line":"        \u0027nv set interface {port} bridge domain br_default vlan \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"18d29413_cb56a23c","line":140,"in_reply_to":"6034eb3d_e2f11a87","updated":"2024-12-18 07:32:29.000000000","message":"Well, we\u0027re talking about a case where you use default vlan on port or you don\u0027t shut down a port after unbinding, right?","commit_id":"200d3f610a1698bf829e8864705e482599d2866e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"8de8668c41265af738492130fc2d4560a8b24ed3","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \u0027nv config save\u0027,"},{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    SET_NATIVE_VLAN \u003d ["},{"line_number":141,"context_line":"        \u0027nv set interface {port} bridge domain br_default untagged \u0027"},{"line_number":142,"context_line":"        \u0027{segmentation_id}\u0027,"},{"line_number":143,"context_line":"        \u0027nv set interface {port} bridge domain br_default vlan \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"228f9230_bbd59c7e","line":140,"in_reply_to":"a9efb87e_f5472371","updated":"2025-02-18 13:08:40.000000000","message":"Done","commit_id":"200d3f610a1698bf829e8864705e482599d2866e"}],"networking_generic_switch/devices/netmiko_devices/ovs.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2af23435d6dd3fc53cc7ca23484dc6cb40511cc3","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    SET_NATIVE_VLAN \u003d ("},{"line_number":32,"context_line":"        \u0027ovs-vsctl set port {port} vlan_mode\u003dnative-untagged\u0027,"},{"line_number":33,"context_line":"        \u0027ovs-vsctl set port {port} tag\u003d{segmentation_id}\u0027,"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    DELETE_NATIVE_VLAN \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"d148ea4a_716a163c","line":33,"range":{"start_line":33,"start_character":18,"end_line":33,"end_character":19},"updated":"2025-02-08 01:46:11.000000000","message":"\u0027ovs-vsctl add port {port} trunks {segmentation_id}\u0027","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3fb41d88bcaceae80528d27e0da314a5bcf72ba6","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    SET_NATIVE_VLAN \u003d ("},{"line_number":32,"context_line":"        \u0027ovs-vsctl set port {port} vlan_mode\u003dnative-untagged\u0027,"},{"line_number":33,"context_line":"        \u0027ovs-vsctl set port {port} tag\u003d{segmentation_id}\u0027,"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    DELETE_NATIVE_VLAN \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"fb6a8ad5_7a1f69d3","line":33,"range":{"start_line":33,"start_character":18,"end_line":33,"end_character":19},"in_reply_to":"d148ea4a_716a163c","updated":"2025-02-08 11:59:12.000000000","message":"Done","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2af23435d6dd3fc53cc7ca23484dc6cb40511cc3","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    DELETE_NATIVE_VLAN \u003d ("},{"line_number":37,"context_line":"        \u0027ovs-vsctl clear port {port} vlan_mode\u0027,"},{"line_number":38,"context_line":"        \u0027ovs-vsctl clear port {port} tag\u0027,"},{"line_number":39,"context_line":"    )"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    SET_NATIVE_VLAN_BOND \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"0d989892_4b7f9748","line":38,"range":{"start_line":38,"start_character":19,"end_line":38,"end_character":24},"updated":"2025-02-08 01:46:11.000000000","message":"\u0027ovs-vsctl remove port {port} trunks {segmentation_id}\u0027","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3fb41d88bcaceae80528d27e0da314a5bcf72ba6","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    DELETE_NATIVE_VLAN \u003d ("},{"line_number":37,"context_line":"        \u0027ovs-vsctl clear port {port} vlan_mode\u0027,"},{"line_number":38,"context_line":"        \u0027ovs-vsctl clear port {port} tag\u0027,"},{"line_number":39,"context_line":"    )"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    SET_NATIVE_VLAN_BOND \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"0cfc7531_78c67e13","line":38,"range":{"start_line":38,"start_character":19,"end_line":38,"end_character":24},"in_reply_to":"0d989892_4b7f9748","updated":"2025-02-08 11:59:12.000000000","message":"Done","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2af23435d6dd3fc53cc7ca23484dc6cb40511cc3","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    SET_NATIVE_VLAN_BOND \u003d ("},{"line_number":42,"context_line":"        \u0027ovs-vsctl set port {bond} vlan_mode\u003dnative-untagged\u0027,"},{"line_number":43,"context_line":"        \u0027ovs-vsctl set port {bond} tag\u003d{segmentation_id}\u0027,"},{"line_number":44,"context_line":"    )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    DELETE_NATIVE_VLAN_BOND \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"b332fd22_04334f48","line":43,"range":{"start_line":43,"start_character":40,"end_line":43,"end_character":55},"updated":"2025-02-08 01:46:11.000000000","message":"\u0027ovs-vsctl add port {bond} trunks {segmentation_id}\u0027","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3fb41d88bcaceae80528d27e0da314a5bcf72ba6","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    SET_NATIVE_VLAN_BOND \u003d ("},{"line_number":42,"context_line":"        \u0027ovs-vsctl set port {bond} vlan_mode\u003dnative-untagged\u0027,"},{"line_number":43,"context_line":"        \u0027ovs-vsctl set port {bond} tag\u003d{segmentation_id}\u0027,"},{"line_number":44,"context_line":"    )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    DELETE_NATIVE_VLAN_BOND \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"7e83a2c6_368f4bbe","line":43,"range":{"start_line":43,"start_character":40,"end_line":43,"end_character":55},"in_reply_to":"b332fd22_04334f48","updated":"2025-02-08 11:59:12.000000000","message":"Done","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2af23435d6dd3fc53cc7ca23484dc6cb40511cc3","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    DELETE_NATIVE_VLAN_BOND \u003d ("},{"line_number":47,"context_line":"        \u0027ovs-vsctl clear port {bond} vlan_mode\u0027,"},{"line_number":48,"context_line":"        \u0027ovs-vsctl clear port {bond} tag\u0027,"},{"line_number":49,"context_line":"    )"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    ADD_NETWORK_TO_TRUNK \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"9ce9aabb_85d66a59","line":48,"range":{"start_line":48,"start_character":13,"end_line":48,"end_character":18},"updated":"2025-02-08 01:46:11.000000000","message":"\u0027ovs-vsctl remove port {bond} trunks {segmentation_id}\u0027","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3fb41d88bcaceae80528d27e0da314a5bcf72ba6","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    DELETE_NATIVE_VLAN_BOND \u003d ("},{"line_number":47,"context_line":"        \u0027ovs-vsctl clear port {bond} vlan_mode\u0027,"},{"line_number":48,"context_line":"        \u0027ovs-vsctl clear port {bond} tag\u0027,"},{"line_number":49,"context_line":"    )"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    ADD_NETWORK_TO_TRUNK \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"a5a9e6d4_aa4565b1","line":48,"range":{"start_line":48,"start_character":13,"end_line":48,"end_character":18},"in_reply_to":"9ce9aabb_85d66a59","updated":"2025-02-08 11:59:12.000000000","message":"Done","commit_id":"4f1257f6f84b5419dedc563a37f54b58bd5f3d78"}],"networking_generic_switch/generic_switch_mech.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7cc9d7bc18f78c0ff8f27b8df631bca79acadc2c","unresolved":true,"context_lines":[{"line_number":383,"context_line":"                           \u0027segmentation_id\u0027: segmentation_id})"},{"line_number":384,"context_line":"                # Move port to network"},{"line_number":385,"context_line":"                try:"},{"line_number":386,"context_line":"                    if trunk_details:"},{"line_number":387,"context_line":"                        switch.plug_port_to_network_trunk("},{"line_number":388,"context_line":"                            port_id, segmentation_id, trunk_details)"},{"line_number":389,"context_line":"                    elif (is_802_3ad"},{"line_number":390,"context_line":"                            and hasattr(switch, \u0027plug_bond_to_network\u0027)):"},{"line_number":391,"context_line":"                        switch.plug_bond_to_network(port_id, segmentation_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"77b3c425_169460fb","line":388,"range":{"start_line":386,"start_character":0,"end_line":388,"end_character":68},"updated":"2025-01-27 15:54:21.000000000","message":"bonding and trunking are orthogonal things, it should be possible to plug bond or stand alone port to the network, not sure this is right place to work with trunks, they should be handled inside.\n\nIts better to extend plug_port|bond interface to network with trunk_details field and handle trunks inside.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c40f811fdde0a28af3cb4755cf04e4db6b6556bd","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                           \u0027segmentation_id\u0027: segmentation_id})"},{"line_number":384,"context_line":"                # Move port to network"},{"line_number":385,"context_line":"                try:"},{"line_number":386,"context_line":"                    if trunk_details:"},{"line_number":387,"context_line":"                        switch.plug_port_to_network_trunk("},{"line_number":388,"context_line":"                            port_id, segmentation_id, trunk_details)"},{"line_number":389,"context_line":"                    elif (is_802_3ad"},{"line_number":390,"context_line":"                            and hasattr(switch, \u0027plug_bond_to_network\u0027)):"},{"line_number":391,"context_line":"                        switch.plug_bond_to_network(port_id, segmentation_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"b369dbae_ce31f307","line":388,"range":{"start_line":386,"start_character":0,"end_line":388,"end_character":68},"in_reply_to":"77b3c425_169460fb","updated":"2025-02-04 13:46:39.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"1660d199a10ca0a64f55e9bd5976715daf934e9e","unresolved":true,"context_lines":[{"line_number":715,"context_line":"                self.switches, switch_info\u003dswitch_info,"},{"line_number":716,"context_line":"                ngs_mac_address\u003dswitch_id)"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        switch.plug_subport_to_network_trunk("},{"line_number":719,"context_line":"            port_id, subports)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"    def subports_deleted(self, port_id, subports, db):"},{"line_number":722,"context_line":"        # set the correct state on port in the case where it has subports."}],"source_content_type":"text/x-python","patch_set":19,"id":"95b4d35b_a9412ec4","line":719,"range":{"start_line":718,"start_character":8,"end_line":719,"end_character":30},"updated":"2025-02-02 14:38:46.000000000","message":"this method should be called for each port_id not last one.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c40f811fdde0a28af3cb4755cf04e4db6b6556bd","unresolved":false,"context_lines":[{"line_number":715,"context_line":"                self.switches, switch_info\u003dswitch_info,"},{"line_number":716,"context_line":"                ngs_mac_address\u003dswitch_id)"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        switch.plug_subport_to_network_trunk("},{"line_number":719,"context_line":"            port_id, subports)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"    def subports_deleted(self, port_id, subports, db):"},{"line_number":722,"context_line":"        # set the correct state on port in the case where it has subports."}],"source_content_type":"text/x-python","patch_set":19,"id":"a40a9448_d30e2e16","line":719,"range":{"start_line":718,"start_character":8,"end_line":719,"end_character":30},"in_reply_to":"95b4d35b_a9412ec4","updated":"2025-02-04 13:46:39.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9c4e613187fd5bf28ff02a5df6f112e1f5da0c7e","unresolved":true,"context_lines":[{"line_number":660,"context_line":"        \"\"\"Tell the agent about new subports to add.\"\"\""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        # set the correct state on port in the case where it has subports."},{"line_number":663,"context_line":"        port \u003d Port.get_object(db, id\u003dport_id)"},{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"}],"source_content_type":"text/x-python","patch_set":22,"id":"e7a9f3ff_0827e7d7","line":663,"updated":"2025-02-07 19:07:15.000000000","message":"I\u0027m going to be honest, the need to access the port object makes me nervious since this makes ngs unnable to be decoupled from Neutron in the end. That being said, it looks like it is a requirement with the way this is written and that makes me kind of sad.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"feca70d56cfd8416b4dcfc8bf73d017fa30e32d4","unresolved":true,"context_lines":[{"line_number":660,"context_line":"        \"\"\"Tell the agent about new subports to add.\"\"\""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        # set the correct state on port in the case where it has subports."},{"line_number":663,"context_line":"        port \u003d Port.get_object(db, id\u003dport_id)"},{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"}],"source_content_type":"text/x-python","patch_set":22,"id":"e84f83e3_dd11ae9c","line":663,"in_reply_to":"e7a9f3ff_0827e7d7","updated":"2025-02-07 20:23:44.000000000","message":"I\u0027ll check if we really need to pass whole port object into device methods, may we can indeed avoid it.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b94b6297ffe298790791054b8b40485635f409db","unresolved":false,"context_lines":[{"line_number":660,"context_line":"        \"\"\"Tell the agent about new subports to add.\"\"\""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        # set the correct state on port in the case where it has subports."},{"line_number":663,"context_line":"        port \u003d Port.get_object(db, id\u003dport_id)"},{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"}],"source_content_type":"text/x-python","patch_set":22,"id":"a5b91fb0_af8b621b","line":663,"in_reply_to":"e84f83e3_dd11ae9c","updated":"2025-02-16 12:07:02.000000000","message":"Done","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3c103ef0e20ad1942e0f728139f609086ec804d6","unresolved":true,"context_lines":[{"line_number":660,"context_line":"        \"\"\"Tell the agent about new subports to add.\"\"\""},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        # set the correct state on port in the case where it has subports."},{"line_number":663,"context_line":"        port \u003d Port.get_object(db, id\u003dport_id)"},{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1ba1ec2b_1b0c7ba3","line":663,"in_reply_to":"e84f83e3_dd11ae9c","updated":"2025-03-10 15:42:48.000000000","message":"Much appreciated!","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9c4e613187fd5bf28ff02a5df6f112e1f5da0c7e","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"c8d64ebc_bcc08354","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"updated":"2025-02-07 19:07:15.000000000","message":"Is this message correct? Adding seems to be disregarded, but at the same time the text on 664 also doesn\u0027t seem to align.\n\nAlso, shouldn\u0027t this be more of an error?","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2121b69649093e719193a31d88c759a407962774","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"fb5aa555_ca9289f5","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"in_reply_to":"02dea279_3e7b04ec","updated":"2025-02-20 08:29:17.000000000","message":"I don\u0027t know if we send two requests to neutron delete port and add port to subinterface, different neutron workers may pick up different requests and send them. How they will be processed only Lord knows, there is no any coordination in neturon and they rely/retry on deadlocks. I personally think the chance to hit is is very low and looks like error in user program logic (who will remove port and try to add it as subport to trunk?). But theoretically this case is possible. So I don\u0027t care if this check present or not. If we want to make code simpler better to remove it.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3c103ef0e20ad1942e0f728139f609086ec804d6","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"d2d312a3_a6fbfd1f","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"in_reply_to":"5ed690f7_d92351a7","updated":"2025-03-10 15:42:48.000000000","message":"I guess that works for me. The key is ensuring we\u0027re all on the same page.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"311e704e0bdd0448d2b8532e489d067494edfe9f","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"02dea279_3e7b04ec","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"in_reply_to":"65ea181c_b382d558","updated":"2025-02-20 07:57:46.000000000","message":"@vsaienko@mirantis.com should we delete that conditional?","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"feca70d56cfd8416b4dcfc8bf73d017fa30e32d4","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"f6378a74_e720c853","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"in_reply_to":"c8d64ebc_bcc08354","updated":"2025-02-07 20:23:44.000000000","message":"I have a feeling that this should be not allowed on neutron-api. Adding subports to trunk when parent port is removed concurrently, so here we can just ignore this race.\n\nconfigured trunks will be cleaned from the switch with update_port_postcommit which is called for parent port removal on L416, subports should be handled there as well, good catch.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"437db5544cf089f4d59a4b9842f3919ea1090086","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"65ea181c_b382d558","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"in_reply_to":"f6378a74_e720c853","updated":"2025-02-18 15:56:44.000000000","message":"I noticed that in x/networking-arista - didn\u0027t really find that corner case being a thing - just added it ,,in case\u0027\u0027 - I assume it can be deleted.","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"56208b5ffc55ad79d47724503a5fe1245bdb20ed","unresolved":true,"context_lines":[{"line_number":664,"context_line":"        # If the parent port has been deleted then that delete will handle"},{"line_number":665,"context_line":"        # removing the trunked vlans on the switch using the mac"},{"line_number":666,"context_line":"        if not port:"},{"line_number":667,"context_line":"            LOG.debug(\u0027Discarding attempt to ensure subports on a port\u0027"},{"line_number":668,"context_line":"                      \u0027that has been deleted\u0027)"},{"line_number":669,"context_line":"            return"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        local_link_information \u003d port.bindings[0].profile.get("}],"source_content_type":"text/x-python","patch_set":22,"id":"5ed690f7_d92351a7","line":668,"range":{"start_line":667,"start_character":23,"end_line":668,"end_character":44},"in_reply_to":"fb5aa555_ca9289f5","updated":"2025-02-20 08:38:02.000000000","message":"If theoretically it\u0027s possible and it\u0027s existent in other drivers (see x/networking-arista) - I\u0027d assume we might leave it here.\n@juliaashleykreger@gmail.com agreeable?","commit_id":"1cf14192e91fbdd99be5288dea07a2cf16c4ea12"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7834245f02aedbde538690b49f313cd90381e090","unresolved":true,"context_lines":[{"line_number":407,"context_line":"                          \u0027segment_id\u0027: segmentation_id})"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            provisioning_blocks.provisioning_complete("},{"line_number":410,"context_line":"                context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":411,"context_line":"                GENERIC_SWITCH_ENTITY)"},{"line_number":412,"context_line":"        elif self._is_port_bound(context.original):"},{"line_number":413,"context_line":"            # The port has been unbound. This will cause the local link"}],"source_content_type":"text/x-python","patch_set":27,"id":"a35ead13_fba347e3","line":410,"updated":"2025-02-13 12:40:34.000000000","message":"we need to do this for trunk subports also","commit_id":"298b9ce77f901fc894c35cf8f20fee1c100e8323"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b94b6297ffe298790791054b8b40485635f409db","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                          \u0027segment_id\u0027: segmentation_id})"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            provisioning_blocks.provisioning_complete("},{"line_number":410,"context_line":"                context._plugin_context, port[\u0027id\u0027], resources.PORT,"},{"line_number":411,"context_line":"                GENERIC_SWITCH_ENTITY)"},{"line_number":412,"context_line":"        elif self._is_port_bound(context.original):"},{"line_number":413,"context_line":"            # The port has been unbound. This will cause the local link"}],"source_content_type":"text/x-python","patch_set":27,"id":"5183bcf1_c5eec4c1","line":410,"in_reply_to":"a35ead13_fba347e3","updated":"2025-02-16 12:07:02.000000000","message":"Done","commit_id":"298b9ce77f901fc894c35cf8f20fee1c100e8323"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"d7e809174a99bdaaef38f4d6d3ced0ae546bbccf","unresolved":true,"context_lines":[{"line_number":387,"context_line":"                    plug_kwargs[\"trunk_details\"] \u003d trunk_details"},{"line_number":388,"context_line":"                # Move port to network"},{"line_number":389,"context_line":"                if is_802_3ad:"},{"line_number":390,"context_line":"                    if (trunk_details and not"},{"line_number":391,"context_line":"                            switch.support_trunk_on_bond_ports):"},{"line_number":392,"context_line":"                        raise ngs_exc.GenericSwitchNotSupported("},{"line_number":393,"context_line":"                            \"Trunks are not supported by \""},{"line_number":394,"context_line":"                            \"networking-generic-switch %s.\","},{"line_number":395,"context_line":"                            switch.device_name)"},{"line_number":396,"context_line":"                    switch.plug_bond_to_network(port_id, segmentation_id,"},{"line_number":397,"context_line":"                                                **plug_kwargs)"},{"line_number":398,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":31,"id":"1c7446ac_1620d8f7","line":395,"range":{"start_line":390,"start_character":0,"end_line":395,"end_character":47},"updated":"2025-02-28 11:37:04.000000000","message":"it seems this could safely be moved to the if on L386 and done once.","commit_id":"bcee9e196ea248e6201efe9bd5a7566e2422089b"}],"networking_generic_switch/trunk_driver.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3e1e18d294c00122f29be0eb44a3fb6ab26bee4d","unresolved":true,"context_lines":[{"line_number":75,"context_line":"        self.plugin_driver \u003d plugin_driver"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def subports_added(self, resource, event, trunk_plugin, payload):"},{"line_number":78,"context_line":"        trunk \u003d payload.states[0]"},{"line_number":79,"context_line":"        subports \u003d payload.metadata[\u0027subports\u0027]"},{"line_number":80,"context_line":"        LOG.debug(\"GenericSwitch: subports added %s to trunk %s\","},{"line_number":81,"context_line":"                  subports, trunk)"}],"source_content_type":"text/x-python","patch_set":19,"id":"aa87581f_829d166e","line":78,"updated":"2025-02-02 15:30:22.000000000","message":"need to notify only if port is handled by our driver ie its Baremetal port.","commit_id":"81d314718af5ce3b361396787f446aece98a247a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"03a5edc9578398c4e420d760f3d6eb2dce2e5463","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.plugin_driver \u003d plugin_driver"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def subports_added(self, resource, event, trunk_plugin, payload):"},{"line_number":78,"context_line":"        trunk \u003d payload.states[0]"},{"line_number":79,"context_line":"        subports \u003d payload.metadata[\u0027subports\u0027]"},{"line_number":80,"context_line":"        LOG.debug(\"GenericSwitch: subports added %s to trunk %s\","},{"line_number":81,"context_line":"                  subports, trunk)"}],"source_content_type":"text/x-python","patch_set":19,"id":"a04f9105_6c4bb133","line":78,"in_reply_to":"aa87581f_829d166e","updated":"2025-02-07 18:29:08.000000000","message":"Done","commit_id":"81d314718af5ce3b361396787f446aece98a247a"}],"releasenotes/notes/vlan-aware-vms-3923cc17254829e9.yaml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"f021c776ad09088314ac92109b739b2c5da5a1e8","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support of VLAN aware instances for the following drivers"},{"line_number":5,"context_line":"      * OVS (as refference implementation)"},{"line_number":6,"context_line":"      * AristaEos"},{"line_number":7,"context_line":"      * CiscoIos"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"b5b25526_0cfcddca","line":5,"range":{"start_line":5,"start_character":16,"end_line":5,"end_character":26},"updated":"2025-02-06 14:33:59.000000000","message":"reference","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3f3fd0a86590029810b0f13cab08554579514f88","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support of VLAN aware instances for the following drivers"},{"line_number":5,"context_line":"      * OVS (as refference implementation)"},{"line_number":6,"context_line":"      * AristaEos"},{"line_number":7,"context_line":"      * CiscoIos"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"fcee96e2_4e68645d","line":5,"range":{"start_line":5,"start_character":16,"end_line":5,"end_character":26},"in_reply_to":"b5b25526_0cfcddca","updated":"2025-02-07 15:41:38.000000000","message":"Acknowledged","commit_id":"f8d4bf11823b9aeaaa4f77d7d5da010d39d62db9"}]}
