)]}'
{"tempest/api/compute/servers/test_attach_interfaces.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"ef17da364029956e287006d23c88a883f3719d98","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setup_credentials(cls):"},{"line_number":45,"context_line":"        # This test class requires network and subnet"},{"line_number":46,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":47,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d0448b4a","line":46,"updated":"2018-09-19 08:55:02.000000000","message":"router required for l3 connectivity.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"360cb1cc19faf3ccb39cece16a37438fa856124d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setup_credentials(cls):"},{"line_number":45,"context_line":"        # This test class requires network and subnet"},{"line_number":46,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":47,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0e3335f9","line":46,"in_reply_to":"3f79a3b5_096c1605","updated":"2018-09-27 14:33:16.000000000","message":"I just added it to the skip_checks method, since every test here depends on validation to make sure instances are SSHable.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"558a7f1ac138f5dc1211e7b82af41be95c0d4e08","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setup_credentials(cls):"},{"line_number":45,"context_line":"        # This test class requires network and subnet"},{"line_number":46,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":47,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e1045416","line":46,"in_reply_to":"3f79a3b5_d0448b4a","updated":"2018-09-19 16:01:04.000000000","message":"Done","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"f75f3d739ebc117cf77766b4171ed27b29dfd8c6","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setup_credentials(cls):"},{"line_number":45,"context_line":"        # This test class requires network and subnet"},{"line_number":46,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":47,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_096c1605","line":46,"in_reply_to":"3f79a3b5_e1045416","updated":"2018-09-19 18:57:45.000000000","message":"nit: It could depend on the run_validation option.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"da84b70a0cfc2e37ce7f957245c12881b2d17ac9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        cls.subnets_client \u003d cls.os_primary.subnets_client"},{"line_number":53,"context_line":"        cls.ports_client \u003d cls.os_primary.ports_client"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _create_server_get_interfaces(self):"},{"line_number":56,"context_line":"        validation_resources \u003d self.get_test_validation_resources("},{"line_number":57,"context_line":"            self.os_primary)"},{"line_number":58,"context_line":"        server \u003d self.create_test_server("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_49652e44","line":55,"updated":"2018-09-19 18:56:33.000000000","message":"Not all server created by this.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"360cb1cc19faf3ccb39cece16a37438fa856124d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        cls.subnets_client \u003d cls.os_primary.subnets_client"},{"line_number":53,"context_line":"        cls.ports_client \u003d cls.os_primary.ports_client"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _create_server_get_interfaces(self):"},{"line_number":56,"context_line":"        validation_resources \u003d self.get_test_validation_resources("},{"line_number":57,"context_line":"            self.os_primary)"},{"line_number":58,"context_line":"        server \u003d self.create_test_server("}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_aa94548d","line":55,"in_reply_to":"3f79a3b5_49652e44","updated":"2018-09-27 14:33:16.000000000","message":"Ah, right, I split off waiting for validation into its own method and we can all it from other places as well.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"da84b70a0cfc2e37ce7f957245c12881b2d17ac9","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        for server in servers:"},{"line_number":300,"context_line":"            self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        for server in servers:"},{"line_number":303,"context_line":"            # attach the port to the server"},{"line_number":304,"context_line":"            iface \u003d self.interfaces_client.create_interface("},{"line_number":305,"context_line":"                server[\u0027id\u0027], port_id\u003dport_id)[\u0027interfaceAttachment\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_898906c8","line":302,"updated":"2018-09-19 18:56:33.000000000","message":"This test case creates 2 servers in parallel with different method then the other ones, at least the first server needs to be waited (that will loose the port first.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"da84b70a0cfc2e37ce7f957245c12881b2d17ac9","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                  port_id\u003dport_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            # detach the port from the server; this is a cast in the compute"},{"line_number":310,"context_line":"            # API so we have to poll the port until the device_id is unset."},{"line_number":311,"context_line":"            self.interfaces_client.delete_interface(server[\u0027id\u0027], port_id)"},{"line_number":312,"context_line":"            self.wait_for_port_detach(port_id)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_698eead1","line":310,"updated":"2018-09-19 18:56:33.000000000","message":"For the 2th server enough to wait here.","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"360cb1cc19faf3ccb39cece16a37438fa856124d","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                  port_id\u003dport_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            # detach the port from the server; this is a cast in the compute"},{"line_number":310,"context_line":"            # API so we have to poll the port until the device_id is unset."},{"line_number":311,"context_line":"            self.interfaces_client.delete_interface(server[\u0027id\u0027], port_id)"},{"line_number":312,"context_line":"            self.wait_for_port_detach(port_id)"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0a0ea88b","line":310,"in_reply_to":"3f79a3b5_698eead1","updated":"2018-09-27 14:33:16.000000000","message":"Maybe if we just wait for each server inside the for loop?","commit_id":"57d4c1fd86bf888a4f7a52b0eac64e3d10c279a1"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b4e586780c8b508571c7d9f67c43a686d78209b0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setup_credentials(cls):"},{"line_number":45,"context_line":"        # This test class requires network and subnet"},{"line_number":46,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue, router\u003dTrue)"},{"line_number":47,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_278ed2d0","line":46,"updated":"2018-09-20 05:29:22.000000000","message":"dhcp is not default .","commit_id":"04b74f315a02203f6fff8a8d0aa6ca80e922c630"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"360cb1cc19faf3ccb39cece16a37438fa856124d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setup_credentials(cls):"},{"line_number":45,"context_line":"        # This test class requires network and subnet"},{"line_number":46,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue, router\u003dTrue)"},{"line_number":47,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_3b9b0965","line":46,"in_reply_to":"3f79a3b5_278ed2d0","updated":"2018-09-27 14:33:16.000000000","message":"Done","commit_id":"04b74f315a02203f6fff8a8d0aa6ca80e922c630"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b4e586780c8b508571c7d9f67c43a686d78209b0","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        for server in servers:"},{"line_number":300,"context_line":"            self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        for server in servers:"},{"line_number":303,"context_line":"            # attach the port to the server"},{"line_number":304,"context_line":"            iface \u003d self.interfaces_client.create_interface("},{"line_number":305,"context_line":"                server[\u0027id\u0027], port_id\u003dport_id)[\u0027interfaceAttachment\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_87ac8635","line":302,"updated":"2018-09-20 05:29:22.000000000","message":"Please read the comments on the prev changeset .","commit_id":"04b74f315a02203f6fff8a8d0aa6ca80e922c630"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b550c8c19464eec89ea880b814d3880691504a7b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if not CONF.compute_feature_enabled.interface_attach:"},{"line_number":41,"context_line":"            raise cls.skipException(\"Interface attachment is not available.\")"},{"line_number":42,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":43,"context_line":"            raise cls.skipException(\u0027Validation should be enabled to ensure \u0027"},{"line_number":44,"context_line":"                                    \u0027guest OS is running and capable of \u0027"},{"line_number":45,"context_line":"                                    \u0027processing ACPI events.\u0027)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_d164df4f","line":43,"updated":"2018-09-27 17:57:47.000000000","message":"Is all supported hypervisor really require to skip ?\nIs lxc falls into the category of not having interface change support ?","commit_id":"9749e5ff151e97e7dd70c07ebb35db30937ffc62"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"66a71708c405076a315e1177dd7816707eb73259","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if not CONF.compute_feature_enabled.interface_attach:"},{"line_number":41,"context_line":"            raise cls.skipException(\"Interface attachment is not available.\")"},{"line_number":42,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":43,"context_line":"            raise cls.skipException(\u0027Validation should be enabled to ensure \u0027"},{"line_number":44,"context_line":"                                    \u0027guest OS is running and capable of \u0027"},{"line_number":45,"context_line":"                                    \u0027processing ACPI events.\u0027)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_ec3d848e","line":43,"in_reply_to":"3f79a3b5_d164df4f","updated":"2018-09-27 18:27:57.000000000","message":"https://docs.openstack.org/nova/latest/user/support-matrix.html lxc does not supports this per doc anyway.","commit_id":"9749e5ff151e97e7dd70c07ebb35db30937ffc62"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b550c8c19464eec89ea880b814d3880691504a7b","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                                  port_id\u003dport_id)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            # detach the port from the server; this is a cast in the compute"},{"line_number":319,"context_line":"            # API so we have to poll the port until the device_id is unset."},{"line_number":320,"context_line":"            self.interfaces_client.delete_interface(server[\u0027id\u0027], port_id)"},{"line_number":321,"context_line":"            self.wait_for_port_detach(port_id)"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_d14dbfc5","line":319,"updated":"2018-09-27 17:57:47.000000000","message":"might be enough to wait here.","commit_id":"9749e5ff151e97e7dd70c07ebb35db30937ffc62"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"d20af1d3da9d9b3d87bbd3fbfe798de434a0040d","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @classmethod"},{"line_number":48,"context_line":"    def setup_credentials(cls):"},{"line_number":49,"context_line":"        # This test class requires network and subnet"},{"line_number":50,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue, router\u003dTrue,"},{"line_number":51,"context_line":"                                  dhcp\u003dTrue)"},{"line_number":52,"context_line":"        super(AttachInterfacesTestBase, cls).setup_credentials()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_0b25f809","line":49,"updated":"2018-10-02 08:02:12.000000000","message":"I feel this comment tells nothing particular? It looks same as the code.","commit_id":"b477594b3d1da5bb24121af9f20eee74f1c50d5d"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"d20af1d3da9d9b3d87bbd3fbfe798de434a0040d","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_id)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        # NOTE(artom) We create two servers one at a time because"},{"line_number":303,"context_line":"        # create_test_server doesn\u0027t support multiple validatable servers."},{"line_number":304,"context_line":"        validation_resources \u003d self.get_test_validation_resources("},{"line_number":305,"context_line":"            self.os_primary)"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_2b223402","line":303,"updated":"2018-10-02 08:02:12.000000000","message":"yeah, I think it\u0027s good to add a docstring for the method. I\u0027ll push a patch for it later.","commit_id":"b477594b3d1da5bb24121af9f20eee74f1c50d5d"}],"tempest/common/waiters.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"348bab974c11f17eed4718bd781c3b725f1f8064","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        old_task_state \u003d task_state"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def wait_for_server_sshable(validation_resources, server, server_ip,"},{"line_number":134,"context_line":"                            servers_client):"},{"line_number":135,"context_line":"    ssh_client \u003d remote_client.RemoteClient("},{"line_number":136,"context_line":"        server_ip, CONF.validation.image_ssh_user,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_384e6cc2","line":133,"updated":"2018-09-13 18:17:49.000000000","message":"linux_client.validate_authentication()  should do the same thing.","commit_id":"5fc2a5fcad6a33585cdfc6d531f48294878db42a"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"708efa6b2ae0b1b935bb4e54aab643691bc68046","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        old_task_state \u003d task_state"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def wait_for_server_sshable(validation_resources, server, server_ip,"},{"line_number":134,"context_line":"                            servers_client):"},{"line_number":135,"context_line":"    ssh_client \u003d remote_client.RemoteClient("},{"line_number":136,"context_line":"        server_ip, CONF.validation.image_ssh_user,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2567ea27","line":133,"in_reply_to":"3f79a3b5_384e6cc2","updated":"2018-09-17 18:32:39.000000000","message":"Ah, had no idea that existed. Thanks!","commit_id":"5fc2a5fcad6a33585cdfc6d531f48294878db42a"},{"author":{"_account_id":27078,"name":"Manik Bindlish","email":"manikbindlish19@gmail.com","username":"manik"},"change_message_id":"93f3767116ed76daaae419c2422b7644a1966d85","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        server\u003dserver, servers_client\u003dservers_client)"},{"line_number":139,"context_line":"    start_time \u003d int(time.time())"},{"line_number":140,"context_line":"    while True:"},{"line_number":141,"context_line":"        time.sleep(servers_client.build_interval)"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            return ssh_client.exec_command(\u0027true\u0027)"},{"line_number":144,"context_line":"        except (exceptions.SSHTimeout, exceptions.SSHExecCommandFailed):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_52eddced","line":141,"range":{"start_line":141,"start_character":8,"end_line":141,"end_character":49},"updated":"2018-09-06 09:44:11.000000000","message":"In my opinion, it should be add in exception just after if condition or L[151] (outside of if)\n\nIn current case, whether server is sshabe ready or not in first attempt but still it will go for sleep","commit_id":"5fc2a5fcad6a33585cdfc6d531f48294878db42a"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0bb7a697b85f734d0d11b7d71b7d11f438340382","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        server\u003dserver, servers_client\u003dservers_client)"},{"line_number":139,"context_line":"    start_time \u003d int(time.time())"},{"line_number":140,"context_line":"    while True:"},{"line_number":141,"context_line":"        time.sleep(servers_client.build_interval)"},{"line_number":142,"context_line":"        try:"},{"line_number":143,"context_line":"            return ssh_client.exec_command(\u0027true\u0027)"},{"line_number":144,"context_line":"        except (exceptions.SSHTimeout, exceptions.SSHExecCommandFailed):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_10da8e4a","line":141,"range":{"start_line":141,"start_character":8,"end_line":141,"end_character":49},"in_reply_to":"3f79a3b5_52eddced","updated":"2018-09-12 06:34:58.000000000","message":"The server is unlikely to be SSHable immediately after being booted, as the guest OS takes some time to come up. So it\u0027s reasonable to start with the sleep first. It\u0027s also consistent with other waiters, see L111-112, L217-218, etc.","commit_id":"5fc2a5fcad6a33585cdfc6d531f48294878db42a"}]}
