)]}'
{"tempest/api/compute/admin/test_live_migration.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45c617771d49a10efc2ea0fb9fbfdc244c33cdfa","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _create_loginable_secgroup_rule(self, secgroup_id\u003dNone):"},{"line_number":155,"context_line":"        _client \u003d self.compute_security_groups_client"},{"line_number":156,"context_line":"        _client_rules \u003d self.compute_security_group_rules_client"},{"line_number":157,"context_line":"        if secgroup_id is None:"},{"line_number":158,"context_line":"            sgs \u003d _client.list_security_groups()[\u0027security_groups\u0027]"},{"line_number":159,"context_line":"            for sg in sgs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_75858705","line":156,"range":{"start_line":156,"start_character":29,"end_line":156,"end_character":64},"updated":"2016-03-03 00:21:46.000000000","message":"Dang, missed this one.","commit_id":"6e75feaac1a3dc4662bee4bde8b398acf898c163"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"090b3c52807ce7a6a914fdafc27a43ef65530e3b","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                      server_id, ips)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        self._migrate_server_to(server_id, target_host, volume_backed)"},{"line_number":264,"context_line":"        server \u003d waiters.wait_for_server_status(self.servers_client, server_id,"},{"line_number":265,"context_line":"                                                state)"},{"line_number":266,"context_line":"        migration_list \u003d (self.admin_migration_client.list_migrations()"},{"line_number":267,"context_line":"                          [\u0027migrations\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_54a53645","line":264,"updated":"2016-06-10 14:16:24.000000000","message":"nit: I don\u0027t see \u0027server\u0027 used after this, maybe it was for debugging?","commit_id":"891e4fbf5ddde9cd0872ce24f5fa61686b097485"},{"author":{"_account_id":15739,"name":"Hardik Italia","email":"hardik.italia@suse.com","username":"hitalia"},"change_message_id":"07e61469f70ba95a24268a54308a044732978979","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                      server_id, ips)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        self._migrate_server_to(server_id, target_host, volume_backed)"},{"line_number":264,"context_line":"        server \u003d waiters.wait_for_server_status(self.servers_client, server_id,"},{"line_number":265,"context_line":"                                                state)"},{"line_number":266,"context_line":"        migration_list \u003d (self.admin_migration_client.list_migrations()"},{"line_number":267,"context_line":"                          [\u0027migrations\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_56ae882e","line":264,"in_reply_to":"7aa08908_54a53645","updated":"2016-06-13 16:19:49.000000000","message":"Done","commit_id":"891e4fbf5ddde9cd0872ce24f5fa61686b097485"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                           volume_id, \u0027available\u0027)"},{"line_number":107,"context_line":"        self.volumes_client.delete_volume(volume_id)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_remote_client(self, ip_address, username\u003dNone, private_key\u003dNone):"},{"line_number":110,"context_line":"        \"\"\"Get a SSH client to a remote server"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        @param ip_address the server floating or fixed IP address to use"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_1a178a55","line":109,"range":{"start_line":109,"start_character":4,"end_line":109,"end_character":25},"updated":"2016-07-08 10:58:46.000000000","message":"I think this is redundant","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        return linux_client"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    # NOTE(mriedem): copied from scenario manager"},{"line_number":149,"context_line":"    def delete_wrapper(self, delete_thing, *args, **kwargs):"},{"line_number":150,"context_line":"        \"\"\"Ignores NotFound exceptions for delete operations."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        @param delete_thing: delete method of a resource. method will be"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_15fe3d05","line":149,"range":{"start_line":149,"start_character":4,"end_line":149,"end_character":22},"updated":"2016-07-08 10:58:46.000000000","message":"Ditto.","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            # If the resource is already missing, mission accomplished."},{"line_number":162,"context_line":"            pass"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def _create_loginable_secgroup_rule(self, secgroup_id\u003dNone):"},{"line_number":165,"context_line":"        _client \u003d self.compute_security_groups_client"},{"line_number":166,"context_line":"        _client_rules \u003d self.compute_security_group_rules_client"},{"line_number":167,"context_line":"        if secgroup_id is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_5508c528","line":164,"range":{"start_line":164,"start_character":5,"end_line":164,"end_character":39},"updated":"2016-07-08 10:58:46.000000000","message":"ditto","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        return rules"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    # NOTE(mriedem): copied from scenario manager"},{"line_number":203,"context_line":"    def create_keypair(self):"},{"line_number":204,"context_line":"        name \u003d data_utils.rand_name(self.__class__.__name__)"},{"line_number":205,"context_line":"        # We don\u0027t need to create a keypair by pubkey in scenario"},{"line_number":206,"context_line":"        body \u003d self.keypairs_client.create_keypair(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_750fc12e","line":203,"range":{"start_line":203,"start_character":4,"end_line":203,"end_character":22},"updated":"2016-07-08 10:58:46.000000000","message":"Ditto","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        return body[\u0027keypair\u0027]"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    # NOTE(mriedem): copied from scenario manager"},{"line_number":211,"context_line":"    def create_floating_ip(self, server):"},{"line_number":212,"context_line":"        \"\"\"Create a floating IP and associates to a server on Nova\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        floating_ip \u003d (self.compute_floating_ips_client."}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_b519297c","line":211,"range":{"start_line":211,"start_character":4,"end_line":211,"end_character":26},"updated":"2016-07-08 10:58:46.000000000","message":"Ditto","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        self._create_loginable_secgroup_rule()"},{"line_number":241,"context_line":"        create_kwargs \u003d dict()"},{"line_number":242,"context_line":"        create_kwargs[\u0027key_name\u0027] \u003d keypair[\u0027name\u0027]"},{"line_number":243,"context_line":"        server_id \u003d self.create_test_server(wait_until\u003d\"ACTIVE\","},{"line_number":244,"context_line":"                                            volume_backed\u003dvolume_backed,"},{"line_number":245,"context_line":"                                            **create_kwargs)[\u0027id\u0027]"},{"line_number":246,"context_line":"        server \u003d self._get_server_details(server_id)"},{"line_number":247,"context_line":"        actual_host \u003d server[self._host_key]"},{"line_number":248,"context_line":"        target_host \u003d self._get_host_other_than(actual_host)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_3a5ec676","line":245,"range":{"start_line":243,"start_character":0,"end_line":245,"end_character":66},"updated":"2016-07-08 10:58:46.000000000","message":"If you pass validatable\u003dTrue to the create server, it will setup all resources required for it to be ssh-able, i.e. keypair, floating IP and SG - see for instance http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/servers/test_create_server.py#n55.\n\nAlso obtaining a remote client becomes easier if you do that, look at http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/servers/test_create_server.py#n118","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                                           server_id, state)"},{"line_number":254,"context_line":"        else:"},{"line_number":255,"context_line":"            # Make sure we can ssh into the server."},{"line_number":256,"context_line":"            # TODO(mriedem): Normally we\u0027d only do this if"},{"line_number":257,"context_line":"            # CONF.validation.run_validation was True."},{"line_number":258,"context_line":"            ip \u003d self.create_floating_ip(server)"},{"line_number":259,"context_line":"            ips \u003d self._get_ip_list(ip, keypair)"},{"line_number":260,"context_line":"            LOG.debug(\u0027ip addresses from server %s before live migration:\\n%s\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_faf1de6b","line":257,"range":{"start_line":256,"start_character":0,"end_line":257,"end_character":54},"updated":"2016-07-08 10:58:46.000000000","message":"I think we should honour the config flag. We will see the ssh check run in the neutron-ssh job, it\u0027s non-voting for now but we should be able to make it voting soon.","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        if state \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":278,"context_line":"            # Make sure we can ssh into the server."},{"line_number":279,"context_line":"            # TODO(mriedem): Normally we\u0027d only do this if"},{"line_number":280,"context_line":"            # CONF.validation.run_validation was True."},{"line_number":281,"context_line":"            ips \u003d self._get_ip_list(ip, keypair)"},{"line_number":282,"context_line":"            LOG.debug(\u0027ip addresses from server %s after live migration:\\n%s\u0027,"},{"line_number":283,"context_line":"                      server_id, ips)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_9a01ba3c","line":280,"range":{"start_line":279,"start_character":0,"end_line":280,"end_character":54},"updated":"2016-07-08 10:58:46.000000000","message":"Ditto","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"}],"tempest/common/waiters.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"1c5ef43f3ba1e72016046c510dd3e70d5f4baffe","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                    time.sleep(CONF.compute.ready_wait)"},{"line_number":60,"context_line":"                    return"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                return body"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        time.sleep(client.build_interval)"},{"line_number":65,"context_line":"        body \u003d client.show_server(server_id)[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_fc3a7e97","line":62,"updated":"2016-07-08 10:58:46.000000000","message":"Clever :) I guess it makes sense for the waiter to return the updates resource dict, we might want to have that in other waiters as well, but not in this patch","commit_id":"5b3c7fc4d3d402e3a79b7274537fd5d7de2b1514"}]}
