)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e50306c5db520ee77532a63babe0a3efbcfe9eb2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Scenario for hotplug nic"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Tests attaching new network to a live VM"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I5946134de7038a3a7da236dac7018c211cbcce97"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2BWfI%3D","line":9,"updated":"2014-01-28 21:26:04.000000000","message":"Hmm, this commit message could be a bit more descriptive and useful.\n\n1) Please describe the reasoning behind separating out the hotplug NIC test from the main basic ops scenario test (just summarize the ML discussion in a couple sentences please).\n\n2) Is there a bug or blueprint link for this work? If so, please use the appropriate external link line, for example:\n\n Closes-Bug: #123456\n\n3) The summary line should be more descriptive. How about this?\n\n New scenario test verifying add network to an active VM","commit_id":"b6d1347ec65a56b56d0c360be9286ef35a9ff8b0"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"6d4f41be570120143cfbbd76501f59535519da8c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Scenario for hotplug nic"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Tests attaching new network to a live VM"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I5946134de7038a3a7da236dac7018c211cbcce97"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUH%2F%2BMKQ%3D","line":9,"in_reply_to":"AAAAUH%2F%2BWfI%3D","updated":"2014-01-29 09:03:43.000000000","message":"This should be a part of this bp: add-scenario-tests-in-icehouse\n\nSo, I think the commit message should be:\n Partially Implements: blueprint add-scenario-tests-in-icehouse","commit_id":"b6d1347ec65a56b56d0c360be9286ef35a9ff8b0"}],"tempest/scenario/test_hotplug_nic.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e50306c5db520ee77532a63babe0a3efbcfe9eb2","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _create_servers(self):"},{"line_number":113,"context_line":"        name \u003d data_utils.rand_name(\u0027server-smoke\u0027)"},{"line_number":114,"context_line":"        self._create_server(name, self.networks[0])"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _create_and_associate_floating_ips(self):"},{"line_number":117,"context_line":"        public_network_id \u003d CONF.network.public_network_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BOyI%3D","line":114,"updated":"2014-01-28 21:26:04.000000000","message":"This method name should be renamed. It is not creating multiple servers. Rather, it just creating a randomly named server with the first network specification.\n\nHow about \"_create_random_server()\"?","commit_id":"b6d1347ec65a56b56d0c360be9286ef35a9ff8b0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e50306c5db520ee77532a63babe0a3efbcfe9eb2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            network\u003dself.new_net,"},{"line_number":150,"context_line":"            cidr_list\u003d(s.cidr for s in self.subnets),"},{"line_number":151,"context_line":"            gateway_ip\u003dNone)"},{"line_number":152,"context_line":"        self.subnets.append(self.new_subnet)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _hotplug_server(self):"},{"line_number":155,"context_line":"        [old_floating_ip] \u003d self.floating_ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BOvQ%3D","line":152,"updated":"2014-01-28 21:26:04.000000000","message":"This method name is also confusing. It is not creating multiple networks, but rather just creating a single network and then creating a subnet.\n\nYes, I know you may not have named the NetworkScenarioTest._create_networks() method, but please do change both here and on that class to better represent what the method does, which is create a *single* network, so it should be _create_network()","commit_id":"b6d1347ec65a56b56d0c360be9286ef35a9ff8b0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e50306c5db520ee77532a63babe0a3efbcfe9eb2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self.subnets.append(self.new_subnet)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _hotplug_server(self):"},{"line_number":155,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":156,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":157,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":158,"context_line":"        private_key \u003d self.servers[server].private_key"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BOtA%3D","line":155,"updated":"2014-01-28 21:26:04.000000000","message":"The above is quite a strange way to get the first key of a dict and actually, I had to break out my Python shell to figure out what it was doing. Also, if there are more than a single key in self.floating_ips, the above will raise ValueError about too many values to unpack:\n\n \u003e\u003e\u003e d \u003d dict(a\u003d1, b\u003d1)\n \u003e\u003e\u003e [a] \u003d d\n Traceback (most recent call last):\n   File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n ValueError: too many values to unpack\n\nI would recommend using a more conventional syntax, like:\n\n old_floating_ip, server \u003d self.floating_ips.items()[0]","commit_id":"b6d1347ec65a56b56d0c360be9286ef35a9ff8b0"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"973b8baf94100e983ecb83ccd0d0cf992d4b80d7","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _hotplug_server(self):"},{"line_number":259,"context_line":"        # get a floating_ip from a list of one item"},{"line_number":260,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":261,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":262,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":263,"context_line":"        private_key \u003d self.servers[server].private_key"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2BWfQ%3D","line":260,"updated":"2014-02-21 17:35:31.000000000","message":"I still think this style of Python is unusual and hard to read. Much better to just do:\n\n old_floating_ip \u003d self.floating_ips[0]\n\nThen you would not need to explain with a comment what you were doing...","commit_id":"2bdd3d8c401be1f19257618a04e4f0ccf5fb2031"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"c2a5e930e637e7dfd3da230b6bcde84c3aa5b49b","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _hotplug_server(self):"},{"line_number":259,"context_line":"        # get a floating_ip from a list of one item"},{"line_number":260,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":261,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":262,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":263,"context_line":"        private_key \u003d self.servers[server].private_key"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAU3%2F%2F%2BF4%3D","line":260,"in_reply_to":"AAAAUX%2F%2BWfQ%3D","updated":"2014-02-24 14:58:45.000000000","message":"Done","commit_id":"2bdd3d8c401be1f19257618a04e4f0ccf5fb2031"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"973b8baf94100e983ecb83ccd0d0cf992d4b80d7","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    def _hotplug_server(self):"},{"line_number":259,"context_line":"        # get a floating_ip from a list of one item"},{"line_number":260,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":261,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":262,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":263,"context_line":"        private_key \u003d self.servers[server].private_key"},{"line_number":264,"context_line":"        ssh_client \u003d self.get_remote_client(ip_address,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUX%2F%2BWdU%3D","line":261,"updated":"2014-02-21 17:35:31.000000000","message":"This is very confusing. You are looking up the value of the server in the self.floating_ips list, but old_floating_ip is not an integer -- it\u0027s an object, so I have no idea what this code is doing. If self.floating_ips is not a list, but a dict, then the comment on line 259 is wrong.","commit_id":"2bdd3d8c401be1f19257618a04e4f0ccf5fb2031"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1cffcb775aed5252ca03dcb19b4ae7c5fd2565a4","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    def _hotplug_server(self):"},{"line_number":259,"context_line":"        # get a floating_ip from a list of one item"},{"line_number":260,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":261,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":262,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":263,"context_line":"        private_key \u003d self.servers[server].private_key"},{"line_number":264,"context_line":"        ssh_client \u003d self.get_remote_client(ip_address,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAU3%2F%2F8n4%3D","line":261,"in_reply_to":"AAAAU3%2F%2F%2Fm4%3D","updated":"2014-02-23 18:37:09.000000000","message":"Yair, it is still very confusing and an uncommon (I\u0027ve never once seen this used) syntax for getting the first key out of a dict (or list, BTW).\n\nThe response to a review saying \"this code is quite unreadable and does not follow common Python idioms) is not to say \"you should go look at the code\".","commit_id":"2bdd3d8c401be1f19257618a04e4f0ccf5fb2031"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"c2a5e930e637e7dfd3da230b6bcde84c3aa5b49b","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    def _hotplug_server(self):"},{"line_number":259,"context_line":"        # get a floating_ip from a list of one item"},{"line_number":260,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":261,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":262,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":263,"context_line":"        private_key \u003d self.servers[server].private_key"},{"line_number":264,"context_line":"        ssh_client \u003d self.get_remote_client(ip_address,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAU3%2F%2F%2BF8%3D","line":261,"in_reply_to":"AAAAUX%2F%2BWdU%3D","updated":"2014-02-24 14:58:45.000000000","message":"Jay\nWhen I refered the code, I meant that, since I know this specific module by heart, I find these definitions trivial. I don\u0027t know how familiar you are with this module, especially since it has changed a lot recently. I simply hoped that putting the definitions into context might ease your objection a little. I did not mean to offend in any way, and I apologize if I came across as brash and dismissive. It\u0027s probably due to language barrier and the late hour\n\nTo the point - I am relatively new to python, but I find the approach you suggest (a \u003d list[0]) problematic, because it\u0027s both too specific and at the same time implies the existence of more items in the list/dict, while the dict in question is intended as a collection of a single item (pairing a FLIP with a VM). I remember it being confusing when I first read this code, and I might be over-correcting.\n\nPlease see my new patch. I hope it\u0027s clearer.\nhttps://review.openstack.org/#/c/75887/","commit_id":"2bdd3d8c401be1f19257618a04e4f0ccf5fb2031"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"ced8dacc32326bacd10a13f7b88728f6218ccfc4","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    def _hotplug_server(self):"},{"line_number":259,"context_line":"        # get a floating_ip from a list of one item"},{"line_number":260,"context_line":"        [old_floating_ip] \u003d self.floating_ips"},{"line_number":261,"context_line":"        server \u003d self.floating_ips[old_floating_ip]"},{"line_number":262,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":263,"context_line":"        private_key \u003d self.servers[server].private_key"},{"line_number":264,"context_line":"        ssh_client \u003d self.get_remote_client(ip_address,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAU3%2F%2F%2Fm4%3D","line":261,"in_reply_to":"AAAAUX%2F%2BWdU%3D","updated":"2014-02-22 19:38:21.000000000","message":"You might want to check the complete file for the definitions. \nself.floating_ips is a dict, where it\u0027s keys are FLIP and it\u0027s values are servers\n\ndict returns dict.keys() by default","commit_id":"2bdd3d8c401be1f19257618a04e4f0ccf5fb2031"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"24b050f5637ef5e0d53754b9990f261b6e4246ae","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    def _hotplug_server(self):"},{"line_number":235,"context_line":"        old_floating_ip, server \u003d self.floating_ip_tuple"},{"line_number":236,"context_line":"        ip_address \u003d old_floating_ip.floating_ip_address"},{"line_number":237,"context_line":"        private_key \u003d self.servers[server].private_key"},{"line_number":238,"context_line":"        ssh_client \u003d self.get_remote_client(ip_address,"},{"line_number":239,"context_line":"                                            private_key\u003dprivate_key)"},{"line_number":240,"context_line":"        old_nic_list \u003d self._get_server_nics(ssh_client)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2F1fQ%3D","line":237,"updated":"2014-02-24 15:24:54.000000000","message":"Above is much, much clearer, thank you! :)","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"24b050f5637ef5e0d53754b9990f261b6e4246ae","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                                            private_key\u003dprivate_key)"},{"line_number":240,"context_line":"        old_nic_list \u003d self._get_server_nics(ssh_client)"},{"line_number":241,"context_line":"        # get a port from a list of one item"},{"line_number":242,"context_line":"        [old_port] \u003d self._list_ports(device_id\u003dserver.id)"},{"line_number":243,"context_line":"        self.compute_client.servers.interface_attach(server\u003dserver,"},{"line_number":244,"context_line":"                                                     net_id\u003dself.new_net.id,"},{"line_number":245,"context_line":"                                                     port_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2F1e8%3D","line":242,"updated":"2014-02-24 15:24:54.000000000","message":"Is it possible to do something similar here, where the [x] \u003d t construct is used?","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"755221457adf5cb79845f4c95b9294b5aa3e42a0","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                                            private_key\u003dprivate_key)"},{"line_number":240,"context_line":"        old_nic_list \u003d self._get_server_nics(ssh_client)"},{"line_number":241,"context_line":"        # get a port from a list of one item"},{"line_number":242,"context_line":"        [old_port] \u003d self._list_ports(device_id\u003dserver.id)"},{"line_number":243,"context_line":"        self.compute_client.servers.interface_attach(server\u003dserver,"},{"line_number":244,"context_line":"                                                     net_id\u003dself.new_net.id,"},{"line_number":245,"context_line":"                                                     port_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FzuE%3D","line":242,"in_reply_to":"AAAAU3%2F%2F1e8%3D","updated":"2014-02-24 18:11:13.000000000","message":"see review message","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"24b050f5637ef5e0d53754b9990f261b6e4246ae","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            return len(port_list) \u003d\u003d 1"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        test.call_until_true(check_ports, 60, 1)"},{"line_number":257,"context_line":"        [new_port] \u003d [p for p in"},{"line_number":258,"context_line":"                      self._list_ports(device_id\u003dserver.id)"},{"line_number":259,"context_line":"                      if p !\u003d old_port]"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2F1e4%3D","line":257,"updated":"2014-02-24 15:24:54.000000000","message":"And here?","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"755221457adf5cb79845f4c95b9294b5aa3e42a0","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            return len(port_list) \u003d\u003d 1"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        test.call_until_true(check_ports, 60, 1)"},{"line_number":257,"context_line":"        [new_port] \u003d [p for p in"},{"line_number":258,"context_line":"                      self._list_ports(device_id\u003dserver.id)"},{"line_number":259,"context_line":"                      if p !\u003d old_port]"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2Fzts%3D","line":257,"in_reply_to":"AAAAU3%2F%2F1e4%3D","updated":"2014-02-24 18:11:13.000000000","message":"same answer","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"24b050f5637ef5e0d53754b9990f261b6e4246ae","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        new_port \u003d net_common.DeletablePort(client\u003dself.network_client,"},{"line_number":262,"context_line":"                                            **new_port)"},{"line_number":263,"context_line":"        new_nic_list \u003d self._get_server_nics(ssh_client)"},{"line_number":264,"context_line":"        [(num, new_nic)] \u003d [n for n in new_nic_list if n not in old_nic_list]"},{"line_number":265,"context_line":"        ssh_client.assign_static_ip(nic\u003dnew_nic,"},{"line_number":266,"context_line":"                                    addr\u003dnew_port.fixed_ips[0][\u0027ip_address\u0027])"},{"line_number":267,"context_line":"        ssh_client.turn_nic_on(nic\u003dnew_nic)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2F1e0%3D","line":264,"updated":"2014-02-24 15:24:54.000000000","message":"And here? :)","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"755221457adf5cb79845f4c95b9294b5aa3e42a0","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        new_port \u003d net_common.DeletablePort(client\u003dself.network_client,"},{"line_number":262,"context_line":"                                            **new_port)"},{"line_number":263,"context_line":"        new_nic_list \u003d self._get_server_nics(ssh_client)"},{"line_number":264,"context_line":"        [(num, new_nic)] \u003d [n for n in new_nic_list if n not in old_nic_list]"},{"line_number":265,"context_line":"        ssh_client.assign_static_ip(nic\u003dnew_nic,"},{"line_number":266,"context_line":"                                    addr\u003dnew_port.fixed_ips[0][\u0027ip_address\u0027])"},{"line_number":267,"context_line":"        ssh_client.turn_nic_on(nic\u003dnew_nic)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2Fztg%3D","line":264,"in_reply_to":"AAAAU3%2F%2F1e0%3D","updated":"2014-02-24 18:11:13.000000000","message":"and here as well","commit_id":"180e65eb26e0cc7038d7652b920dd4aaed1ee9f7"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"b7b953a0554b5419faf1559f98329b67bb88637a","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                         if port !\u003d old_port]"},{"line_number":256,"context_line":"            return len(port_list) \u003d\u003d 1"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        test.call_until_true(check_ports, 60, 1, \"Failed to add port\")"},{"line_number":259,"context_line":"        new_port_list \u003d [p for p in"},{"line_number":260,"context_line":"                         self._list_ports(device_id\u003dserver.id)"},{"line_number":261,"context_line":"                         if p !\u003d old_port]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2Fx8U%3D","line":258,"updated":"2014-02-24 20:28:08.000000000","message":"Too many arguments.","commit_id":"a83c3c0802bab25ad58701e4765b0b2a9f740a62"}]}
