)]}'
{"neutron_tempest_plugin/scenario/test_floatingip.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"839654cb64f3637f9c06c23780d800ce91c7bcbc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from neutron_tempest_plugin.scenario import base"},{"line_number":33,"context_line":"from neutron_tempest_plugin.scenario import constants"},{"line_number":34,"context_line":"from neutron_tempest_plugin.scenario import test_qos"},{"line_number":35,"context_line":"import testtools"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"CONF \u003d config.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_28ace59d","line":35,"updated":"2019-04-03 20:54:43.000000000","message":"this import should be moved to the section above, to L27","commit_id":"1a343b23f0492d575c3229bc0cdf35d69068fa04"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"839654cb64f3637f9c06c23780d800ce91c7bcbc","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        self.create_pingable_secgroup_rule("},{"line_number":405,"context_line":"            secgroup_id\u003dself.secgroup[\u0027security_group\u0027][\u0027id\u0027])"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def _create_network_objects(self, servers_num\u003d1, fip_addresses\u003d[]):"},{"line_number":408,"context_line":"        network \u003d self.create_network()"},{"line_number":409,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":410,"context_line":"        router \u003d self.create_router_by_client()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_e8433d10","line":407,"range":{"start_line":407,"start_character":67,"end_line":407,"end_character":69},"updated":"2019-04-03 20:54:43.000000000","message":"You shouldn\u0027t use mutable as default parameter. See https://docs.quantifiedcode.com/python-anti-patterns/correctness/mutable_default_value_as_argument.html for details","commit_id":"1a343b23f0492d575c3229bc0cdf35d69068fa04"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"839654cb64f3637f9c06c23780d800ce91c7bcbc","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                             \u0027does not match the number of servers\u0027)"},{"line_number":417,"context_line":"        fips \u003d []"},{"line_number":418,"context_line":"        for server in range(servers_num):"},{"line_number":419,"context_line":"            if fip_addresses:"},{"line_number":420,"context_line":"                fip \u003d self._create_server_return_fip("},{"line_number":421,"context_line":"                    network\u003dnetwork, fip_address\u003dfip_addresses[server])"},{"line_number":422,"context_line":"            else:"},{"line_number":423,"context_line":"                fip \u003d self._create_server_return_fip("},{"line_number":424,"context_line":"                    network\u003dnetwork)"},{"line_number":425,"context_line":"            fips.append(fip)"},{"line_number":426,"context_line":"        return fips"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def _create_server_return_fip(self, network\u003dNone, fip_address\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_682f4d3e","line":425,"range":{"start_line":419,"start_character":0,"end_line":425,"end_character":28},"updated":"2019-04-03 20:54:43.000000000","message":"You can do something like\n\n    fip \u003d fip_addresses[server] if fip_addresses else None\n    fips.append(\n        self._create_server_return_fip(network\u003dnetwork, fip_address\u003dfip))","commit_id":"1a343b23f0492d575c3229bc0cdf35d69068fa04"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        router \u003d self.create_router_by_client()"},{"line_number":411,"context_line":"        self.create_router_interface(router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        if fip_addresses:"},{"line_number":414,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":415,"context_line":"                             \u0027Number of specified fip addresses \u0027 +"},{"line_number":416,"context_line":"                             \u0027does not match the number of servers\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_e93be398","line":413,"updated":"2019-04-09 09:33:34.000000000","message":"You can do something like:\n\n    fip_addresses \u003d fip_addresses if fip_addresses else []\n\nthan You will not need this \"if\" here and also \"if\" from L419 will be not necessary","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        router \u003d self.create_router_by_client()"},{"line_number":411,"context_line":"        self.create_router_interface(router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        if fip_addresses:"},{"line_number":414,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":415,"context_line":"                             \u0027Number of specified fip addresses \u0027 +"},{"line_number":416,"context_line":"                             \u0027does not match the number of servers\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c702f572","line":413,"in_reply_to":"5fc1f717_e93be398","updated":"2019-12-02 17:21:29.000000000","message":"tried to reduce number of used \u0027if\u0027s but failed to simplify. left as is for now","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        router \u003d self.create_router_by_client()"},{"line_number":411,"context_line":"        self.create_router_interface(router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        if fip_addresses:"},{"line_number":414,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":415,"context_line":"                             \u0027Number of specified fip addresses \u0027 +"},{"line_number":416,"context_line":"                             \u0027does not match the number of servers\u0027)"},{"line_number":417,"context_line":"        fips \u003d []"},{"line_number":418,"context_line":"        for server in range(servers_num):"},{"line_number":419,"context_line":"            fip \u003d fip_addresses[server] if fip_addresses else None"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_098d0f7b","line":416,"range":{"start_line":413,"start_character":8,"end_line":416,"end_character":68},"updated":"2019-04-09 09:33:34.000000000","message":"this can be done above L408, then if that will not be true, You will not need to create and clean network, subnet and router","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        router \u003d self.create_router_by_client()"},{"line_number":411,"context_line":"        self.create_router_interface(router[\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        if fip_addresses:"},{"line_number":414,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":415,"context_line":"                             \u0027Number of specified fip addresses \u0027 +"},{"line_number":416,"context_line":"                             \u0027does not match the number of servers\u0027)"},{"line_number":417,"context_line":"        fips \u003d []"},{"line_number":418,"context_line":"        for server in range(servers_num):"},{"line_number":419,"context_line":"            fip \u003d fip_addresses[server] if fip_addresses else None"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_8795dd34","line":416,"range":{"start_line":413,"start_character":8,"end_line":416,"end_character":68},"in_reply_to":"5fc1f717_098d0f7b","updated":"2019-12-02 17:21:29.000000000","message":"fixed","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                    network\u003dnetwork, fip_address\u003dfip))"},{"line_number":423,"context_line":"        return fips"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _create_server_return_fip(self, network\u003dNone, fip_address\u003dNone):"},{"line_number":426,"context_line":"        server \u003d self.create_server("},{"line_number":427,"context_line":"            flavor_ref\u003dCONF.compute.flavor_ref,"},{"line_number":428,"context_line":"            image_ref\u003dCONF.compute.image_ref,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_294d6b3a","line":425,"range":{"start_line":425,"start_character":8,"end_line":425,"end_character":33},"updated":"2019-04-09 09:33:34.000000000","message":"nit: maybe better name would be something like \"create_server_and_fip\" instead of giving in method name what it will return","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                    network\u003dnetwork, fip_address\u003dfip))"},{"line_number":423,"context_line":"        return fips"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _create_server_return_fip(self, network\u003dNone, fip_address\u003dNone):"},{"line_number":426,"context_line":"        server \u003d self.create_server("},{"line_number":427,"context_line":"            flavor_ref\u003dCONF.compute.flavor_ref,"},{"line_number":428,"context_line":"            image_ref\u003dCONF.compute.image_ref,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_67754133","line":425,"range":{"start_line":425,"start_character":8,"end_line":425,"end_character":33},"in_reply_to":"5fc1f717_294d6b3a","updated":"2019-12-02 17:21:29.000000000","message":"fixed","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            flavor_ref\u003dCONF.compute.flavor_ref,"},{"line_number":428,"context_line":"            image_ref\u003dCONF.compute.image_ref,"},{"line_number":429,"context_line":"            key_name\u003dself.keypair[\u0027name\u0027],"},{"line_number":430,"context_line":"            networks\u003d[{\u0027uuid\u0027: network[\u0027id\u0027]}],"},{"line_number":431,"context_line":"            security_groups\u003d[{\u0027name\u0027: self.secgroup["},{"line_number":432,"context_line":"                \u0027security_group\u0027][\u0027name\u0027]}])"},{"line_number":433,"context_line":"        waiters.wait_for_server_status(self.os_primary.servers_client,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_a95abbee","line":430,"range":{"start_line":430,"start_character":31,"end_line":430,"end_character":38},"updated":"2019-04-09 09:33:34.000000000","message":"in L425 You allow to pass \"network\" as None. Then this will fail here. Maybe You shouldn\u0027t allow network to be None? This is IMO required to make this method working","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            flavor_ref\u003dCONF.compute.flavor_ref,"},{"line_number":428,"context_line":"            image_ref\u003dCONF.compute.image_ref,"},{"line_number":429,"context_line":"            key_name\u003dself.keypair[\u0027name\u0027],"},{"line_number":430,"context_line":"            networks\u003d[{\u0027uuid\u0027: network[\u0027id\u0027]}],"},{"line_number":431,"context_line":"            security_groups\u003d[{\u0027name\u0027: self.secgroup["},{"line_number":432,"context_line":"                \u0027security_group\u0027][\u0027name\u0027]}])"},{"line_number":433,"context_line":"        waiters.wait_for_server_status(self.os_primary.servers_client,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a7833903","line":430,"range":{"start_line":430,"start_character":31,"end_line":430,"end_character":38},"in_reply_to":"5fc1f717_a95abbee","updated":"2019-12-02 17:21:29.000000000","message":"fixed","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        if fip_address:"},{"line_number":441,"context_line":"            fip \u003d self.os_admin.network_client.create_floatingip("},{"line_number":442,"context_line":"                floating_network_id\u003dCONF.network.public_network_id,"},{"line_number":443,"context_line":"                floating_ip_address\u003dfip_address,"},{"line_number":444,"context_line":"                port_id\u003dport[\u0027id\u0027])[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_890a5fce","line":441,"updated":"2019-04-09 09:33:34.000000000","message":"As I see in https://github.com/openstack/neutron-tempest-plugin/blob/06714eaa1b1eced87cf37f811826ec7f1c55f5ed/neutron_tempest_plugin/api/base.py#L601 You can pass \"kwargs\" to self.create_floatingip() method. Why You don\u0027t use this method but rather call client\u0027s method directly?","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            device_id\u003dserver[\u0027server\u0027][\u0027id\u0027])[\u0027ports\u0027][0]"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        if fip_address:"},{"line_number":441,"context_line":"            fip \u003d self.os_admin.network_client.create_floatingip("},{"line_number":442,"context_line":"                floating_network_id\u003dCONF.network.public_network_id,"},{"line_number":443,"context_line":"                floating_ip_address\u003dfip_address,"},{"line_number":444,"context_line":"                port_id\u003dport[\u0027id\u0027])[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2796694b","line":441,"in_reply_to":"5fc1f717_890a5fce","updated":"2019-12-02 17:21:29.000000000","message":"specified os_admin.network_client as client for self.create_floatingip() method since it is not allowed to create a floating_ip with specific floating_ip_address using regular user permissions","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        \"\"\""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        self._create_keypair_and_secgroup()"},{"line_number":473,"context_line":"        [mutable_fip, permanent_fip] \u003d \\"},{"line_number":474,"context_line":"            self._create_network_objects(servers_num\u003d2)"},{"line_number":475,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"},{"line_number":476,"context_line":"        ip_address \u003d mutable_fip[\u0027floating_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_e9c0c352","line":473,"range":{"start_line":473,"start_character":39,"end_line":473,"end_character":40},"updated":"2019-04-09 09:33:34.000000000","message":"nit: we are trying to avoid such way of breaking lines. Please use brackets instead :)","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        \"\"\""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        self._create_keypair_and_secgroup()"},{"line_number":473,"context_line":"        [mutable_fip, permanent_fip] \u003d \\"},{"line_number":474,"context_line":"            self._create_network_objects(servers_num\u003d2)"},{"line_number":475,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"},{"line_number":476,"context_line":"        ip_address \u003d mutable_fip[\u0027floating_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_67dea13d","line":473,"range":{"start_line":473,"start_character":39,"end_line":473,"end_character":40},"in_reply_to":"5fc1f717_e9c0c352","updated":"2019-12-02 17:21:29.000000000","message":"fixed","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"376466d1b0ca6694af5272fded670937a6f5248f","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            self._create_network_objects(servers_num\u003d2)"},{"line_number":475,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"},{"line_number":476,"context_line":"        ip_address \u003d mutable_fip[\u0027floating_ip_address\u0027]"},{"line_number":477,"context_line":"        self.delete_floatingip(mutable_fip)"},{"line_number":478,"context_line":"        [mutable_fip] \u003d self._create_network_objects("},{"line_number":479,"context_line":"            servers_num\u003d1, fip_addresses\u003d[ip_address])"},{"line_number":480,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_c9b707d8","line":477,"updated":"2019-04-09 09:33:34.000000000","message":"just a question: can we be sure here that FIP is really deleted before we will try to create new FIP in next line?\nWe don\u0027t want to have another possible race condition here :)","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"2a824f6045d4e949c1c8ba6ad1b387ca67dc7a9f","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            self._create_network_objects(servers_num\u003d2)"},{"line_number":475,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"},{"line_number":476,"context_line":"        ip_address \u003d mutable_fip[\u0027floating_ip_address\u0027]"},{"line_number":477,"context_line":"        self.delete_floatingip(mutable_fip)"},{"line_number":478,"context_line":"        [mutable_fip] \u003d self._create_network_objects("},{"line_number":479,"context_line":"            servers_num\u003d1, fip_addresses\u003d[ip_address])"},{"line_number":480,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a7dc9945","line":477,"in_reply_to":"5fc1f717_c9b707d8","updated":"2019-12-02 17:21:29.000000000","message":"added validation that removed fip does not exist/occupied before we try to reuse it","commit_id":"f89432d12a27ffbd7eb4704db6384cdf354c7a5a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"aa259f92ebd9067a34a11aa78168d7a3bd5c93c1","unresolved":false,"context_lines":[{"line_number":534,"context_line":"            self.assertNotEqual("},{"line_number":535,"context_line":"                mutable_fip[\u0027floating_ip_address\u0027],"},{"line_number":536,"context_line":"                fip[\u0027floating_ip_address\u0027],"},{"line_number":537,"context_line":"                \"Floating ip we need to reuse is occupied. Can\u0027t continue\")"},{"line_number":538,"context_line":"        [mutable_fip] \u003d self._create_network_objects("},{"line_number":539,"context_line":"            servers_num\u003d1, fip_addresses\u003d[ip_address])"},{"line_number":540,"context_line":"        self._check_fips_connectivity(mutable_fip, permanent_fip)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_f36a4880","line":537,"updated":"2019-12-03 10:05:22.000000000","message":"IMO You should use wait_until_true() here to give neutron some time to actually remove this FIP.","commit_id":"c444fe6fd7438045077069a8bff2389fb2b72a0a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"451d2436d5cb3df3c0014df91a6cfd076320b14a","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def _create_keypair_and_secgroup(self):"},{"line_number":451,"context_line":"        self.keypair \u003d self.create_keypair()"},{"line_number":452,"context_line":"        self.secgroup \u003d self.os_primary.network_client.create_security_group("},{"line_number":453,"context_line":"            name\u003d\u0027secgroup_tempest\u0027)"},{"line_number":454,"context_line":"        self.addCleanup("},{"line_number":455,"context_line":"            self.os_primary.network_client.delete_security_group,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_5ca3c544","line":452,"updated":"2020-02-12 09:25:51.000000000","message":"You can use:\n\n    self.create_security_group(...)\n\nand than this cleanup from L454 shouldn\u0027t be needed.","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"9e96790b534fa0869a754b43116d0b2fbd4cdc59","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def _create_keypair_and_secgroup(self):"},{"line_number":451,"context_line":"        self.keypair \u003d self.create_keypair()"},{"line_number":452,"context_line":"        self.secgroup \u003d self.os_primary.network_client.create_security_group("},{"line_number":453,"context_line":"            name\u003d\u0027secgroup_tempest\u0027)"},{"line_number":454,"context_line":"        self.addCleanup("},{"line_number":455,"context_line":"            self.os_primary.network_client.delete_security_group,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1fa4df85_2cedfc24","line":452,"in_reply_to":"3fa7e38b_5ca3c544","updated":"2020-03-15 10:35:37.000000000","message":"Done","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"451d2436d5cb3df3c0014df91a6cfd076320b14a","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        self.create_pingable_secgroup_rule("},{"line_number":460,"context_line":"            secgroup_id\u003dself.secgroup[\u0027security_group\u0027][\u0027id\u0027])"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def _create_network_objects(self, servers_num\u003d1, fip_addresses\u003dNone):"},{"line_number":463,"context_line":"        if fip_addresses:"},{"line_number":464,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":465,"context_line":"                             (\u0027Number of specified fip addresses \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_1c5f8d4d","line":462,"range":{"start_line":462,"start_character":8,"end_line":462,"end_character":31},"updated":"2020-02-12 09:25:51.000000000","message":"to be strict this method also creates servers, so name is little confusing :)","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"9e96790b534fa0869a754b43116d0b2fbd4cdc59","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        self.create_pingable_secgroup_rule("},{"line_number":460,"context_line":"            secgroup_id\u003dself.secgroup[\u0027security_group\u0027][\u0027id\u0027])"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def _create_network_objects(self, servers_num\u003d1, fip_addresses\u003dNone):"},{"line_number":463,"context_line":"        if fip_addresses:"},{"line_number":464,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":465,"context_line":"                             (\u0027Number of specified fip addresses \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"1fa4df85_ecf604fa","line":462,"range":{"start_line":462,"start_character":8,"end_line":462,"end_character":31},"in_reply_to":"3fa7e38b_1c5f8d4d","updated":"2020-03-15 10:35:37.000000000","message":"Done","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"451d2436d5cb3df3c0014df91a6cfd076320b14a","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        if fip_addresses:"},{"line_number":464,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":465,"context_line":"                             (\u0027Number of specified fip addresses \u0027"},{"line_number":466,"context_line":"                             \u0027does not match the number of servers\u0027))"},{"line_number":467,"context_line":"        network \u003d self.create_network()"},{"line_number":468,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":469,"context_line":"        router \u003d self.create_router_by_client()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_7c9ec1fa","line":466,"updated":"2020-02-12 09:25:51.000000000","message":"nitty nit: please align indentation with line above","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"9e96790b534fa0869a754b43116d0b2fbd4cdc59","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        if fip_addresses:"},{"line_number":464,"context_line":"            self.assertEqual(servers_num, len(fip_addresses),"},{"line_number":465,"context_line":"                             (\u0027Number of specified fip addresses \u0027"},{"line_number":466,"context_line":"                             \u0027does not match the number of servers\u0027))"},{"line_number":467,"context_line":"        network \u003d self.create_network()"},{"line_number":468,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":469,"context_line":"        router \u003d self.create_router_by_client()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1fa4df85_8cdbd07b","line":466,"in_reply_to":"3fa7e38b_7c9ec1fa","updated":"2020-03-15 10:35:37.000000000","message":"Done","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"451d2436d5cb3df3c0014df91a6cfd076320b14a","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                client\u003dself.os_admin.network_client,"},{"line_number":499,"context_line":"                port\u003dport)"},{"line_number":500,"context_line":"            self.addCleanup("},{"line_number":501,"context_line":"                self.delete_floatingip, fip, self.os_admin.network_client)"},{"line_number":502,"context_line":"        else:"},{"line_number":503,"context_line":"            fip \u003d self.create_floatingip(port\u003dport)"},{"line_number":504,"context_line":"        return fip"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_fc671122","line":501,"updated":"2020-02-12 09:25:51.000000000","message":"this cleanup isn\u0027t needed as it will be automatically added to the list of floating_ips and cleaned at the end of the test","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"9e96790b534fa0869a754b43116d0b2fbd4cdc59","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                client\u003dself.os_admin.network_client,"},{"line_number":499,"context_line":"                port\u003dport)"},{"line_number":500,"context_line":"            self.addCleanup("},{"line_number":501,"context_line":"                self.delete_floatingip, fip, self.os_admin.network_client)"},{"line_number":502,"context_line":"        else:"},{"line_number":503,"context_line":"            fip \u003d self.create_floatingip(port\u003dport)"},{"line_number":504,"context_line":"        return fip"}],"source_content_type":"text/x-python","patch_set":9,"id":"1fa4df85_0cd12058","line":501,"in_reply_to":"3fa7e38b_fc671122","updated":"2020-03-15 10:35:37.000000000","message":"In this specific case fip is not deleted properly during cleanup because it was created with admin permissions. I have to use admin permissions when creating the fip with fixed-ip-address because with user credentials I am receiving \u0027Not allowed by policy\u0027 error.","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":19118,"name":"Eran Kuris","email":"ekuris@redhat.com","username":"ekuris"},"change_message_id":"7b40cffeeca984d5f83f76f02331f8c11a358e7b","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            6. Delete VM2 FIP but save IP address that it used."},{"line_number":529,"context_line":"            7. Create and connect one more router to the external network."},{"line_number":530,"context_line":"            8. Create and connect an internal network to the second router."},{"line_number":531,"context_line":"            9. Create and connect a VM (VM3) to the internal network of"},{"line_number":532,"context_line":"               the second router."},{"line_number":533,"context_line":"            10. Create a FIP for the VM3 in the external network with"},{"line_number":534,"context_line":"               the same IP address that was used for VM2."}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_bf418b0a","line":531,"range":{"start_line":531,"start_character":40,"end_line":531,"end_character":43},"updated":"2020-02-12 09:40:18.000000000","message":"I think it will impact the time of running the test. So maybe Slawek suggestion will solve it by creating 2 vm\u0027s on different networks.","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"fce74211acd33608af91b541139a5deb7aa71f19","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            6. Delete VM2 FIP but save IP address that it used."},{"line_number":529,"context_line":"            7. Create and connect one more router to the external network."},{"line_number":530,"context_line":"            8. Create and connect an internal network to the second router."},{"line_number":531,"context_line":"            9. Create and connect a VM (VM3) to the internal network of"},{"line_number":532,"context_line":"               the second router."},{"line_number":533,"context_line":"            10. Create a FIP for the VM3 in the external network with"},{"line_number":534,"context_line":"               the same IP address that was used for VM2."}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0555f0c0","line":531,"range":{"start_line":531,"start_character":40,"end_line":531,"end_character":43},"in_reply_to":"3fa7e38b_bf418b0a","updated":"2020-02-12 11:46:06.000000000","message":"Please see details in my reply to Slawek.","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"451d2436d5cb3df3c0014df91a6cfd076320b14a","unresolved":false,"context_lines":[{"line_number":532,"context_line":"               the second router."},{"line_number":533,"context_line":"            10. Create a FIP for the VM3 in the external network with"},{"line_number":534,"context_line":"               the same IP address that was used for VM2."},{"line_number":535,"context_line":"            11. Make sure that now VM1 is able to reach VM3 using the FIP."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        Note, the scenario passes only in case corresponding"},{"line_number":538,"context_line":"        ARP update was sent to the external network when reusing same IP"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_bc04391a","line":535,"updated":"2020-02-12 09:25:51.000000000","message":"do we need 3 vms in the test? why we can\u0027t do something like:\n\n1. Create 2 routers and 2 internal networks,\n2. Create 2 vms - one in each internal network,\n3. create FIP associated to first vm and check if it\u0027s reachable from test node (as from external),\n4. Remove fip and create new one with same IP address,\n5. associate new fip to the second vm and check its connectivity\n\nWouldn\u0027t it be testing the same case but with less vms and in IMHO faster way?","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7200a4e60fc597f8934d1e53b30416ee20dda879","unresolved":false,"context_lines":[{"line_number":532,"context_line":"               the second router."},{"line_number":533,"context_line":"            10. Create a FIP for the VM3 in the external network with"},{"line_number":534,"context_line":"               the same IP address that was used for VM2."},{"line_number":535,"context_line":"            11. Make sure that now VM1 is able to reach VM3 using the FIP."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        Note, the scenario passes only in case corresponding"},{"line_number":538,"context_line":"        ARP update was sent to the external network when reusing same IP"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_85442e50","line":535,"in_reply_to":"3fa7e38b_62261acf","updated":"2020-02-18 09:50:57.000000000","message":"If 3 vms are necessary to test this scenario than ok for me but one thing which I don\u0027t understand is why MAC addresses were used there. If communication was through FIPs than there shouldn\u0027t be L2 connectivity between them, right? Or am I missing something?","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"828d372754b84de7b9b6c2e99eb8099ccd5faaed","unresolved":false,"context_lines":[{"line_number":532,"context_line":"               the second router."},{"line_number":533,"context_line":"            10. Create a FIP for the VM3 in the external network with"},{"line_number":534,"context_line":"               the same IP address that was used for VM2."},{"line_number":535,"context_line":"            11. Make sure that now VM1 is able to reach VM3 using the FIP."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        Note, the scenario passes only in case corresponding"},{"line_number":538,"context_line":"        ARP update was sent to the external network when reusing same IP"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_9086aa0e","line":535,"in_reply_to":"3fa7e38b_85442e50","updated":"2020-02-18 11:08:27.000000000","message":"Slawek, You a right regarding missing L2 connectivity. Is was not related to a missing MAC in ARP table but something in OVN DB.","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":29350,"name":"Roman Safronov","email":"rsafrono@redhat.com","username":"rsafrono"},"change_message_id":"fce74211acd33608af91b541139a5deb7aa71f19","unresolved":false,"context_lines":[{"line_number":532,"context_line":"               the second router."},{"line_number":533,"context_line":"            10. Create a FIP for the VM3 in the external network with"},{"line_number":534,"context_line":"               the same IP address that was used for VM2."},{"line_number":535,"context_line":"            11. Make sure that now VM1 is able to reach VM3 using the FIP."},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        Note, the scenario passes only in case corresponding"},{"line_number":538,"context_line":"        ARP update was sent to the external network when reusing same IP"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_62261acf","line":535,"in_reply_to":"3fa7e38b_bc04391a","updated":"2020-02-12 11:46:06.000000000","message":"It\u0027s hard to say if this scenario will work the same. Scenario with 3 VMs was the one that I used in order to successfully reproduce a customer issue. The point was that VM1 had a MAC of VM2 FIP and not VM3 FIP in it\u0027s ARP table after reusing the FIP ip address. In the original bug also scenario with pinging from VMs was tested https://bugzilla.redhat.com/show_bug.cgi?id\u003d1642830","commit_id":"7c920b7bad133a74fbae88ad0c34b01a476c95ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a91469070accf418b95b2146854faf3fc4a3a6de","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            return True"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        try:"},{"line_number":553,"context_line":"            common_utils.wait_until_true(lambda: _fip_is_free(),"},{"line_number":554,"context_line":"                                         timeout\u003d30, sleep\u003d5)"},{"line_number":555,"context_line":"        except common_utils.WaitTimeout:"},{"line_number":556,"context_line":"            self.fail(\"Can\u0027t reuse IP address because it is not free\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1fa4df85_5278f8f6","line":553,"range":{"start_line":553,"start_character":41,"end_line":553,"end_character":47},"updated":"2020-03-17 10:05:01.000000000","message":"nit: You don\u0027t need to use lambda. Something like\n\n    wait_until_true(_fip_is_free, timeout\u003d30, sleep\u003d5)\n\nshould be enough if You don\u0027t pass any arguments to _fip_is_free function.","commit_id":"29c2dff30000abf364f4a4f5b12cd8d459bd763a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a91469070accf418b95b2146854faf3fc4a3a6de","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            common_utils.wait_until_true(lambda: _fip_is_free(),"},{"line_number":554,"context_line":"                                         timeout\u003d30, sleep\u003d5)"},{"line_number":555,"context_line":"        except common_utils.WaitTimeout:"},{"line_number":556,"context_line":"            self.fail(\"Can\u0027t reuse IP address because it is not free\")"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        [mutable_fip] \u003d self._create_network_and_servers("},{"line_number":559,"context_line":"            servers_num\u003d1, fip_addresses\u003d[ip_address])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1fa4df85_32853cd0","line":556,"updated":"2020-03-17 10:05:01.000000000","message":"nit: IMO would be good for debugging to include IP address here","commit_id":"29c2dff30000abf364f4a4f5b12cd8d459bd763a"}]}
