)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34750,"name":"Karolina Kula","email":"kkula@redhat.com","username":"karolinku"},"change_message_id":"ae050c3417267a76b200afe77ed5bd7f526f441f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6fdce052_dc885177","updated":"2025-04-28 08:37:14.000000000","message":"I encourage anyone who would like to continue working on that patch or need that functionality, since I no longer have capacity to continue it","commit_id":"ed0d8e596012f3f47c78818db63843ed8263d2a1"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"902858bba737806fe6cff1b6c657087809a49198","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"047513ec_5c69760a","updated":"2025-05-13 18:47:47.000000000","message":"For reference my only interest in this change is in it\u0027s relationship to https://review.opendev.org/c/zuul/nodepool/+/944118 via \n https://review.opendev.org/c/openstack/diskimage-builder/+/934045\n\nI don\u0027t have the cycles to complete it.","commit_id":"b3e289e40766ae3b7f2bc3546e0e245461a6408d"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"a35852e0_6a846cdc","updated":"2025-05-22 15:43:06.000000000","message":"Not all of the inline comments are worthy of the -1. I tried to call out where things are just questions or nits vs where I think changes should be made. Let me know if there are any questions.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"}],"glean/cmd.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"eb6f5606e9c02f3410ac345830eaab640b554269","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"daa13bd4_efc86abb","line":89,"updated":"2025-03-24 14:59:20.000000000","message":"Why only CentOS, if the comment says RHEL as well?\nWouldn\u0027t it be better to check for platform_id?\n\n[root@localhost /]# grep PLATFORM_ID /etc/os-release\nPLATFORM_ID\u003d\"platform:el10\"\n\nIt should at least be generic for all el10 platforms (centos, rhel, rocky, alma, whatnot)?","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":34750,"name":"Karolina Kula","email":"kkula@redhat.com","username":"karolinku"},"change_message_id":"ad2579b33950c6ec720299af2230ad7769c396ca","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"8899116d_8be4e506","line":89,"in_reply_to":"46ff953d_98121364","updated":"2025-04-18 14:57:54.000000000","message":"Done","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"75878b73c2c25f912c677c06321fb3e5e3289f65","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"948eb8eb_a737273b","line":89,"in_reply_to":"7566066d_821e0a8a","updated":"2025-04-23 06:30:55.000000000","message":"It should be the same.    I did a quick test on some likely distributions and versions.  You can see the ansible log here: https://paste.opendev.org/show/827541\n\nFor reference the check script was pretty basic: https://paste.opendev.org/show/827542\n\nbut it shows that there shouldn\u0027t be any empty dictionaries","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"e217e4d1e958653b3b9bb00ba87116c94778222d","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3bf48cc7_4d2009c4","line":89,"in_reply_to":"7cad309f_a7871895","updated":"2025-05-22 08:32:34.000000000","message":"Acknowledged","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":34750,"name":"Karolina Kula","email":"kkula@redhat.com","username":"karolinku"},"change_message_id":"e084571fc4fd2dbe8870069aee2ca2831cb43481","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7566066d_821e0a8a","line":89,"in_reply_to":"8899116d_8be4e506","updated":"2025-04-18 16:22:49.000000000","message":"as I expected, distro.os_release_info() output is not consistent between distribution, i.e. empty in Debian","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"feae73537641632894adf3ed07e71106f89ed839","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7cad309f_a7871895","line":89,"in_reply_to":"948eb8eb_a737273b","updated":"2025-04-23 07:05:24.000000000","message":"It occurred to me I could include ubi9 as rhel9\n\nhttps://paste.opendev.org/show/827543","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"18d40823e3d5e4054b67681386950a0f2639cd23","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"centos\" in distro._distro._os_release_info[\"id\"] and \\"},{"line_number":90,"context_line":"       \"10\" in distro._distro._os_release_info[\"version_id\"]:"},{"line_number":91,"context_line":"        keyfiles \u003d True"},{"line_number":92,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":17,"id":"46ff953d_98121364","line":89,"in_reply_to":"daa13bd4_efc86abb","updated":"2025-03-24 15:18:28.000000000","message":"Also distro.os_release_info() will return the release_info dict in via a public facing method. I know we use the vendored distro library, but doing it this way means we can update that vendored library more easily in the future.","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"feae73537641632894adf3ed07e71106f89ed839","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"el10\" in distro.os_release_info()[\"platform_id\"]:"},{"line_number":90,"context_line":"        keyfiles \u003d True"},{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        keyfiles \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"8e082599_7b1391ce","line":89,"range":{"start_line":89,"start_character":17,"end_line":89,"end_character":57},"updated":"2025-04-23 07:05:24.000000000","message":"```\n    if \"el10\" in distro.os_release_info().get(\"platform_id\", \"\"):\n```\n\nwould be better, as os_release_info may not have a platform_id key.\n\n```\n    if \":el\" in distro.os_release_info().get(\"platform_id\", \"\")\\\n            and float(distro.os_release_info().get(\"version_id\", \"0.0\") \u003e\u003d 10.0:\n```\n\nWould cover el10 and later","commit_id":"ed0d8e596012f3f47c78818db63843ed8263d2a1"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"el10\" in distro.os_release_info()[\"platform_id\"]:"},{"line_number":90,"context_line":"        keyfiles \u003d True"},{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        keyfiles \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"72c58f14_f3531233","line":89,"range":{"start_line":89,"start_character":17,"end_line":89,"end_character":57},"in_reply_to":"4f7e3fdf_aca96e45","updated":"2025-05-22 19:14:25.000000000","message":"Acknowledged","commit_id":"ed0d8e596012f3f47c78818db63843ed8263d2a1"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"el10\" in distro.os_release_info()[\"platform_id\"]:"},{"line_number":90,"context_line":"        keyfiles \u003d True"},{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        keyfiles \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"4f7e3fdf_aca96e45","line":89,"range":{"start_line":89,"start_character":17,"end_line":89,"end_character":57},"in_reply_to":"513fbc4c_bdf55f75","updated":"2025-05-22 15:43:06.000000000","message":"Considering how often EL updates and how often the network setup changes for each EL release I think its probably fine as is for now. I want to say that the four releases from 7 to 10 have had 3 different network setups (old school, NM with old school compat, and now NM with keyfiles...)","commit_id":"ed0d8e596012f3f47c78818db63843ed8263d2a1"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"e217e4d1e958653b3b9bb00ba87116c94778222d","unresolved":true,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# Since RHEL10/CentOS 10 keyfiles format configs are madatory"},{"line_number":88,"context_line":"def is_keyfile_format():"},{"line_number":89,"context_line":"    if \"el10\" in distro.os_release_info()[\"platform_id\"]:"},{"line_number":90,"context_line":"        keyfiles \u003d True"},{"line_number":91,"context_line":"    else:"},{"line_number":92,"context_line":"        keyfiles \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"513fbc4c_bdf55f75","line":89,"range":{"start_line":89,"start_character":17,"end_line":89,"end_character":57},"in_reply_to":"8e082599_7b1391ce","updated":"2025-05-22 08:32:34.000000000","message":"I think it\u0027s good for now, unless you want to update that ;-)","commit_id":"ed0d8e596012f3f47c78818db63843ed8263d2a1"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"7adbde1b66f53317700730132a856097bc6e25e4","unresolved":true,"context_lines":[{"line_number":284,"context_line":"        except Exception:"},{"line_number":285,"context_line":"            netmask \u003d utils.ipv4_netmask_length(interface[\u0027netmask\u0027])"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            print(\"ERROR: Invalid netmask format.\")"},{"line_number":288,"context_line":"        results +\u003d \"address1\u003d{address}/{netmask}\\n\".format("},{"line_number":289,"context_line":"            address\u003dinterface[\u0027ip_address\u0027], netmask\u003dnetmask)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"b98bb22b_1ac6486a","line":287,"updated":"2025-05-13 07:05:04.000000000","message":"logging.error?","commit_id":"b3e289e40766ae3b7f2bc3546e0e245461a6408d"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"aeb6bfd5add654b02d8e24c0e22f676fe752f7ab","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        except Exception:"},{"line_number":285,"context_line":"            netmask \u003d utils.ipv4_netmask_length(interface[\u0027netmask\u0027])"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            print(\"ERROR: Invalid netmask format.\")"},{"line_number":288,"context_line":"        results +\u003d \"address1\u003d{address}/{netmask}\\n\".format("},{"line_number":289,"context_line":"            address\u003dinterface[\u0027ip_address\u0027], netmask\u003dnetmask)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"cd5179a7_faf4ca61","line":287,"in_reply_to":"b98bb22b_1ac6486a","updated":"2025-05-21 19:40:09.000000000","message":"Done","commit_id":"b3e289e40766ae3b7f2bc3546e0e245461a6408d"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":19,"context_line":"import contextlib"},{"line_number":20,"context_line":"import copy"},{"line_number":21,"context_line":"import errno"},{"line_number":22,"context_line":"import ipaddress"},{"line_number":23,"context_line":"import json"},{"line_number":24,"context_line":"import logging"},{"line_number":25,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":27,"id":"24ce556c_4557a997","line":22,"updated":"2025-05-22 15:43:06.000000000","message":"https://docs.python.org/3/library/ipaddress.html says this ipaddress module was added with python3.3. I don\u0027t know yet why this works under python2.7 testing, but I suspect it may be due to some non standard backport of the module on our test platforms.\n\nFor max compatibility can we move this import into _write_rh_keyfile_interface() where it is used? We know that we have python3 when writing keyfiles so it should be safe to import it there. Maybe with a comment indicating why this import isn\u0027t occuring at the top level.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import contextlib"},{"line_number":20,"context_line":"import copy"},{"line_number":21,"context_line":"import errno"},{"line_number":22,"context_line":"import ipaddress"},{"line_number":23,"context_line":"import json"},{"line_number":24,"context_line":"import logging"},{"line_number":25,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":27,"id":"37f99b9f_3752e1e1","line":22,"in_reply_to":"24ce556c_4557a997","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    return os.path.exists(file_to_check)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _exists_rh_keyfile_interface(name, distro):"},{"line_number":81,"context_line":"    file_to_check \u003d \\"},{"line_number":82,"context_line":"        \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027.format("},{"line_number":83,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"65ae7078_21c037b2","line":80,"range":{"start_line":80,"start_character":38,"end_line":80,"end_character":45},"updated":"2025-05-22 15:43:06.000000000","message":"This seems to be an unused argument.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    return os.path.exists(file_to_check)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _exists_rh_keyfile_interface(name, distro):"},{"line_number":81,"context_line":"    file_to_check \u003d \\"},{"line_number":82,"context_line":"        \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027.format("},{"line_number":83,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"4027bf2d_218d0cb5","line":80,"range":{"start_line":80,"start_character":38,"end_line":80,"end_character":45},"in_reply_to":"65ae7078_21c037b2","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":269,"context_line":"        \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027.format("},{"line_number":270,"context_line":"            name\u003dname)"},{"line_number":271,"context_line":"    if interface[\u0027type\u0027] \u003d\u003d \u0027ipv6_slaac\u0027 and not interface[\u0027ip_address\u0027] \\"},{"line_number":272,"context_line":"        and interface[\u0027netmask\u0027]:"},{"line_number":273,"context_line":"        results \u003d \"\""},{"line_number":274,"context_line":"        results +\u003d \"[ipv6]\\n\""},{"line_number":275,"context_line":"        results +\u003d \"method\u003dauto\\n\""}],"source_content_type":"text/x-python","patch_set":27,"id":"2e2747ff_c46049a1","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":32},"updated":"2025-05-22 15:43:06.000000000","message":"Does the netmask matter if we\u0027re doing ipv6_slaac and don\u0027t have an ip address? It seems that the output we emit below doesn\u0027t care about the netmask at all.\n\nWe only care about the netmask in the static manually configured ip address scenario.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027.format("},{"line_number":270,"context_line":"            name\u003dname)"},{"line_number":271,"context_line":"    if interface[\u0027type\u0027] \u003d\u003d \u0027ipv6_slaac\u0027 and not interface[\u0027ip_address\u0027] \\"},{"line_number":272,"context_line":"        and interface[\u0027netmask\u0027]:"},{"line_number":273,"context_line":"        results \u003d \"\""},{"line_number":274,"context_line":"        results +\u003d \"[ipv6]\\n\""},{"line_number":275,"context_line":"        results +\u003d \"method\u003dauto\\n\""}],"source_content_type":"text/x-python","patch_set":27,"id":"4609e2bd_0be8c6f1","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":32},"in_reply_to":"2e2747ff_c46049a1","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        try:"},{"line_number":281,"context_line":"            netmask \u003d utils.ipv6_netmask_length(interface[\u0027netmask\u0027])"},{"line_number":282,"context_line":"        except Exception:"},{"line_number":283,"context_line":"            netmask \u003d utils.ipv4_netmask_length(interface[\u0027netmask\u0027])"},{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            logging.error(\"Invalid netmask format %s.\" % interface[\u0027netmask\u0027])"},{"line_number":286,"context_line":"        results +\u003d \"address1\u003d{address}/{netmask}\\n\".format("}],"source_content_type":"text/x-python","patch_set":27,"id":"cdfbc007_b0a51380","line":283,"updated":"2025-05-22 15:43:06.000000000","message":"Why would we use an ipv4 netmask length on an ipv6 interface. That netmask is almost certainly going to be too small as it would range from /0 to /32. A typical ipv6 address case is going to range from /60 to /128.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        try:"},{"line_number":281,"context_line":"            netmask \u003d utils.ipv6_netmask_length(interface[\u0027netmask\u0027])"},{"line_number":282,"context_line":"        except Exception:"},{"line_number":283,"context_line":"            netmask \u003d utils.ipv4_netmask_length(interface[\u0027netmask\u0027])"},{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            logging.error(\"Invalid netmask format %s.\" % interface[\u0027netmask\u0027])"},{"line_number":286,"context_line":"        results +\u003d \"address1\u003d{address}/{netmask}\\n\".format("}],"source_content_type":"text/x-python","patch_set":27,"id":"7736395c_2ce06466","line":283,"in_reply_to":"cdfbc007_b0a51380","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"67c78a69_e647545b","line":403,"updated":"2025-05-22 15:43:06.000000000","message":"Note that in the non keyfile setup we seem to have three choices: auto (dhcp), static, and none. With keyfile we only have two auto and manual. I think the _write_rh_manual case here is intended to map onto the case where you do not want glean configuring the interface so it stubs things out minimally where the auto configuration will ignore it. This way you can manage it however you like elsewhere.\n\nWith keyfiles I\u0027m not sure we\u0027re accomplishing that. We seem to use manual for static configuration elsewhere so I\u0027m wondering if network manager will actually ignore the interface in this case. Maybe it will maybe it won\u0027t. At the very least if this concern is valid it may be worth a comment here. But we may go as far as not writing a config file at all for it?","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"1284249cd0ca44d3102ed95b0c4a534e7de8cdb9","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"09bc9312_bd116065","line":403,"in_reply_to":"07bbdd18_54ed3e50","updated":"2025-05-27 14:56:54.000000000","message":"We can probably proceed with this as is, then if anyone has problems with it they can raise an issue and better describe the necessary use case. I think that since this affects newer platforms only the risk of breaking anything already deployed is very small.\n\nI\u0027ll try to do a proper followup review soon.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c50248439129ab775f1657786b0496c0e4ebc2","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"40b4213a_7cc8f5d8","line":403,"in_reply_to":"09bc9312_bd116065","updated":"2025-06-02 14:25:28.000000000","message":"I think it is reasonable to skip.\n\nIn the ironic model, we don\u0027t expect the data to come across with any furhter level of detail beyond an address/configuration bound to what is the port, or bond0 in this case.\n\nThat includes the code in Nova *and* ironic.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"066a08bc08c5a0a3dd0f881a73be1705e95df535","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7d5d2835_563ed215","line":403,"in_reply_to":"0a1d9439_907b6068","updated":"2025-05-22 19:54:39.000000000","message":"_write_rh_manual() is called when the config drive interface\u0027s type is set to \"manual\". I was interpreting that as \"do not have automated systems configure this address at all and instead allow the user to figure out what they want to do post boot. Basically ignore this interface with glean (though in the centos 9 case we seem to do some super minimal setup).\n\nIf the type \u003d\u003d manual in config drive actually means this is link local then we could use link local. We probably need to see what nova means by manual in this case and then decide from there. Maybe we just don\u0027t write a keyfile at all?","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c1c78348285034b266c9b9c79eb7af55822ac5fb","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"0a1d9439_907b6068","line":403,"in_reply_to":"67c78a69_e647545b","updated":"2025-05-22 19:23:28.000000000","message":"Looks that NetworkManager supports three choices for method (see https://people.freedesktop.org/~lkundrak/nm-docs/nm-settings.html): \n\nIP configuration method. NMSettingIP4Config and NMSettingIP6Config both support \"auto\", \"manual\", and \"link-local\". See the subclass-specific documentation for other values. In general, for the \"auto\" method, properties such as \"dns\" and \"routes\" specify information that is added on to the information returned from automatic configuration. The \"ignore-auto-routes\" and \"ignore-auto-dns\" properties modify this behavior. For methods that imply no upstream network, such as \"shared\" or \"link-local\", these properties must be empty. For IPv4 method \"shared\", the IP subnet can be configured by adding one manual IPv4 address or otherwise 10.42.x.0/24 is chosen.\n\nI would assume switching to link-local here is what we want to do? That should allow to configure the interface to be up, but without ip addressing?","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"79b001efb5453efa0ae4cc391ea28af68b3d08e4","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"8a6907e1_29091cf2","line":403,"in_reply_to":"7d5d2835_563ed215","updated":"2025-05-22 20:19:58.000000000","message":"I found this network_data.json file schema in nova: https://opendev.org/openstack/nova/src/branch/master/doc/api_schemas/network_data.json#L272-L296 unfortunately it does not include manual as a valid value.\n\nLooking in glean\u0027s history we added this code in I30ce988fdb9459267b565b67e8bbce136fcd0249 which seems to support bonded interfaces. I suspect that this may actually be an ironic deviation from the nova spec/schema to support networking for physical nodes that need to bond itnerfaces. The constituent interfaces must be of type manual and then there will be an interface of type bond that bonds them together into something functional. If that hunch is correct then I think what we need to do is minimally configure the interface so that the bond can actually bond things together.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"7e5902ab7f4435a05abb61996d77c08325c91b88","unresolved":true,"context_lines":[{"line_number":400,"context_line":"            \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027 \\"},{"line_number":401,"context_line":"            .format(name\u003dname)"},{"line_number":402,"context_line":"        results \u003d _network_config(args).format("},{"line_number":403,"context_line":"            method\u003d\"manual\", id\u003dname, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":404,"context_line":"    else:"},{"line_number":405,"context_line":"        filename \u003d _network_files(distro)[\"ifcfg\"] + \u0027-{name}\u0027.format("},{"line_number":406,"context_line":"            name\u003dname)"}],"source_content_type":"text/x-python","patch_set":27,"id":"07bbdd18_54ed3e50","line":403,"in_reply_to":"8a6907e1_29091cf2","updated":"2025-05-23 05:50:59.000000000","message":"Well, we are templating it minimal:\n# Automatically generated, do not edit\n[connection]\nid\u003deth5\nuuid\u003d\ntype\u003d802-3-ethernet\n\n[ipv4]\nmethod\u003dmanual\n\n[802-3-ethernet]\nmac_address\u003dbc:76:4e:05:7b:13\nmaster\u003dbond0\nslave-type\u003dbond\n\nWe could skip the ipv4 section for such interface though if that makes any sense.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":422,"context_line":"        \u0027/etc/NetworkManager/system-connections/{name}.nmconnection\u0027.format("},{"line_number":423,"context_line":"            name\u003d_name)"},{"line_number":424,"context_line":"    results \u003d _network_config(args).format("},{"line_number":425,"context_line":"        method\u003d\"manual\", id\u003d_name, mac_address\u003dinterface[\u0027mac_address\u0027])"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    # insert value after specific option using slicing"},{"line_number":428,"context_line":"    address \u003d interface[\u0027ip_address\u0027] + \"/\" + interface[\u0027netmask\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"bbd21e38_214c93a5","line":425,"updated":"2025-05-22 15:43:06.000000000","message":"See the comment above. This is why I think manual maps to static in the keyfile network manager world.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":433,"context_line":"        \"\\n\" + results[match.end():]"},{"line_number":434,"context_line":"    results +\u003d _set_rh_vlan(_name, interface, distro)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    # TBD - implement bonding option"},{"line_number":437,"context_line":"    results \u003d _set_rh_bonding(_name, interface, distro, results)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    # format:comma separated list of routes in [ipv4]"}],"source_content_type":"text/x-python","patch_set":27,"id":"24f42455_a4d4cdbe","line":436,"range":{"start_line":436,"start_character":4,"end_line":436,"end_character":36},"updated":"2025-05-22 15:43:06.000000000","message":"I think bonding does have an implementation now and this comment can be removed.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":433,"context_line":"        \"\\n\" + results[match.end():]"},{"line_number":434,"context_line":"    results +\u003d _set_rh_vlan(_name, interface, distro)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    # TBD - implement bonding option"},{"line_number":437,"context_line":"    results \u003d _set_rh_bonding(_name, interface, distro, results)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    # format:comma separated list of routes in [ipv4]"}],"source_content_type":"text/x-python","patch_set":27,"id":"c22e6f92_0401bb58","line":436,"range":{"start_line":436,"start_character":4,"end_line":436,"end_character":36},"in_reply_to":"24f42455_a4d4cdbe","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"}],"glean/init/glean@.service":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"18d40823e3d5e4054b67681386950a0f2639cd23","unresolved":true,"context_lines":[{"line_number":16,"context_line":"Type\u003doneshot"},{"line_number":17,"context_line":"User\u003droot"},{"line_number":18,"context_line":"Environment\u003d\"ARGS\u003d--interface %I\""},{"line_number":19,"context_line":"ExecStartPre\u003d%%GLEAN_SCRIPTS_DIR%%/python-glean --debug %%EXTRA_ARGS%% ${ARGS}"},{"line_number":20,"context_line":"ExecStart\u003d/sbin/ifup %I"},{"line_number":21,"context_line":"RemainAfterExit\u003dtrue"},{"line_number":22,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"8b1a2367_99cb0cc6","line":19,"range":{"start_line":19,"start_character":48,"end_line":19,"end_character":55},"updated":"2025-03-24 15:18:28.000000000","message":"We shouldn\u0027t run with `--debug` on by default. Can we clean this up now that the change is working?","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":34750,"name":"Karolina Kula","email":"kkula@redhat.com","username":"karolinku"},"change_message_id":"ad2579b33950c6ec720299af2230ad7769c396ca","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Type\u003doneshot"},{"line_number":17,"context_line":"User\u003droot"},{"line_number":18,"context_line":"Environment\u003d\"ARGS\u003d--interface %I\""},{"line_number":19,"context_line":"ExecStartPre\u003d%%GLEAN_SCRIPTS_DIR%%/python-glean --debug %%EXTRA_ARGS%% ${ARGS}"},{"line_number":20,"context_line":"ExecStart\u003d/sbin/ifup %I"},{"line_number":21,"context_line":"RemainAfterExit\u003dtrue"},{"line_number":22,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"f2c5cabd_6932ea69","line":19,"range":{"start_line":19,"start_character":48,"end_line":19,"end_character":55},"in_reply_to":"8b1a2367_99cb0cc6","updated":"2025-04-18 14:57:54.000000000","message":"Done","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"}],"glean/tests/test_glean.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"18d40823e3d5e4054b67681386950a0f2639cd23","unresolved":true,"context_lines":[{"line_number":32,"context_line":"    os.path.dirname(os.path.realpath(__file__)), \u0027fixtures\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"distros \u003d [\u0027Ubuntu\u0027, \u0027Debian\u0027, \u0027Fedora\u0027, \u0027RedHat\u0027, \u0027CentOS\u0027, \u0027Gentoo\u0027,"},{"line_number":35,"context_line":"           \u0027openSUSE\u0027, \u0027networkd\u0027, \u0027Rocky\u0027]"},{"line_number":36,"context_line":"styles \u003d [\u0027hp\u0027, \u0027rax\u0027, \u0027rax-iad\u0027, \u0027liberty\u0027, \u0027nokey\u0027, \u0027vexxhost\u0027]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"ips \u003d {\u0027hp\u0027: \u0027127.0.1.1\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"c9353253_b72cbe8e","line":35,"updated":"2025-03-24 15:18:28.000000000","message":"It would be good if we could expand the distros list to cover centos 10/rhel10/etc. We do have fairly extensive unittesting via the scenarios generated below, but none for the new keyfile behavior.","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"aeb6bfd5add654b02d8e24c0e22f676fe752f7ab","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    os.path.dirname(os.path.realpath(__file__)), \u0027fixtures\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"distros \u003d [\u0027Ubuntu\u0027, \u0027Debian\u0027, \u0027Fedora\u0027, \u0027RedHat\u0027, \u0027CentOS\u0027, \u0027Gentoo\u0027,"},{"line_number":35,"context_line":"           \u0027openSUSE\u0027, \u0027networkd\u0027, \u0027Rocky\u0027]"},{"line_number":36,"context_line":"styles \u003d [\u0027hp\u0027, \u0027rax\u0027, \u0027rax-iad\u0027, \u0027liberty\u0027, \u0027nokey\u0027, \u0027vexxhost\u0027]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"ips \u003d {\u0027hp\u0027: \u0027127.0.1.1\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"409d6526_f2bbf71f","line":35,"in_reply_to":"c9353253_b72cbe8e","updated":"2025-05-21 19:40:09.000000000","message":"Done","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"18d40823e3d5e4054b67681386950a0f2639cd23","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        # default args"},{"line_number":212,"context_line":"        argv \u003d [\u0027--hostname\u0027]"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        argv.append(\u0027--distro\u003d%s\u0027 % distro.lower())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if interface:"},{"line_number":217,"context_line":"            argv.append(\u0027--interface\u003d%s\u0027 % interface)"}],"source_content_type":"text/x-python","patch_set":17,"id":"57b8a5bb_eb5069f9","line":214,"updated":"2025-03-24 15:18:28.000000000","message":"This `distro.lower()` string comes from the scenarios generated above then we use that to override the autodetected distro when running the glean command. Maybe we can do something like have distro values like `CentOS-10`, detect that string before this line and rewrite to `CentOS`, then patch the vendored distro library\u0027s os release info to return the version we look for in keyfile tests?","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"aeb6bfd5add654b02d8e24c0e22f676fe752f7ab","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        # default args"},{"line_number":212,"context_line":"        argv \u003d [\u0027--hostname\u0027]"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        argv.append(\u0027--distro\u003d%s\u0027 % distro.lower())"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if interface:"},{"line_number":217,"context_line":"            argv.append(\u0027--interface\u003d%s\u0027 % interface)"}],"source_content_type":"text/x-python","patch_set":17,"id":"d22373c4_89da7ba8","line":214,"in_reply_to":"57b8a5bb_eb5069f9","updated":"2025-05-21 19:40:09.000000000","message":"Done","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"built_scenarios \u003d []"},{"line_number":56,"context_line":"for distrib in distros:"},{"line_number":57,"context_line":"    for style in styles:"},{"line_number":58,"context_line":"        built_scenarios.append("},{"line_number":59,"context_line":"            (\u0027%s-%s\u0027 % (distrib, style),"}],"source_content_type":"text/x-python","patch_set":27,"id":"2051c218_3b7469f3","line":56,"updated":"2025-05-22 15:43:06.000000000","message":"Just a nit that if we don\u0027t change distro to distrib we should end up with a smaller diff.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"bbd8a9400c222427966b8e66f27e2cc1e4b3cf9f","unresolved":true,"context_lines":[{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"built_scenarios \u003d []"},{"line_number":56,"context_line":"for distrib in distros:"},{"line_number":57,"context_line":"    for style in styles:"},{"line_number":58,"context_line":"        built_scenarios.append("},{"line_number":59,"context_line":"            (\u0027%s-%s\u0027 % (distrib, style),"}],"source_content_type":"text/x-python","patch_set":27,"id":"57a77367_f23e8677","line":56,"in_reply_to":"2051c218_3b7469f3","updated":"2025-05-22 15:49:37.000000000","message":"pep8 was complaining about shadowed variable distro, but we could import vendored distro under a different name - I\u0027ll try it out.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"built_scenarios \u003d []"},{"line_number":56,"context_line":"for distrib in distros:"},{"line_number":57,"context_line":"    for style in styles:"},{"line_number":58,"context_line":"        built_scenarios.append("},{"line_number":59,"context_line":"            (\u0027%s-%s\u0027 % (distrib, style),"}],"source_content_type":"text/x-python","patch_set":27,"id":"e43d9e41_1e0831aa","line":56,"in_reply_to":"57a77367_f23e8677","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":226,"context_line":"                use_nm \u003d True"},{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            version \u003d None"},{"line_number":229,"context_line":"            mock_vendor_linux_distribution.return_value \u003d [distrib]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # default args"},{"line_number":232,"context_line":"        argv \u003d [\u0027--hostname\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"47f6763e_cf7f65e2","line":229,"updated":"2025-05-22 15:43:06.000000000","message":"Note the default return value for mock_is_keyfile is False so we don\u0027t need to set the return value here.","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                use_nm \u003d True"},{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            version \u003d None"},{"line_number":229,"context_line":"            mock_vendor_linux_distribution.return_value \u003d [distrib]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # default args"},{"line_number":232,"context_line":"        argv \u003d [\u0027--hostname\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"ed26518a_aa5eb44c","line":229,"in_reply_to":"47f6763e_cf7f65e2","updated":"2025-05-22 19:14:25.000000000","message":"Unfortunately we do, when removed we get:\n\nFAIL: glean.tests.test_glean.TestGlean.test_glean_systemd_resolved(Ubuntu-rax-iad)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/var/home/mnasiadka/dev/opendev/glean/glean/tests/test_glean.py\", line 336, in test_glean_systemd_resolved\n    self._assert_distro_provider(self.distrib, self.style,\n  File \"/usr/lib64/python3.12/unittest/mock.py\", line 1396, in patched\n    return func(*newargs, **newkeywargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/var/home/mnasiadka/dev/opendev/glean/glean/tests/test_glean.py\", line 243, in _assert_distro_provider\n    cmd.main(argv)\n  File \"/var/home/mnasiadka/dev/opendev/glean/glean/cmd.py\", line 1771, in main\n    _distro \u003d distro.linux_distribution(\n              ^^^^^^^^^^^^^^^^^^^^^^^^^^\nTypeError: \u0027Mock\u0027 object is not subscriptable`","commit_id":"5064b91435e1502cebe83f2ae2f22a90133b6d88"}],"test-requirements.txt":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"18d40823e3d5e4054b67681386950a0f2639cd23","unresolved":true,"context_lines":[{"line_number":2,"context_line":"# of appearance. Changing the order has an impact on the overall integration"},{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d2.0.0"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"coverage\u003e\u003d3.6"},{"line_number":8,"context_line":"mock\u003e\u003d1.0;python_version\u003d\u003d\u00272.7\u0027"}],"source_content_type":"text/plain","patch_set":17,"id":"2297a569_6a9d4d9d","line":5,"updated":"2025-03-24 15:18:28.000000000","message":"Hacking should always be capped to a major version to prevent unexpected application of new rules. Maybe do something like `\u003c8.0.0` as 7.0.0 is current and what we should be running against.","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"},{"author":{"_account_id":34750,"name":"Karolina Kula","email":"kkula@redhat.com","username":"karolinku"},"change_message_id":"ad2579b33950c6ec720299af2230ad7769c396ca","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# of appearance. Changing the order has an impact on the overall integration"},{"line_number":3,"context_line":"# process, which may cause wedges in the gate later."},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"hacking\u003e\u003d2.0.0"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"coverage\u003e\u003d3.6"},{"line_number":8,"context_line":"mock\u003e\u003d1.0;python_version\u003d\u003d\u00272.7\u0027"}],"source_content_type":"text/plain","patch_set":17,"id":"5cda7183_26a036a3","line":5,"in_reply_to":"2297a569_6a9d4d9d","updated":"2025-04-18 14:57:54.000000000","message":"Done","commit_id":"b642ddb2fa05c958f163b0480863c35d769dffa5"}],"tox.ini":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"94d364f932b2fa7d4c5a627488d5f55e7391d825","unresolved":true,"context_lines":[{"line_number":1,"context_line":"[tox]"},{"line_number":2,"context_line":"minversion \u003d 1.6"},{"line_number":3,"context_line":"envlist \u003d py36,py35,py27,pypy,pep8"},{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[testenv]"}],"source_content_type":"text/x-properties","patch_set":27,"id":"65a77f22_f07693eb","side":"PARENT","line":3,"range":{"start_line":3,"start_character":19,"end_line":3,"end_character":24},"updated":"2025-05-22 15:43:06.000000000","message":"Nit we\u0027re still running python27 CI jobs. That said I don\u0027t think removing it from the default tox envlist is a big deal. CI will complain if something goes wrong and then we can run the tests explicitly under python2.7 locally if necessary.","commit_id":"2ba5c62d790d5f2440356eef027954e2618a1045"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"dd4fa03fd1172f788d5dca379c1c9f9eb1c1b619","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[tox]"},{"line_number":2,"context_line":"minversion \u003d 1.6"},{"line_number":3,"context_line":"envlist \u003d py36,py35,py27,pypy,pep8"},{"line_number":4,"context_line":"skipsdist \u003d True"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[testenv]"}],"source_content_type":"text/x-properties","patch_set":27,"id":"ebef5ba1_c62caba6","side":"PARENT","line":3,"range":{"start_line":3,"start_character":19,"end_line":3,"end_character":24},"in_reply_to":"65a77f22_f07693eb","updated":"2025-05-22 19:14:25.000000000","message":"Done","commit_id":"2ba5c62d790d5f2440356eef027954e2618a1045"}]}
