)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"0d5e8652d13927c1305de6319793e8d371ecad93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a08b0c02_cd0be1d3","updated":"2022-02-24 15:57:32.000000000","message":"All looks good to me, only a few little things suggested.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"03690d7b_9dae84f8","updated":"2022-02-22 17:22:58.000000000","message":"thanks for the comments, Arkady!","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"}],"neutron_tempest_plugin/scenario/test_dhcp.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c34d631d1cb5defc9d77dbb98a1cb197cbe70df3","unresolved":true,"context_lines":[{"line_number":134,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":135,"context_line":"            device_owner\u003d\u0027network:dhcp\u0027)[\u0027ports\u0027][0]"},{"line_number":136,"context_line":"        old_dhcp_port_ip \u003d dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":137,"context_line":"        new_dhcp_port_ip \u003d str(cidr[int(old_dhcp_port_ip.split(\u0027.\u0027)[-1]) + 1])"},{"line_number":138,"context_line":"        self.update_port(port\u003ddhcp_port,"},{"line_number":139,"context_line":"                         fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":140,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"}],"source_content_type":"text/x-python","patch_set":1,"id":"c25649b6_ee98481e","line":137,"range":{"start_line":137,"start_character":27,"end_line":137,"end_character":78},"updated":"2022-02-04 10:06:00.000000000","message":"Now you have imported netaddr here, you can use it. This is more robust:\n\nold_dhcp_port_ip \u003d netaddr.IPAddress(dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027])\nnew_dhcp_port_ip \u003d str(old_dhcp_port_ip + 1)","commit_id":"585f74ef991c4795ebbb32ea1c65a0bf42922628"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"29708c7e435f7e49b616150816d6fe1c3d93604c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":135,"context_line":"            device_owner\u003d\u0027network:dhcp\u0027)[\u0027ports\u0027][0]"},{"line_number":136,"context_line":"        old_dhcp_port_ip \u003d dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":137,"context_line":"        new_dhcp_port_ip \u003d str(cidr[int(old_dhcp_port_ip.split(\u0027.\u0027)[-1]) + 1])"},{"line_number":138,"context_line":"        self.update_port(port\u003ddhcp_port,"},{"line_number":139,"context_line":"                         fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":140,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3251a9e4_915da6a0","line":137,"range":{"start_line":137,"start_character":27,"end_line":137,"end_character":78},"in_reply_to":"c25649b6_ee98481e","updated":"2022-02-09 08:58:00.000000000","message":"Done","commit_id":"585f74ef991c4795ebbb32ea1c65a0bf42922628"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c34d631d1cb5defc9d77dbb98a1cb197cbe70df3","unresolved":true,"context_lines":[{"line_number":155,"context_line":"        fip \u003d self.create_floatingip(port_id\u003dserver_port[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # check connectivity"},{"line_number":158,"context_line":"        self.check_connectivity(fip[\u0027floating_ip_address\u0027],"},{"line_number":159,"context_line":"                                CONF.validation.image_ssh_user,"},{"line_number":160,"context_line":"                                self.keypair[\u0027private_key\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"e8c94c6f_ba136aed","line":158,"range":{"start_line":158,"start_character":13,"end_line":158,"end_character":31},"updated":"2022-02-04 10:06:00.000000000","message":"+1\n\nIf we don\u0027t have connectivity, this method will print the VM console (and the added routes). That will give us information about the correct (or incorrect) routes.","commit_id":"585f74ef991c4795ebbb32ea1c65a0bf42922628"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"29708c7e435f7e49b616150816d6fe1c3d93604c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        fip \u003d self.create_floatingip(port_id\u003dserver_port[\u0027id\u0027])"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        # check connectivity"},{"line_number":158,"context_line":"        self.check_connectivity(fip[\u0027floating_ip_address\u0027],"},{"line_number":159,"context_line":"                                CONF.validation.image_ssh_user,"},{"line_number":160,"context_line":"                                self.keypair[\u0027private_key\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"871867c6_a812c883","line":158,"range":{"start_line":158,"start_character":13,"end_line":158,"end_character":31},"in_reply_to":"e8c94c6f_ba136aed","updated":"2022-02-09 08:58:00.000000000","message":"Ack","commit_id":"585f74ef991c4795ebbb32ea1c65a0bf42922628"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f32cd17ef633a04ede53db8a4510cf655a147dd7","unresolved":true,"context_lines":[{"line_number":154,"context_line":"        Related bug: LP#1942794"},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":157,"context_line":"        cidr_str \u003d \u0027192.168.1.0/24\u0027"},{"line_number":158,"context_line":"        subnet \u003d self.create_subnet("},{"line_number":159,"context_line":"            network\u003dself.network, cidr\u003dcidr_str, name\u003dself.rand_name)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"921f4922_a7b0fbd9","line":157,"updated":"2022-02-04 17:33:28.000000000","message":"Don\u0027t think you need to pass a cidr, one will be chosen if not. Also, the create_subnet() can be in resource_setup() as in above class, and self.subnet can be used, right?","commit_id":"e07a7de6f2764e19d1399af4a7778f9dbfe48e77"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"29708c7e435f7e49b616150816d6fe1c3d93604c","unresolved":true,"context_lines":[{"line_number":154,"context_line":"        Related bug: LP#1942794"},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":157,"context_line":"        cidr_str \u003d \u0027192.168.1.0/24\u0027"},{"line_number":158,"context_line":"        subnet \u003d self.create_subnet("},{"line_number":159,"context_line":"            network\u003dself.network, cidr\u003dcidr_str, name\u003dself.rand_name)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0ed4159c_fd7c0306","line":157,"in_reply_to":"921f4922_a7b0fbd9","updated":"2022-02-09 08:58:00.000000000","message":"I decided to create the subnet in the test because it needs an exclusive subnet for itself, in case other tests are added to this class.","commit_id":"e07a7de6f2764e19d1399af4a7778f9dbfe48e77"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f32cd17ef633a04ede53db8a4510cf655a147dd7","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        # modify DHCP port IP address"},{"line_number":168,"context_line":"        old_dhcp_port_ip \u003d netaddr.IPAddress("},{"line_number":169,"context_line":"            dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027])"},{"line_number":170,"context_line":"        new_dhcp_port_ip \u003d str(old_dhcp_port_ip + 1)"},{"line_number":171,"context_line":"        self.update_port(port\u003ddhcp_port,"},{"line_number":172,"context_line":"                         fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":173,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"}],"source_content_type":"text/x-python","patch_set":3,"id":"a84f92b2_12f5a629","line":170,"updated":"2022-02-04 17:33:28.000000000","message":"This should typically work, but there is always the %.00001 chance that +1 is outside the subnet range. Just a random thought.","commit_id":"e07a7de6f2764e19d1399af4a7778f9dbfe48e77"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6fd8f5ab260df8c83871da80127128a74e5ef5cd","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        # modify DHCP port IP address"},{"line_number":168,"context_line":"        old_dhcp_port_ip \u003d netaddr.IPAddress("},{"line_number":169,"context_line":"            dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027])"},{"line_number":170,"context_line":"        new_dhcp_port_ip \u003d str(old_dhcp_port_ip + 1)"},{"line_number":171,"context_line":"        self.update_port(port\u003ddhcp_port,"},{"line_number":172,"context_line":"                         fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":173,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"}],"source_content_type":"text/x-python","patch_set":3,"id":"abb5f539_e8676674","line":170,"in_reply_to":"5848459d_ab8fb8c0","updated":"2022-02-04 18:45:30.000000000","message":"Yes, the default ipam code will do that. I only pointed it out since we\u0027ve been bitten by such assumptions before.","commit_id":"e07a7de6f2764e19d1399af4a7778f9dbfe48e77"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"28089b48fd4f0d879bc0c920e7c851ddf1e59a59","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        # modify DHCP port IP address"},{"line_number":168,"context_line":"        old_dhcp_port_ip \u003d netaddr.IPAddress("},{"line_number":169,"context_line":"            dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027])"},{"line_number":170,"context_line":"        new_dhcp_port_ip \u003d str(old_dhcp_port_ip + 1)"},{"line_number":171,"context_line":"        self.update_port(port\u003ddhcp_port,"},{"line_number":172,"context_line":"                         fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":173,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"}],"source_content_type":"text/x-python","patch_set":3,"id":"5848459d_ab8fb8c0","line":170,"in_reply_to":"a84f92b2_12f5a629","updated":"2022-02-04 18:02:34.000000000","message":"By default, the DHCP port will be the first free IP in the CIDR","commit_id":"e07a7de6f2764e19d1399af4a7778f9dbfe48e77"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"29708c7e435f7e49b616150816d6fe1c3d93604c","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        # modify DHCP port IP address"},{"line_number":168,"context_line":"        old_dhcp_port_ip \u003d netaddr.IPAddress("},{"line_number":169,"context_line":"            dhcp_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027])"},{"line_number":170,"context_line":"        new_dhcp_port_ip \u003d str(old_dhcp_port_ip + 1)"},{"line_number":171,"context_line":"        self.update_port(port\u003ddhcp_port,"},{"line_number":172,"context_line":"                         fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":173,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"}],"source_content_type":"text/x-python","patch_set":3,"id":"6339dc9f_845e8231","line":170,"in_reply_to":"abb5f539_e8676674","updated":"2022-02-09 08:58:00.000000000","message":"Done","commit_id":"e07a7de6f2764e19d1399af4a7778f9dbfe48e77"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":98,"context_line":"            raise"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class DHCPPortUpdateTest(base.BaseTempestTestCase):"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf564e14_b984f71c","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":51},"updated":"2022-02-21 10:41:17.000000000","message":"I\u0027m curious why do we need a dedicated class for this test.\nIs that because of concurrency tests execution?\nMaybe common \"cls\" resources we don\u0027t want to override within this test?\nWhy not adding this test to \"DHCPTest\" class?","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            raise"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class DHCPPortUpdateTest(base.BaseTempestTestCase):"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"31a83fad_a2efa718","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":51},"in_reply_to":"bf564e14_b984f71c","updated":"2022-02-22 17:22:58.000000000","message":"It\u0027s to not share resources that would be modified by this test, more specifically the subnet.\nThe DHCPTest class uses a subnet for its tests.\nThe new test test_modify_dhcp_port_ip_address modifies the DHCP port from its subnet and that could affect other tests sharing the same subnet. That\u0027s the reason why this test was created on a different class.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fe02de98a969948805467ce85ae183a519177a54","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        cls.create_pingable_secgroup_rule(cls.security_group[\u0027id\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @testtools.skipUnless("},{"line_number":118,"context_line":"        CONF.neutron_plugin_options.firewall_driver \u003d\u003d \u0027ovn\u0027,"},{"line_number":119,"context_line":"        \"OVN driver is required to run this test - \""},{"line_number":120,"context_line":"        \"LP#1942794 solution only applied to OVN\")"},{"line_number":121,"context_line":"    @decorators.idempotent_id(\u00278171cc68-9dbb-46ca-b065-17b5b2e26094\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"294b654a_accf09fe","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":60},"updated":"2022-02-28 09:18:26.000000000","message":"+1, this feature is only available in OVN","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"0d5e8652d13927c1305de6319793e8d371ecad93","unresolved":true,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        For the step 3), the server needs to obtain ssh keys from the metadata"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        Related bug: LP#1942794"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":134,"context_line":"        subnet \u003d self.create_subnet(network\u003dself.network, name\u003dself.rand_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"077e41b5_11eb3dbf","line":131,"updated":"2022-02-24 15:57:32.000000000","message":"I couldn\u0027t find the bug using this number, is this the correct number?","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"63017974a4e0be393453ac06af41689c1c26624f","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        For the step 3), the server needs to obtain ssh keys from the metadata"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        Related bug: LP#1942794"},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":134,"context_line":"        subnet \u003d self.create_subnet(network\u003dself.network, name\u003dself.rand_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ab82623d_2f729bb2","line":131,"in_reply_to":"077e41b5_11eb3dbf","updated":"2022-02-24 16:15:31.000000000","message":"Found it, correct number.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":134,"context_line":"        subnet \u003d self.create_subnet(network\u003dself.network, name\u003dself.rand_name)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        def _get_dhcp_ports():"},{"line_number":137,"context_line":"            # in some cases, like ML2/OVS, the subnet port associated to DHCP"},{"line_number":138,"context_line":"            # is created with device_owner\u003d\u0027network:dhcp\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"c1a2d3a3_11a93e40","line":135,"updated":"2022-02-21 10:41:17.000000000","message":"Don\u0027t we need a cleanup for created subnet? \nself.addCleanup(self.admin_client.delete_subnet, ...","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":134,"context_line":"        subnet \u003d self.create_subnet(network\u003dself.network, name\u003dself.rand_name)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        def _get_dhcp_ports():"},{"line_number":137,"context_line":"            # in some cases, like ML2/OVS, the subnet port associated to DHCP"},{"line_number":138,"context_line":"            # is created with device_owner\u003d\u0027network:dhcp\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"2de594c3_2ee54e0a","line":135,"in_reply_to":"c1a2d3a3_11a93e40","updated":"2022-02-22 17:22:58.000000000","message":"No. That is not necessary.\n\nThe create_subnet method appends the new subnet to the cls.subnets list here: https://opendev.org/openstack/neutron-tempest-plugin/src/commit/d2ecabb4fc1f35aa6374260f8b89cea0c467534b/neutron_tempest_plugin/api/base.py#L485-L490\n\nAt the end of the test execution, the resource_cleanup method deletes all the subnets created before (among other resources): https://opendev.org/openstack/neutron-tempest-plugin/src/commit/d2ecabb4fc1f35aa6374260f8b89cea0c467534b/neutron_tempest_plugin/api/base.py#L214","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":133,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":134,"context_line":"        subnet \u003d self.create_subnet(network\u003dself.network, name\u003dself.rand_name)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        def _get_dhcp_ports():"},{"line_number":137,"context_line":"            # in some cases, like ML2/OVS, the subnet port associated to DHCP"},{"line_number":138,"context_line":"            # is created with device_owner\u003d\u0027network:dhcp\u0027"},{"line_number":139,"context_line":"            dhcp_ports \u003d self.client.list_ports("}],"source_content_type":"text/x-python","patch_set":5,"id":"f89e8942_29ea831d","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":30},"updated":"2022-02-21 10:41:17.000000000","message":"Any special reason for having this function as an inner function?\nCould it be that in the future some other tests will need the functionality it provides?\nIf so, then having it under the class would be better approach.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        # create subnet (dhcp is enabled by default)"},{"line_number":134,"context_line":"        subnet \u003d self.create_subnet(network\u003dself.network, name\u003dself.rand_name)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        def _get_dhcp_ports():"},{"line_number":137,"context_line":"            # in some cases, like ML2/OVS, the subnet port associated to DHCP"},{"line_number":138,"context_line":"            # is created with device_owner\u003d\u0027network:dhcp\u0027"},{"line_number":139,"context_line":"            dhcp_ports \u003d self.client.list_ports("}],"source_content_type":"text/x-python","patch_set":5,"id":"9c16c118_48c2c495","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":30},"in_reply_to":"f89e8942_29ea831d","updated":"2022-02-22 17:22:58.000000000","message":"I don\u0027t think other tests will need to use this function, but I may be wrong.\nAnyway, in case of adding new tests that need the function it could just be move under the class, as you suggest, in the patch that adds those tests.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":144,"context_line":"            distributed_ports \u003d self.client.list_ports("},{"line_number":145,"context_line":"                network_id\u003dself.network[\u0027id\u0027],"},{"line_number":146,"context_line":"                device_owner\u003dconstants.DEVICE_OWNER_DISTRIBUTED)[\u0027ports\u0027]"},{"line_number":147,"context_line":"            self.dhcp_ports \u003d dhcp_ports + distributed_ports"},{"line_number":148,"context_line":"            self.assertLessEqual("},{"line_number":149,"context_line":"                len(self.dhcp_ports), 1, msg\u003d\u0027Only one port was expected\u0027)"},{"line_number":150,"context_line":"            return len(self.dhcp_ports) \u003d\u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"3d5eeb65_bada88a9","line":147,"range":{"start_line":147,"start_character":12,"end_line":147,"end_character":27},"updated":"2022-02-21 10:41:17.000000000","message":"I\u0027m curious about using of \"self\" here, what\u0027s the purpose?\nCould it be something like dhcp_and_distributed_ports instead of \"self.dhcp_ports\"?","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            distributed_ports \u003d self.client.list_ports("},{"line_number":145,"context_line":"                network_id\u003dself.network[\u0027id\u0027],"},{"line_number":146,"context_line":"                device_owner\u003dconstants.DEVICE_OWNER_DISTRIBUTED)[\u0027ports\u0027]"},{"line_number":147,"context_line":"            self.dhcp_ports \u003d dhcp_ports + distributed_ports"},{"line_number":148,"context_line":"            self.assertLessEqual("},{"line_number":149,"context_line":"                len(self.dhcp_ports), 1, msg\u003d\u0027Only one port was expected\u0027)"},{"line_number":150,"context_line":"            return len(self.dhcp_ports) \u003d\u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"da301cfb_f256f908","line":147,"range":{"start_line":147,"start_character":12,"end_line":147,"end_character":27},"in_reply_to":"3d5eeb65_bada88a9","updated":"2022-02-22 17:22:58.000000000","message":"I had to use self to access to its value in the line number #160","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"0d5e8652d13927c1305de6319793e8d371ecad93","unresolved":true,"context_lines":[{"line_number":145,"context_line":"                network_id\u003dself.network[\u0027id\u0027],"},{"line_number":146,"context_line":"                device_owner\u003dconstants.DEVICE_OWNER_DISTRIBUTED)[\u0027ports\u0027]"},{"line_number":147,"context_line":"            self.dhcp_ports \u003d dhcp_ports + distributed_ports"},{"line_number":148,"context_line":"            self.assertLessEqual("},{"line_number":149,"context_line":"                len(self.dhcp_ports), 1, msg\u003d\u0027Only one port was expected\u0027)"},{"line_number":150,"context_line":"            return len(self.dhcp_ports) \u003d\u003d 1"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"d7b33977_6eb4b6ec","line":148,"updated":"2022-02-24 15:57:32.000000000","message":"This \"assertLessEqual\" and message also caught my eye, it is more obvious after reading all the code but not when naturally reading top to bottom or a few lines only, I saw that Arkady also mentioned it.\n\nMaybe adding a comment line above explaining the port creation expected delay (0 and 1 expected values) will be helpful, so nobody will misunderstand this, accidentally try proposing an unnecessary fix patch in the future.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"1a3bc4f8c0bfe315199ea6c597af20e375a6c4a8","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                network_id\u003dself.network[\u0027id\u0027],"},{"line_number":146,"context_line":"                device_owner\u003dconstants.DEVICE_OWNER_DISTRIBUTED)[\u0027ports\u0027]"},{"line_number":147,"context_line":"            self.dhcp_ports \u003d dhcp_ports + distributed_ports"},{"line_number":148,"context_line":"            self.assertLessEqual("},{"line_number":149,"context_line":"                len(self.dhcp_ports), 1, msg\u003d\u0027Only one port was expected\u0027)"},{"line_number":150,"context_line":"            return len(self.dhcp_ports) \u003d\u003d 1"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"d8810d5c_e8c95099","line":148,"in_reply_to":"d7b33977_6eb4b6ec","updated":"2022-02-28 08:55:00.000000000","message":"Ack\nI think you are right and a comment clarifying why 0 is ok would help.\n\nNote:\n  - 0 is ok because we may need to retry until 1 is obtained\n  - 1 is the expected value\n  - more than 1 is an error and an exception should be raised","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":146,"context_line":"                device_owner\u003dconstants.DEVICE_OWNER_DISTRIBUTED)[\u0027ports\u0027]"},{"line_number":147,"context_line":"            self.dhcp_ports \u003d dhcp_ports + distributed_ports"},{"line_number":148,"context_line":"            self.assertLessEqual("},{"line_number":149,"context_line":"                len(self.dhcp_ports), 1, msg\u003d\u0027Only one port was expected\u0027)"},{"line_number":150,"context_line":"            return len(self.dhcp_ports) \u003d\u003d 1"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # obtain the dhcp port"}],"source_content_type":"text/x-python","patch_set":5,"id":"0e0957d5_0d1189e7","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":72},"updated":"2022-02-21 10:41:17.000000000","message":"\"assertLessEqual\" will be in silence for for 0 and 1, so that the \"msg\" here is a bit misleading.\nI mean, it sounds more reasonable for \"assertEqual\".","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                device_owner\u003dconstants.DEVICE_OWNER_DISTRIBUTED)[\u0027ports\u0027]"},{"line_number":147,"context_line":"            self.dhcp_ports \u003d dhcp_ports + distributed_ports"},{"line_number":148,"context_line":"            self.assertLessEqual("},{"line_number":149,"context_line":"                len(self.dhcp_ports), 1, msg\u003d\u0027Only one port was expected\u0027)"},{"line_number":150,"context_line":"            return len(self.dhcp_ports) \u003d\u003d 1"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # obtain the dhcp port"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a33fd04_8d17f618","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":72},"in_reply_to":"0e0957d5_0d1189e7","updated":"2022-02-22 17:22:58.000000000","message":"I think it is correct:\n- more than one port: something went wrong, raise an exception and the test fails\n- 1 port: it is ok, return True (see line #150) -\u003e exit successfully from the wait_until_true call (line #157)\n- 0 ports: it\u0027s not ok yet, but let\u0027s retry because one port should be created soon: see the comments from lines #152 to #155","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":154,"context_line":"        # immediately after it, so some delay may be needed and that is the"},{"line_number":155,"context_line":"        # reason why a waiter function is used here"},{"line_number":156,"context_line":"        self.dhcp_ports \u003d []"},{"line_number":157,"context_line":"        neutron_utils.wait_until_true("},{"line_number":158,"context_line":"            lambda: _get_dhcp_ports(),"},{"line_number":159,"context_line":"            timeout\u003d10)"},{"line_number":160,"context_line":"        dhcp_port \u003d self.dhcp_ports[0]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # modify DHCP port IP address"}],"source_content_type":"text/x-python","patch_set":5,"id":"70cc8c45_0fdb799a","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":23},"updated":"2022-02-21 10:41:17.000000000","message":"Nit.\n\nL136 - L159 this block that includes: inner function, waiter, lambda e.t.c. is in fact waiting for \"dhcp port\" and it works and it\u0027s absolutely OK to me, but I\u0027m curious (for code simplicity only purpose) why not using \"while with the timeout\" instead?","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # immediately after it, so some delay may be needed and that is the"},{"line_number":155,"context_line":"        # reason why a waiter function is used here"},{"line_number":156,"context_line":"        self.dhcp_ports \u003d []"},{"line_number":157,"context_line":"        neutron_utils.wait_until_true("},{"line_number":158,"context_line":"            lambda: _get_dhcp_ports(),"},{"line_number":159,"context_line":"            timeout\u003d10)"},{"line_number":160,"context_line":"        dhcp_port \u003d self.dhcp_ports[0]"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # modify DHCP port IP address"}],"source_content_type":"text/x-python","patch_set":5,"id":"f279cea6_ece141d5","line":159,"range":{"start_line":157,"start_character":0,"end_line":159,"end_character":23},"in_reply_to":"70cc8c45_0fdb799a","updated":"2022-02-22 17:22:58.000000000","message":"basically, I reused what was already implemented here: https://opendev.org/openstack/neutron-tempest-plugin/src/commit/d2ecabb4fc1f35aa6374260f8b89cea0c467534b/neutron_tempest_plugin/api/base.py#L214\n\nI could have added a similar code here, but, why not reusing what someone else did :)","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":171,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # create server"},{"line_number":174,"context_line":"        server \u003d self.create_server("},{"line_number":175,"context_line":"            flavor_ref\u003dCONF.compute.flavor_ref,"},{"line_number":176,"context_line":"            image_ref\u003dCONF.compute.image_ref,"},{"line_number":177,"context_line":"            key_name\u003dself.keypair[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"ac24d0b8_f8ce7a96","line":174,"range":{"start_line":174,"start_character":22,"end_line":174,"end_character":35},"updated":"2022-02-21 10:41:17.000000000","message":"Nit\n\nIn Designate and Octavia for example we are usually trying to give a names to the created resources where it\u0027s possible.\n\nFor example you could just add something like:\nname \u003d \"VM for test_modify_dhcp_port_ip_address\" or something like that.\nThis is something that helps on debugging.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                     \u0027ip_address\u0027: new_dhcp_port_ip}])"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # create server"},{"line_number":174,"context_line":"        server \u003d self.create_server("},{"line_number":175,"context_line":"            flavor_ref\u003dCONF.compute.flavor_ref,"},{"line_number":176,"context_line":"            image_ref\u003dCONF.compute.image_ref,"},{"line_number":177,"context_line":"            key_name\u003dself.keypair[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"d3967f54_084f3dfb","line":174,"range":{"start_line":174,"start_character":22,"end_line":174,"end_character":35},"in_reply_to":"ac24d0b8_f8ce7a96","updated":"2022-02-22 17:22:58.000000000","message":"I think it\u0027s a good suggestion and it\u0027s something really useful to help debugging. If there is any other reason to modify the patch, I\u0027ll add this.\nThanks a lot for the suggestion!","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":177,"context_line":"            key_name\u003dself.keypair[\u0027name\u0027],"},{"line_number":178,"context_line":"            security_groups\u003d[{\u0027name\u0027: self.security_group[\u0027name\u0027]}],"},{"line_number":179,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.network[\u0027id\u0027]}])"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # attach fip to the server"},{"line_number":182,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":183,"context_line":"        server_port \u003d self.client.list_ports("}],"source_content_type":"text/x-python","patch_set":5,"id":"733aab84_c9c6cba1","line":180,"updated":"2022-02-21 10:41:17.000000000","message":"It sounds to me like:\n1) wait until ACTIVE\n2) Cleanup\nBoth, could be in place here.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            key_name\u003dself.keypair[\u0027name\u0027],"},{"line_number":178,"context_line":"            security_groups\u003d[{\u0027name\u0027: self.security_group[\u0027name\u0027]}],"},{"line_number":179,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.network[\u0027id\u0027]}])"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # attach fip to the server"},{"line_number":182,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":183,"context_line":"        server_port \u003d self.client.list_ports("}],"source_content_type":"text/x-python","patch_set":5,"id":"9819e094_5c5bd4ad","line":180,"in_reply_to":"733aab84_c9c6cba1","updated":"2022-02-22 17:22:58.000000000","message":"The create_server method already calls all the necessary cleanups and waits until active and until os is ready:\nhttps://opendev.org/openstack/neutron-tempest-plugin/src/commit/d2ecabb4fc1f35aa6374260f8b89cea0c467534b/neutron_tempest_plugin/scenario/base.py#L138-L147","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"0d5e8652d13927c1305de6319793e8d371ecad93","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.network[\u0027id\u0027]}])"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # attach fip to the server"},{"line_number":182,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":183,"context_line":"        server_port \u003d self.client.list_ports("},{"line_number":184,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":185,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"815a6b08_4ac73ba8","line":182,"updated":"2022-02-24 15:57:32.000000000","message":"Maybe adding router interface right after subnet creation on L134 will make a more extensive check, just in case DHCP port changes effect internally the router interface to subnet.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":33341,"name":"Maor Blaustein","email":"mblue@redhat.com","username":"blue"},"change_message_id":"cab3cd3fe22bd613cf2e23264463da886904b9f2","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.network[\u0027id\u0027]}])"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # attach fip to the server"},{"line_number":182,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":183,"context_line":"        server_port \u003d self.client.list_ports("},{"line_number":184,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":185,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3b944520_88cabed9","line":182,"in_reply_to":"41406152_6436768d","updated":"2022-02-28 09:48:44.000000000","message":"Ack","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"1a3bc4f8c0bfe315199ea6c597af20e375a6c4a8","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.network[\u0027id\u0027]}])"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # attach fip to the server"},{"line_number":182,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":183,"context_line":"        server_port \u003d self.client.list_ports("},{"line_number":184,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":185,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"41406152_6436768d","line":182,"in_reply_to":"815a6b08_4ac73ba8","updated":"2022-02-28 08:55:00.000000000","message":"hmmm, I don\u0027t see why that improves the verification","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bd761527f9aa007216149685626533461673ac2b","unresolved":true,"context_lines":[{"line_number":184,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":185,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"},{"line_number":186,"context_line":"        fip \u003d self.create_floatingip(port_id\u003dserver_port[\u0027id\u0027])"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        # check connectivity"},{"line_number":189,"context_line":"        self.check_connectivity(fip[\u0027floating_ip_address\u0027],"},{"line_number":190,"context_line":"                                CONF.validation.image_ssh_user,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ef72ca6_7c6a2c08","line":187,"updated":"2022-02-21 10:41:17.000000000","message":"Nit\n\nI would recommend to add some LOG.info message here (as there is no option to raise some detailed message in \"check_connectivity\" on potential failure, I mean something like\nLOG.info(\"Expected: the server needs to obtain ssh keys from the metadata\")","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"},{"author":{"_account_id":31291,"name":"Eduardo Olivares","email":"eolivare@redhat.com","username":"eolivare"},"change_message_id":"17e884195cee079265c204858e81543ca994dc20","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            network_id\u003dself.network[\u0027id\u0027],"},{"line_number":185,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"},{"line_number":186,"context_line":"        fip \u003d self.create_floatingip(port_id\u003dserver_port[\u0027id\u0027])"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        # check connectivity"},{"line_number":189,"context_line":"        self.check_connectivity(fip[\u0027floating_ip_address\u0027],"},{"line_number":190,"context_line":"                                CONF.validation.image_ssh_user,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a9f23cd2_04526a0e","line":187,"in_reply_to":"9ef72ca6_7c6a2c08","updated":"2022-02-22 17:22:58.000000000","message":"I agree that I should have added some logs. I didn\u0027t add any :S\nI could add some reference to the LP bug covered by this test in the logs, although I\u0027m not sure if those kind of logs are usually included in the tests.","commit_id":"32a7fbeb0fd90f7efd1d3c2b94ada0bc5a2198dd"}]}
