)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added 2 nics of the same network to an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Steps :"},{"line_number":10,"context_line":"Boot a VM with 2 ports that are of the same network"},{"line_number":11,"context_line":"Attach a floating IP to the 1st port"},{"line_number":12,"context_line":"Check that the Tempest host can perform key-based authentication to an"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a8bc5a2_a6acc38c","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":7},"updated":"2016-09-27 12:33:34.000000000","message":"I\u0027d remove this and put up smaller and clearer description of what this test intends to do","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"fe5a5982a11a89a3496ace10c0bc58e0252ddae7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added 2 nics of the same network to an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Steps :"},{"line_number":10,"context_line":"Boot a VM with 2 ports that are of the same network"},{"line_number":11,"context_line":"Attach a floating IP to the 1st port"},{"line_number":12,"context_line":"Check that the Tempest host can perform key-based authentication to an"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a8bc5a2_aa244faf","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":7},"in_reply_to":"5a8bc5a2_a6acc38c","updated":"2016-09-28 09:21:47.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2ea846ecfc37fb8b70886119f697cdb1717b0dc0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added 2 nics of the same network to an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Boot a VM with 2 ports that are of the same network"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I3fe91a6efdc426882a63e5b710a6f519062290b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"7a77a97e_21d130ce","line":9,"updated":"2016-11-22 10:59:16.000000000","message":"It is not the longest commit message I ever saw.\nIf you need to re-spin this change for whatever reason please extend the commit message as well.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"623df1b9bad01b036436e9cc6915d33e96eb5502","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added 2 nics of the same network to an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Boot a VM with 2 ports that are of the same network"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I3fe91a6efdc426882a63e5b710a6f519062290b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"5a74a57a_8ea43d4b","line":9,"in_reply_to":"7a77a97e_21d130ce","updated":"2016-11-29 13:03:06.000000000","message":"Done","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"}],"tempest/common/utils/linux/remote_client.py":[{"author":{"_account_id":16615,"name":"abregman","email":"abregman@redhat.com","username":"abregman"},"change_message_id":"84d1d04e8d9c01d12880c25aca3bbafd6e6de8d0","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return self.exec_command(cmd)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def set_udhcpc_on_interface(self, nic):"},{"line_number":197,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {nic}\".format(nic\u003dnic)"},{"line_number":198,"context_line":"        return self.exec_command(cmd)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_9f629715","line":197,"range":{"start_line":197,"start_character":13,"end_line":197,"end_character":58},"updated":"2016-09-28 12:54:33.000000000","message":"Change it to \"sudo cirros-dhcpc up {}\".format(nic)","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"b4a4b352a2179b6029ad9ad6a793cb5897dfd33c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        return self.exec_command(cmd)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def set_udhcpc_on_interface(self, nic):"},{"line_number":197,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {nic}\".format(nic\u003dnic)"},{"line_number":198,"context_line":"        return self.exec_command(cmd)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_b1775bd3","line":197,"range":{"start_line":197,"start_character":13,"end_line":197,"end_character":58},"in_reply_to":"3a98d1f4_9f629715","updated":"2016-09-29 06:01:37.000000000","message":"Done","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"210ca95b68a8ad90df5aba910827fabb9f450211","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_udhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {}\".format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_5605e8b9","line":196,"updated":"2016-10-31 14:53:09.000000000","message":"This method sounds too cirros specific, how difficult would be to support little more image like the below `def renew_lease` ?","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7225773e42ab881c7ae030ac8d3909a5ec19a976","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_udhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {}\".format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_600edbe6","line":196,"in_reply_to":"ba5da102_5605e8b9","updated":"2016-11-07 09:47:40.000000000","message":"Done","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"0aad0d3620a368e64f1404b2fab749bed925046d","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_udhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {}\".format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a629dbe_122bcbec","line":196,"in_reply_to":"ba5da102_600edbe6","updated":"2016-11-07 16:50:38.000000000","message":"+1, It\u0027d be better to try to make it more generic, otherwise it could affect some projects which use centos7 as an image instead of cirros. i.e. http://logs.openstack.org/56/386556/5/check/gate-ansible-role-cloud-launcher-dsvm-ansible-func-centos-7/67fa365/","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"1cff2f9030b290236f9fefad487639c988125d85","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        supported_os \u003d [\u0027cirros\u0027]"},{"line_number":207,"context_line":"        for os in supported_os:"},{"line_number":208,"context_line":"            if os in CONF.scenario.img_file:"},{"line_number":209,"context_line":"                break"},{"line_number":210,"context_line":"        else:"},{"line_number":211,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_ceed108d","line":208,"updated":"2016-11-08 10:25:00.000000000","message":"I have doubts about we really want to figure out the distro based on the file name.\n\nAdding an option for dhcp client command sounds more generic, and less image specific idea.","commit_id":"caa404c9e995857c2a17460818d5913a886f4b21"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"35bc2957cd6226bc9beb9df3f1932af625275a88","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        supported_os \u003d [\u0027cirros\u0027]"},{"line_number":207,"context_line":"        for os in supported_os:"},{"line_number":208,"context_line":"            if os in CONF.scenario.img_file:"},{"line_number":209,"context_line":"                break"},{"line_number":210,"context_line":"        else:"},{"line_number":211,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a629dbe_e879dffd","line":208,"in_reply_to":"9a629dbe_ceed108d","updated":"2016-11-08 13:45:50.000000000","message":"Done","commit_id":"caa404c9e995857c2a17460818d5913a886f4b21"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"eac5a0313bdaefc6dde3b56ee852776e90a572b0","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _set_udhcpc_on_interface_cirros_dhcpc(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {}\".format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def set_udhcpc_on_interface(self, nic, dhcp_client\u003d\u0027cirros_dhcpc\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a629dbe_fdfed636","line":196,"updated":"2016-11-09 08:25:44.000000000","message":"Is it really the only way to this with cirros ?","commit_id":"834bf993036916f6f1b173a1716a2f548a75ec87"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"92aa9dd96ba610e1e3412f11c6259139be49a96e","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _set_udhcpc_on_interface_cirros_dhcpc(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d \"sudo cirros-dhcpc up {}\".format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def set_udhcpc_on_interface(self, nic, dhcp_client\u003d\u0027cirros_dhcpc\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a629dbe_9c16b353","line":196,"in_reply_to":"9a629dbe_fdfed636","updated":"2016-11-09 12:05:19.000000000","message":"Seems like it, \nWhen trying to use \u0027udhcpc -i eth1\u0027, I\u0027m getting :\n\nWARN: \u0027/usr/share/udhcpc/default.script\u0027 should not be used in cirros . Replaced by cirros-udhcpc","commit_id":"834bf993036916f6f1b173a1716a2f548a75ec87"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"eac5a0313bdaefc6dde3b56ee852776e90a572b0","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        * cirros-dhcpc"},{"line_number":204,"context_line":"        \"\"\""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        supported_dhcp_clients \u003d [\u0027cirros_dhcpc\u0027]"},{"line_number":207,"context_line":"        if dhcp_client not in supported_dhcp_clients:"},{"line_number":208,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("},{"line_number":209,"context_line":"                \u0027dhcp client %s is not supported\u0027 % dhcp_client)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a629dbe_1d838a99","line":206,"updated":"2016-11-09 08:25:44.000000000","message":"If it cannot be done in way to have an intersection with renew_lease method, might be better to make the full command as a new config option, defaulting to the one works with cirros.","commit_id":"834bf993036916f6f1b173a1716a2f548a75ec87"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"92aa9dd96ba610e1e3412f11c6259139be49a96e","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        * cirros-dhcpc"},{"line_number":204,"context_line":"        \"\"\""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        supported_dhcp_clients \u003d [\u0027cirros_dhcpc\u0027]"},{"line_number":207,"context_line":"        if dhcp_client not in supported_dhcp_clients:"},{"line_number":208,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("},{"line_number":209,"context_line":"                \u0027dhcp client %s is not supported\u0027 % dhcp_client)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a629dbe_dc082b30","line":206,"in_reply_to":"9a629dbe_1d838a99","updated":"2016-11-09 12:05:19.000000000","message":"Done","commit_id":"834bf993036916f6f1b173a1716a2f548a75ec87"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"77dba3734a3220652b4bca21d44780b6afc1e982","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd + \u0027 {}\u0027.format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_f2ab7a87","line":196,"updated":"2016-11-16 09:33:28.000000000","message":"\u0027{}\u0027 should be part of the config option.\nWe should may use more friendly version like \u0027{nic}\u0027 or \u0027%s\u0027 .\n\nAFAIK all possible similar command accepts the \u0027if\u0027 name as last argument, but I do not really want to change the option\u0027s meaning  when some realities it is not true.","commit_id":"783236b40b885d931f16841a3d6da5a9ead92aa7"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"c69f2c5ee20cfc0315ab994c3f1996e571fddfee","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd + \u0027 {}\u0027.format(nic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_5626dbce","line":196,"in_reply_to":"7a77a97e_f2ab7a87","updated":"2016-11-16 14:59:54.000000000","message":"Done","commit_id":"783236b40b885d931f16841a3d6da5a9ead92aa7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c193cf423d2ca9d995ec1ced856e67414675e94a","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"},{"line_number":200,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":201,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":202,"context_line":"        nic_name \u003d self.get_nic_name_by_ip(fixed_ip)"},{"line_number":203,"context_line":"        pid \u003d self.exec_command(\u0027cat {path}{nic}.pid\u0027."},{"line_number":204,"context_line":"                                format(path\u003dfile_path, nic\u003dnic_name))"},{"line_number":205,"context_line":"        pid \u003d pid.strip()"},{"line_number":206,"context_line":"        self.send_signal(pid, \u0027USR1\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _renew_lease_dhclient(self, fixed_ip\u003dNone):"},{"line_number":209,"context_line":"        \"\"\"Renews DHCP lease via dhclient client. \"\"\""},{"line_number":210,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 sudo /sbin/dhclient\""},{"line_number":211,"context_line":"        self.exec_command(cmd)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def renew_lease(self, fixed_ip\u003dNone):"},{"line_number":214,"context_line":"        \"\"\"Wrapper method for renewing DHCP lease via given client"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_3344a8b5","line":211,"range":{"start_line":195,"start_character":0,"end_line":211,"end_character":30},"updated":"2016-11-28 16:20:38.000000000","message":"I\u0027m sure I understand the difference between /sbin/dhclient and cirros-dhcpc.\nIn my understanding the existing two helpers allow renewing a lease by IP, the new helper allows setting a DHCP lease by NIC. \nThe existing helpers support two types of hardcoded DHCP clients, while the new helper allows configuring the command to be used.\nThe result seems rather confusing to me.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"623df1b9bad01b036436e9cc6915d33e96eb5502","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _renew_lease_udhcpc(self, fixed_ip\u003dNone):"},{"line_number":200,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":201,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":202,"context_line":"        nic_name \u003d self.get_nic_name_by_ip(fixed_ip)"},{"line_number":203,"context_line":"        pid \u003d self.exec_command(\u0027cat {path}{nic}.pid\u0027."},{"line_number":204,"context_line":"                                format(path\u003dfile_path, nic\u003dnic_name))"},{"line_number":205,"context_line":"        pid \u003d pid.strip()"},{"line_number":206,"context_line":"        self.send_signal(pid, \u0027USR1\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _renew_lease_dhclient(self, fixed_ip\u003dNone):"},{"line_number":209,"context_line":"        \"\"\"Renews DHCP lease via dhclient client. \"\"\""},{"line_number":210,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 sudo /sbin/dhclient\""},{"line_number":211,"context_line":"        self.exec_command(cmd)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def renew_lease(self, fixed_ip\u003dNone):"},{"line_number":214,"context_line":"        \"\"\"Wrapper method for renewing DHCP lease via given client"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_ee9db10a","line":211,"range":{"start_line":195,"start_character":0,"end_line":211,"end_character":30},"in_reply_to":"5a74a57a_3344a8b5","updated":"2016-11-29 13:03:06.000000000","message":"relates to my question on config.py","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"14500a65500ba51461c827999b167aa27f938d8a","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_b6bbb474","line":195,"updated":"2016-12-20 09:40:48.000000000","message":"That method doesn\u0027t have a clear name and is unlikely to be reused. Given that this remote_client.py is already overbloatted, please inline the code and don\"t introduce a new function.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"690cddac8cf2e9b692265bda3f671aa448d06859","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_8c6ce49d","line":195,"in_reply_to":"1a6eadb0_27e77013","updated":"2016-12-20 11:23:22.000000000","message":"I think we should work the other way around. We shouldn\u0027t assume that any code is going to be reused in the future. Otherwise this leads to fat base class and tons of helpers, which is bad.\n\nWe should refactor and create reusable functions when need be.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_5f06f0ce","line":195,"in_reply_to":"1a6eadb0_8c6ce49d","updated":"2017-01-04 15:54:29.000000000","message":"Done","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_ff6ec494","line":195,"in_reply_to":"1a6eadb0_b6bbb474","updated":"2017-01-04 15:54:29.000000000","message":"Done","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"131da8cab6a1a31a171472fbf0c6e093eed0b643","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":193,"context_line":"        return self.exec_command(cmd)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def set_dhcpc_on_interface(self, nic):"},{"line_number":196,"context_line":"        cmd \u003d CONF.scenario.img_dhcp_client_cmd.format(nic\u003dnic)"},{"line_number":197,"context_line":"        return self.exec_command(cmd)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_27e77013","line":195,"in_reply_to":"1a6eadb0_b6bbb474","updated":"2016-12-20 10:22:39.000000000","message":"Even if remote_client.py has quite a few things now, I don\u0027t think that putting this inline would be a good solution, as could be prone to duplication later on.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"14500a65500ba51461c827999b167aa27f938d8a","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        * dhclient"},{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        # TODO(yfried): add support for dhcpcd"},{"line_number":221,"context_line":"        supported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":222,"context_line":"        dhcp_client \u003d CONF.scenario.dhcp_client"},{"line_number":223,"context_line":"        if dhcp_client not in supported_clients:"},{"line_number":224,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_611dd865","line":221,"updated":"2016-12-20 09:40:48.000000000","message":"Add your new dhcp client here.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"131da8cab6a1a31a171472fbf0c6e093eed0b643","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        * dhclient"},{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        # TODO(yfried): add support for dhcpcd"},{"line_number":221,"context_line":"        supported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":222,"context_line":"        dhcp_client \u003d CONF.scenario.dhcp_client"},{"line_number":223,"context_line":"        if dhcp_client not in supported_clients:"},{"line_number":224,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_a7b9c0ee","line":221,"in_reply_to":"1a6eadb0_611dd865","updated":"2016-12-20 10:22:39.000000000","message":"+1","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        * dhclient"},{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        # TODO(yfried): add support for dhcpcd"},{"line_number":221,"context_line":"        supported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":222,"context_line":"        dhcp_client \u003d CONF.scenario.dhcp_client"},{"line_number":223,"context_line":"        if dhcp_client not in supported_clients:"},{"line_number":224,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_19ef21b1","line":221,"in_reply_to":"1a6eadb0_a7b9c0ee","updated":"2017-01-04 15:54:29.000000000","message":"We need udhcpc for renew,\nAnd we also need cirros-dhcpc for enabling dhcp and sending the request for the 1st time.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"14500a65500ba51461c827999b167aa27f938d8a","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        # TODO(yfried): add support for dhcpcd"},{"line_number":221,"context_line":"        supported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":222,"context_line":"        dhcp_client \u003d CONF.scenario.dhcp_client"},{"line_number":223,"context_line":"        if dhcp_client not in supported_clients:"},{"line_number":224,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("},{"line_number":225,"context_line":"                \u0027%s DHCP client unsupported\u0027 % dhcp_client)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_a12530af","line":222,"updated":"2016-12-20 09:40:48.000000000","message":"And edit this config flag instead of introducing a new one.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        # TODO(yfried): add support for dhcpcd"},{"line_number":221,"context_line":"        supported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":222,"context_line":"        dhcp_client \u003d CONF.scenario.dhcp_client"},{"line_number":223,"context_line":"        if dhcp_client not in supported_clients:"},{"line_number":224,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("},{"line_number":225,"context_line":"                \u0027%s DHCP client unsupported\u0027 % dhcp_client)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_9902316e","line":222,"in_reply_to":"1a6eadb0_27ce9083","updated":"2017-01-04 15:54:29.000000000","message":"relates to my comment above.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"131da8cab6a1a31a171472fbf0c6e093eed0b643","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        \"\"\""},{"line_number":220,"context_line":"        # TODO(yfried): add support for dhcpcd"},{"line_number":221,"context_line":"        supported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":222,"context_line":"        dhcp_client \u003d CONF.scenario.dhcp_client"},{"line_number":223,"context_line":"        if dhcp_client not in supported_clients:"},{"line_number":224,"context_line":"            raise tempest.lib.exceptions.InvalidConfiguration("},{"line_number":225,"context_line":"                \u0027%s DHCP client unsupported\u0027 % dhcp_client)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_27ce9083","line":222,"in_reply_to":"1a6eadb0_a12530af","updated":"2016-12-20 10:22:39.000000000","message":"+1","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"}],"tempest/config.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"77dba3734a3220652b4bca21d44780b6afc1e982","unresolved":false,"context_lines":[{"line_number":941,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":942,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up\u0027,"},{"line_number":943,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":944,"context_line":"                    \u0027lease. \u0027)"},{"line_number":945,"context_line":"]"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_5278ae2b","line":944,"updated":"2016-11-16 09:33:28.000000000","message":"The ifname append thing should be mentioned here.","commit_id":"783236b40b885d931f16841a3d6da5a9ead92aa7"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"c69f2c5ee20cfc0315ab994c3f1996e571fddfee","unresolved":false,"context_lines":[{"line_number":941,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":942,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up\u0027,"},{"line_number":943,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":944,"context_line":"                    \u0027lease. \u0027)"},{"line_number":945,"context_line":"]"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a77a97e_690f782e","line":944,"in_reply_to":"7a77a97e_5278ae2b","updated":"2016-11-16 14:59:54.000000000","message":"Done","commit_id":"783236b40b885d931f16841a3d6da5a9ead92aa7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c193cf423d2ca9d995ec1ced856e67414675e94a","unresolved":false,"context_lines":[{"line_number":938,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"},{"line_number":939,"context_line":"                    \u0027If left empty, update operation will be skipped. \u0027"},{"line_number":940,"context_line":"                    \u0027Supported clients: \"udhcpc\", \"dhclient\"\u0027),"},{"line_number":941,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":942,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up {nic}\u0027,"},{"line_number":943,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":944,"context_line":"                    \u0027lease. \u0027)"},{"line_number":945,"context_line":"]"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_a79eae04","line":944,"range":{"start_line":941,"start_character":0,"end_line":944,"end_character":30},"updated":"2016-11-28 16:20:38.000000000","message":"This seems to overlap with the option just above.\n\n\nAs a side comment: remote client provides a python abstraction of commands to be executed against VMs, but this goes in a different direction. As we don\u0027t really want to maintain in Tempest a set of commands specific to different guest VMs, this may an alternative, but the list of commands here could grow quickly.\n\nThis is one of the problems I originally wanted to address by introducing a resources.yaml, i.e. a different place where to configure all guest VMs specific commands.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7e6cbf42ca9ee3217baeab1dd50d2c1a0b50f304","unresolved":false,"context_lines":[{"line_number":938,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"},{"line_number":939,"context_line":"                    \u0027If left empty, update operation will be skipped. \u0027"},{"line_number":940,"context_line":"                    \u0027Supported clients: \"udhcpc\", \"dhclient\"\u0027),"},{"line_number":941,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":942,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up {nic}\u0027,"},{"line_number":943,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":944,"context_line":"                    \u0027lease. \u0027)"},{"line_number":945,"context_line":"]"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_7f27d1c9","line":944,"range":{"start_line":941,"start_character":0,"end_line":944,"end_character":30},"in_reply_to":"1a6eadb0_440b332a","updated":"2016-12-15 16:11:32.000000000","message":"Done","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c7283cead28f0a1a9d840615090cc1fd87084b8a","unresolved":false,"context_lines":[{"line_number":938,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"},{"line_number":939,"context_line":"                    \u0027If left empty, update operation will be skipped. \u0027"},{"line_number":940,"context_line":"                    \u0027Supported clients: \"udhcpc\", \"dhclient\"\u0027),"},{"line_number":941,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":942,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up {nic}\u0027,"},{"line_number":943,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":944,"context_line":"                    \u0027lease. \u0027)"},{"line_number":945,"context_line":"]"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_440b332a","line":944,"range":{"start_line":941,"start_character":0,"end_line":944,"end_character":30},"in_reply_to":"5a74a57a_13a77a0b","updated":"2016-12-15 15:06:06.000000000","message":"So after chatting I understand now the difference between the existing and the new option. The existing option can be used to refresh a dhcp lease, while the new one is used to setup a new one.\n\nI like the approach of specifying the command to be used, as opposed to choices, because we don\u0027t really officially support any list of choices there, only what we test in the gate. \n\nHaving the command in the config option makes it easier for folks to try and run this using a different guest, with no need to make a code change (i.e. add on command to the list) which would not be tested in the gate anyways.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"623df1b9bad01b036436e9cc6915d33e96eb5502","unresolved":false,"context_lines":[{"line_number":938,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"},{"line_number":939,"context_line":"                    \u0027If left empty, update operation will be skipped. \u0027"},{"line_number":940,"context_line":"                    \u0027Supported clients: \"udhcpc\", \"dhclient\"\u0027),"},{"line_number":941,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":942,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up {nic}\u0027,"},{"line_number":943,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":944,"context_line":"                    \u0027lease. \u0027)"},{"line_number":945,"context_line":"]"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_13a77a0b","line":944,"range":{"start_line":941,"start_character":0,"end_line":944,"end_character":30},"in_reply_to":"5a74a57a_a79eae04","updated":"2016-11-29 13:03:06.000000000","message":"My intention here was to add this option since \"cirros-dhcpc\" is cirros specific.\nAnd in the future, if one wants to use other OS vendor on guest VM\u0027s  (e.g. fedora), he\u0027ll be able to add support for fedora\u0027s dhcp client cli here.\n\nHow would you suggest to deal with that with the current infrastructure ?","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"14500a65500ba51461c827999b167aa27f938d8a","unresolved":false,"context_lines":[{"line_number":941,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"},{"line_number":942,"context_line":"                    \u0027If left empty, update operation will be skipped. \u0027"},{"line_number":943,"context_line":"                    \u0027Supported clients: \"udhcpc\", \"dhclient\"\u0027),"},{"line_number":944,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":945,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up {nic}\u0027,"},{"line_number":946,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":947,"context_line":"                    \u0027lease. \u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_614b185a","line":944,"updated":"2016-12-20 09:40:48.000000000","message":"No need to introduce a new config flag. There\u0027s already dhcp_client config option.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":941,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"},{"line_number":942,"context_line":"                    \u0027If left empty, update operation will be skipped. \u0027"},{"line_number":943,"context_line":"                    \u0027Supported clients: \"udhcpc\", \"dhclient\"\u0027),"},{"line_number":944,"context_line":"    cfg.StrOpt(\u0027img_dhcp_client_cmd\u0027,"},{"line_number":945,"context_line":"               default\u003d\u0027sudo cirros-dhcpc up {nic}\u0027,"},{"line_number":946,"context_line":"               help\u003d\u0027DHCPC client command used by images to set a new DCHP \u0027"},{"line_number":947,"context_line":"                    \u0027lease. \u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_5909a9dc","line":944,"in_reply_to":"1a6eadb0_614b185a","updated":"2017-01-04 15:54:29.000000000","message":"We\u0027re using udhcpc client on test_subnet_details, there it is used for re-sending a lease request.\n\nFor enabling (and sending dhcp lease request for the 1st time) we have to use cirros-dhcpc .\n\nWe need both of them in a single configuration.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"}],"tempest/scenario/manager.py":[{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":801,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":802,"context_line":"# since  liberty, it is alloud to have more than 1 port per network, arbiterely take the 1st one"},{"line_number":803,"context_line":"#         self.assertEqual(len(port_map), 1,"},{"line_number":804,"context_line":"#                          \"Found multiple IPv4 addresses: %s. \""},{"line_number":805,"context_line":"#                          \"Unable to determine which port to target.\""},{"line_number":806,"context_line":"#                          % port_map)"},{"line_number":807,"context_line":"        return port_map[0]"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_network_by_name(self, network_name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_e6eb2b11","line":806,"range":{"start_line":802,"start_character":0,"end_line":806,"end_character":38},"updated":"2016-09-27 12:33:34.000000000","message":"In general, please make sure that your commit passes pep8.","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"7ad2bdc394aaa80458027d9533e3fe16578e2f75","unresolved":false,"context_lines":[{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":801,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":802,"context_line":"# since  liberty, it is alloud to have more than 1 port per network, arbiterely take the 1st one"},{"line_number":803,"context_line":"#         self.assertEqual(len(port_map), 1,"},{"line_number":804,"context_line":"#                          \"Found multiple IPv4 addresses: %s. \""},{"line_number":805,"context_line":"#                          \"Unable to determine which port to target.\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_2d2a14e8","line":802,"range":{"start_line":802,"start_character":24,"end_line":802,"end_character":30},"updated":"2016-09-28 11:19:22.000000000","message":"allowed","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"7ad2bdc394aaa80458027d9533e3fe16578e2f75","unresolved":false,"context_lines":[{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":801,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":802,"context_line":"# since  liberty, it is alloud to have more than 1 port per network, arbiterely take the 1st one"},{"line_number":803,"context_line":"#         self.assertEqual(len(port_map), 1,"},{"line_number":804,"context_line":"#                          \"Found multiple IPv4 addresses: %s. \""},{"line_number":805,"context_line":"#                          \"Unable to determine which port to target.\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_4d7da0e6","line":802,"range":{"start_line":802,"start_character":67,"end_line":802,"end_character":96},"updated":"2016-09-28 11:19:22.000000000","message":"please split this into another line. In addition, change arbiterely\u003d\u003earbitrarily and please follow the spacing when it comes to the comment.","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"7ad2bdc394aaa80458027d9533e3fe16578e2f75","unresolved":false,"context_lines":[{"line_number":800,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":801,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":802,"context_line":"# since  liberty, it is alloud to have more than 1 port per network, arbiterely take the 1st one"},{"line_number":803,"context_line":"#         self.assertEqual(len(port_map), 1,"},{"line_number":804,"context_line":"#                          \"Found multiple IPv4 addresses: %s. \""},{"line_number":805,"context_line":"#                          \"Unable to determine which port to target.\""},{"line_number":806,"context_line":"#                          % port_map)"},{"line_number":807,"context_line":"        return port_map[0]"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_network_by_name(self, network_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_edf10c97","line":806,"range":{"start_line":803,"start_character":0,"end_line":806,"end_character":38},"updated":"2016-09-28 11:19:22.000000000","message":"Why do you keep this part commented in the code?","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"b4a4b352a2179b6029ad9ad6a793cb5897dfd33c","unresolved":false,"context_lines":[{"line_number":800,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":801,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":802,"context_line":"# since  liberty, it is alloud to have more than 1 port per network, arbiterely take the 1st one"},{"line_number":803,"context_line":"#         self.assertEqual(len(port_map), 1,"},{"line_number":804,"context_line":"#                          \"Found multiple IPv4 addresses: %s. \""},{"line_number":805,"context_line":"#                          \"Unable to determine which port to target.\""},{"line_number":806,"context_line":"#                          % port_map)"},{"line_number":807,"context_line":"        return port_map[0]"},{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_network_by_name(self, network_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_6c097c2c","line":806,"range":{"start_line":803,"start_character":0,"end_line":806,"end_character":38},"in_reply_to":"5a8bc5a2_edf10c97","updated":"2016-09-29 06:01:37.000000000","message":"Can I just take it out?\nor do we need to still support this check for versions older then liberty","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"210ca95b68a8ad90df5aba910827fabb9f450211","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":812,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":813,"context_line":"        self.assertEqual(len(port_map), 1,"},{"line_number":814,"context_line":"                         \"Found multiple IPv4 addresses: %s. \""},{"line_number":815,"context_line":"                         \"Unable to determine which port to target.\""},{"line_number":816,"context_line":"                         % port_map)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_7674acfc","side":"PARENT","line":813,"updated":"2016-10-31 14:53:09.000000000","message":"We should live here at least note about: it is possible we have multiple addresses and we just ignore the rest.\n\nIt may help someone when debugging same very strange issue.","commit_id":"17cca5850d50a2ab7302f67899c263a9b4da7585"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7225773e42ab881c7ae030ac8d3909a5ec19a976","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":812,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":813,"context_line":"        self.assertEqual(len(port_map), 1,"},{"line_number":814,"context_line":"                         \"Found multiple IPv4 addresses: %s. \""},{"line_number":815,"context_line":"                         \"Unable to determine which port to target.\""},{"line_number":816,"context_line":"                         % port_map)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_60b33b0b","side":"PARENT","line":813,"in_reply_to":"ba5da102_7674acfc","updated":"2016-11-07 09:47:40.000000000","message":"Done","commit_id":"17cca5850d50a2ab7302f67899c263a9b4da7585"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"210ca95b68a8ad90df5aba910827fabb9f450211","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"            return False"},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"        if not test_utils.call_until_true("},{"line_number":1269,"context_line":"                check_state, timeout, interval):"},{"line_number":1270,"context_line":"            msg \u003d (\"Timed out waiting for node %s to reach %s state(s) %s\" %"},{"line_number":1271,"context_line":"                   (node_id, state_attr, target_states))"},{"line_number":1272,"context_line":"            raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_16e9b0e6","line":1269,"updated":"2016-10-31 14:53:09.000000000","message":"unrelated formatting.","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7225773e42ab881c7ae030ac8d3909a5ec19a976","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"            return False"},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"        if not test_utils.call_until_true("},{"line_number":1269,"context_line":"                check_state, timeout, interval):"},{"line_number":1270,"context_line":"            msg \u003d (\"Timed out waiting for node %s to reach %s state(s) %s\" %"},{"line_number":1271,"context_line":"                   (node_id, state_attr, target_states))"},{"line_number":1272,"context_line":"            raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_ca918854","line":1269,"in_reply_to":"ba5da102_16e9b0e6","updated":"2016-11-07 09:47:40.000000000","message":"Done","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"210ca95b68a8ad90df5aba910827fabb9f450211","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"            return node is not None"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"        if not test_utils.call_until_true("},{"line_number":1293,"context_line":"                _get_node, CONF.baremetal.association_timeout, 1):"},{"line_number":1294,"context_line":"            msg \u003d (\u0027Timed out waiting to get Ironic node by instance id %s\u0027"},{"line_number":1295,"context_line":"                   % instance_id)"},{"line_number":1296,"context_line":"            raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_d6de583e","line":1293,"updated":"2016-10-31 14:53:09.000000000","message":"unrelated formatting.","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7225773e42ab881c7ae030ac8d3909a5ec19a976","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"            return node is not None"},{"line_number":1291,"context_line":""},{"line_number":1292,"context_line":"        if not test_utils.call_until_true("},{"line_number":1293,"context_line":"                _get_node, CONF.baremetal.association_timeout, 1):"},{"line_number":1294,"context_line":"            msg \u003d (\u0027Timed out waiting to get Ironic node by instance id %s\u0027"},{"line_number":1295,"context_line":"                   % instance_id)"},{"line_number":1296,"context_line":"            raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_ea9e4c62","line":1293,"in_reply_to":"ba5da102_d6de583e","updated":"2016-11-07 09:47:40.000000000","message":"Done","commit_id":"5f9212c70d659b63071aa1945a684e8f7b508098"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"63f6d72a5f8e9232fd7f68c269f8e8c28a53872b","unresolved":false,"context_lines":[{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":832,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":833,"context_line":"        if len(port_map) \u003e 1:"},{"line_number":834,"context_line":"            LOG.info(\"Found multiple IPv4 addresses: %s. \""},{"line_number":835,"context_line":"                     \"using the 1st one.\""},{"line_number":836,"context_line":"                     % port_map)"},{"line_number":837,"context_line":"        return port_map[0]"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def _get_network_by_name(self, network_name):"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a6eadb0_485dfd77","line":836,"range":{"start_line":833,"start_character":0,"end_line":836,"end_character":32},"updated":"2016-12-15 18:04:33.000000000","message":"Do you really need this? You\u0027re changing the behaviour when ip_addr is not specified and multiple IPs are available. It used to be fail, not it\u0027s \"take the first IP\" - but you don\u0027t need this change. In the test code you always specify which port to use (as it should be), so this does not even get invoked (at least it looks so from static analysis, I may be wrong).","commit_id":"c235beebd50db3f1b30220d7f1060bd533bec2dd"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"402226101107fcfd96573f43cedf6a5bace9dca4","unresolved":false,"context_lines":[{"line_number":830,"context_line":""},{"line_number":831,"context_line":"        self.assertNotEqual(0, len(port_map),"},{"line_number":832,"context_line":"                            \"No IPv4 addresses found in: %s\" % ports)"},{"line_number":833,"context_line":"        if len(port_map) \u003e 1:"},{"line_number":834,"context_line":"            LOG.info(\"Found multiple IPv4 addresses: %s. \""},{"line_number":835,"context_line":"                     \"using the 1st one.\""},{"line_number":836,"context_line":"                     % port_map)"},{"line_number":837,"context_line":"        return port_map[0]"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"    def _get_network_by_name(self, network_name):"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a6eadb0_a353a16b","line":836,"range":{"start_line":833,"start_character":0,"end_line":836,"end_character":32},"in_reply_to":"1a6eadb0_485dfd77","updated":"2016-12-19 14:42:39.000000000","message":"Done","commit_id":"c235beebd50db3f1b30220d7f1060bd533bec2dd"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":157,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":158,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":159,"context_line":"        nets\u003d[]"},{"line_number":160,"context_line":"        for net in networks:"},{"line_number":161,"context_line":"            network \u003d {\u0027uuid\u0027: net[\u0027id\u0027]}"},{"line_number":162,"context_line":"        #network \u003d {\u0027uuid\u0027: networks[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_a654c3c9","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":15},"updated":"2016-09-27 12:33:34.000000000","message":"missing whitespace around operator","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":157,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":158,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":159,"context_line":"        nets\u003d[]"},{"line_number":160,"context_line":"        for net in networks:"},{"line_number":161,"context_line":"            network \u003d {\u0027uuid\u0027: net[\u0027id\u0027]}"},{"line_number":162,"context_line":"        #network \u003d {\u0027uuid\u0027: networks[\u0027id\u0027]}"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_c10b462a","line":159,"range":{"start_line":159,"start_character":8,"end_line":159,"end_character":15},"in_reply_to":"5a8bc5a2_a654c3c9","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        nets\u003d[]"},{"line_number":160,"context_line":"        for net in networks:"},{"line_number":161,"context_line":"            network \u003d {\u0027uuid\u0027: net[\u0027id\u0027]}"},{"line_number":162,"context_line":"        #network \u003d {\u0027uuid\u0027: networks[\u0027id\u0027]}"},{"line_number":163,"context_line":"            if port_id is not None:"},{"line_number":164,"context_line":"                network[\u0027port\u0027] \u003d port_id"},{"line_number":165,"context_line":"            nets.append(network)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_66fc7bb8","line":162,"range":{"start_line":162,"start_character":8,"end_line":162,"end_character":43},"updated":"2016-09-27 12:33:34.000000000","message":"Why are you leaving that commented code there?. In case you want to left that for any reason, please do follow up the comment convention, just as in #170","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        nets\u003d[]"},{"line_number":160,"context_line":"        for net in networks:"},{"line_number":161,"context_line":"            network \u003d {\u0027uuid\u0027: net[\u0027id\u0027]}"},{"line_number":162,"context_line":"        #network \u003d {\u0027uuid\u0027: networks[\u0027id\u0027]}"},{"line_number":163,"context_line":"            if port_id is not None:"},{"line_number":164,"context_line":"                network[\u0027port\u0027] \u003d port_id"},{"line_number":165,"context_line":"            nets.append(network)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_9921b8b7","line":162,"range":{"start_line":162,"start_character":8,"end_line":162,"end_character":43},"in_reply_to":"5a8bc5a2_66fc7bb8","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        server \u003d self.create_server("},{"line_number":168,"context_line":"            name\u003dname,"},{"line_number":169,"context_line":"            networks\u003dnets,"},{"line_number":170,"context_line":"#            networks\u003d[network, network],"},{"line_number":171,"context_line":"            key_name\u003dkeypair[\u0027name\u0027],"},{"line_number":172,"context_line":"            security_groups\u003dsecurity_groups,"},{"line_number":173,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_2b85dccd","line":170,"updated":"2016-09-27 12:33:34.000000000","message":"ditto, plus continuation line missing indentation or outdented","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        server \u003d self.create_server("},{"line_number":168,"context_line":"            name\u003dname,"},{"line_number":169,"context_line":"            networks\u003dnets,"},{"line_number":170,"context_line":"#            networks\u003d[network, network],"},{"line_number":171,"context_line":"            key_name\u003dkeypair[\u0027name\u0027],"},{"line_number":172,"context_line":"            security_groups\u003dsecurity_groups,"},{"line_number":173,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_3911845e","line":170,"in_reply_to":"5a8bc5a2_2b85dccd","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                raise"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":366,"context_line":"        floating_ip \u003d self.create_floating_ip(server,port_id\u003dport_id)"},{"line_number":367,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":368,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":369,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_46df7f39","line":366,"range":{"start_line":366,"start_character":46,"end_line":366,"end_character":68},"updated":"2016-09-27 12:33:34.000000000","message":"missing whitespace after ,","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                raise"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":366,"context_line":"        floating_ip \u003d self.create_floating_ip(server,port_id\u003dport_id)"},{"line_number":367,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":368,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":369,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_245f980f","line":366,"range":{"start_line":366,"start_character":46,"end_line":366,"end_character":68},"in_reply_to":"5a8bc5a2_46df7f39","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":369,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":370,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":374,"context_line":"    @test.idempotent_id(\u0027f323b3ba-82f8-4db7-8ea6-6a895869ec49\u0027)"},{"line_number":375,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_e6bc0bde","line":372,"range":{"start_line":371,"start_character":0,"end_line":372,"end_character":0},"updated":"2016-09-27 12:33:34.000000000","message":"too many blank lines","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":369,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":370,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":374,"context_line":"    @test.idempotent_id(\u0027f323b3ba-82f8-4db7-8ea6-6a895869ec49\u0027)"},{"line_number":375,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_04b9bc2e","line":372,"range":{"start_line":371,"start_character":0,"end_line":372,"end_character":0},"in_reply_to":"5a8bc5a2_e6bc0bde","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue,"},{"line_number":423,"context_line":"                                               msg\u003d\"after re-associate \""},{"line_number":424,"context_line":"                                                   \"floating ip\")"},{"line_number":425,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":426,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":427,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":428,"context_line":"    def test_network_2_nics_vm(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_26aa7385","line":425,"range":{"start_line":425,"start_character":0,"end_line":425,"end_character":28},"updated":"2016-09-27 12:33:34.000000000","message":"please do leave a blank line here","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue,"},{"line_number":423,"context_line":"                                               msg\u003d\"after re-associate \""},{"line_number":424,"context_line":"                                                   \"floating ip\")"},{"line_number":425,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":426,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":427,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":428,"context_line":"    def test_network_2_nics_vm(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_0490dc94","line":425,"range":{"start_line":425,"start_character":0,"end_line":425,"end_character":28},"in_reply_to":"5a8bc5a2_26aa7385","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":426,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":427,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":428,"context_line":"    def test_network_2_nics_vm(self):"},{"line_number":429,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        Boot a VM with 2 ports that are of the same network"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        - Attach a floating IP to the 1st port"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        - Check that the Tempest host can perform key-based authentication to an"},{"line_number":436,"context_line":"         ssh server hosted at the IP address of the 1st port"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        - Configure the 2nd port dhcp, and attache a new floating ip to it."},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        - Check that the Tempest host can perform key-based authentication to an"},{"line_number":441,"context_line":"         ssh server hosted at the IP address of the 2nd port"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        \"\"\""},{"line_number":444,"context_line":"        self.security_group \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_a675a332","line":441,"range":{"start_line":429,"start_character":1,"end_line":441,"end_character":60},"updated":"2016-09-27 12:33:34.000000000","message":"Please do check lines longer than 80","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":426,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":427,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":428,"context_line":"    def test_network_2_nics_vm(self):"},{"line_number":429,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        Boot a VM with 2 ports that are of the same network"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"        - Attach a floating IP to the 1st port"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        - Check that the Tempest host can perform key-based authentication to an"},{"line_number":436,"context_line":"         ssh server hosted at the IP address of the 1st port"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        - Configure the 2nd port dhcp, and attache a new floating ip to it."},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        - Check that the Tempest host can perform key-based authentication to an"},{"line_number":441,"context_line":"         ssh server hosted at the IP address of the 2nd port"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        \"\"\""},{"line_number":444,"context_line":"        self.security_group \u003d \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_643b609d","line":441,"range":{"start_line":429,"start_character":1,"end_line":441,"end_character":60},"in_reply_to":"5a8bc5a2_a675a332","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks()"},{"line_number":447,"context_line":"        self.check_networks()"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        server \u003d self._create_server(data_utils.rand_name(\u0027server-smoke\u0027), [self.network, self.network])"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        port_1 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][0][\u0027addr\u0027])"},{"line_number":452,"context_line":"        port_2 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][1][\u0027addr\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_eb369401","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":104},"updated":"2016-09-27 12:33:34.000000000","message":"Please split this line. Lines longer than 80 characters would not pass pep8 check. Please check http://docs.openstack.org/developer/hacking/","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks()"},{"line_number":447,"context_line":"        self.check_networks()"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        server \u003d self._create_server(data_utils.rand_name(\u0027server-smoke\u0027), [self.network, self.network])"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        port_1 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][0][\u0027addr\u0027])"},{"line_number":452,"context_line":"        port_2 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][1][\u0027addr\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_076c5e9b","line":449,"range":{"start_line":449,"start_character":8,"end_line":449,"end_character":104},"in_reply_to":"5a8bc5a2_eb369401","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"2354168f9cec1a632f3a44ac39144e87f6ebc40c","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        server \u003d self._create_server(data_utils.rand_name(\u0027server-smoke\u0027), [self.network, self.network])"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        port_1 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][0][\u0027addr\u0027])"},{"line_number":452,"context_line":"        port_2 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][1][\u0027addr\u0027])"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        # 1st port:"},{"line_number":455,"context_line":"        ip_address \u003d self._associate_floating_ip_2_port(server\u003dserver, port_id\u003dport_1[0][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_cb1ab87c","line":452,"range":{"start_line":451,"start_character":9,"end_line":452,"end_character":118},"updated":"2016-09-27 12:33:34.000000000","message":"Same here","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"0f61a3a114253ee0c4dc1330d14dff113a75838d","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        server \u003d self._create_server(data_utils.rand_name(\u0027server-smoke\u0027), [self.network, self.network])"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        port_1 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][0][\u0027addr\u0027])"},{"line_number":452,"context_line":"        port_2 \u003d self._list_ports(fixed_ips\u003d\u0027ip_address\u0027 + \u0027\u003d\u0027 + server[\u0027addresses\u0027][self.network[\u0027name\u0027]][1][\u0027addr\u0027])"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        # 1st port:"},{"line_number":455,"context_line":"        ip_address \u003d self._associate_floating_ip_2_port(server\u003dserver, port_id\u003dport_1[0][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_27e23aa0","line":452,"range":{"start_line":451,"start_character":9,"end_line":452,"end_character":118},"in_reply_to":"5a8bc5a2_cb1ab87c","updated":"2016-09-28 09:19:26.000000000","message":"Done","commit_id":"bb3bcefeee68b4e4911300fdbb1a24eeb78548ae"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"7ad2bdc394aaa80458027d9533e3fe16578e2f75","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        self._check_network_internal_connectivity(network\u003dself.network)"},{"line_number":469,"context_line":"        self._check_network_external_connectivity()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        ssh_client.set_nic_state(nic\u003dnic_list[1][1],state\u003d\u0027down \u0026\u0027)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        self._disassociate_floating_ips()"},{"line_number":474,"context_line":"        self.check_public_network_connectivity(should_connect\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_cdd7f0bd","line":471,"range":{"start_line":471,"start_character":51,"end_line":471,"end_character":67},"updated":"2016-09-28 11:19:22.000000000","message":"missing whitespace after \u0027,\u0027","commit_id":"f66ee3ca68f02b6c43319a52b2ab61e73a4cc7b0"},{"author":{"_account_id":16615,"name":"abregman","email":"abregman@redhat.com","username":"abregman"},"change_message_id":"b9481b982f7bbfd03b42fa2518c4ff7425f1567c","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":424,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":425,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":426,"context_line":"    def test_network_2_nics_vm(self):"},{"line_number":427,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        Boot a VM with 2 ports that are of the same network"},{"line_number":430,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_1444d3b4","line":427,"range":{"start_line":426,"start_character":7,"end_line":427,"end_character":50},"updated":"2016-10-10 08:52:07.000000000","message":"name little bit confusing. perhaps simply \"test_vm_with_2_nics\"?","commit_id":"a650ddc2766a5288f653abc5e88a258b555be783"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"35279807db3249bb16befdbd606ba7699e716e3b","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":424,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":425,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":426,"context_line":"    def test_network_2_nics_vm(self):"},{"line_number":427,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        Boot a VM with 2 ports that are of the same network"},{"line_number":430,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a95cdbc_f754c9ca","line":427,"range":{"start_line":426,"start_character":7,"end_line":427,"end_character":50},"in_reply_to":"1a95cdbc_1444d3b4","updated":"2016-10-10 09:09:16.000000000","message":"Done","commit_id":"a650ddc2766a5288f653abc5e88a258b555be783"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c7283cead28f0a1a9d840615090cc1fd87084b8a","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":360,"context_line":"        floating_ip \u003d self.create_floating_ip(server, port_id\u003dport_id)"},{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_3571ff76","line":361,"updated":"2016-12-15 15:06:06.000000000","message":"This is not something you introduced in your patch, but I don\u0027t think overriding class attributes is the best approach to steer the behavior of the checks in L363. \nI would be much better if the check public network connectivity check accepted an (optional?) floating IP.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7e6cbf42ca9ee3217baeab1dd50d2c1a0b50f304","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":360,"context_line":"        floating_ip \u003d self.create_floating_ip(server, port_id\u003dport_id)"},{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_bf9169f3","line":361,"in_reply_to":"1a6eadb0_3571ff76","updated":"2016-12-15 16:11:32.000000000","message":"I see.\nLet\u0027s leave it to be fixed in a dedicated patch.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c193cf423d2ca9d995ec1ced856e67414675e94a","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                                         src\u003dfloating_ip))"},{"line_number":357,"context_line":"                raise"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":360,"context_line":"        floating_ip \u003d self.create_floating_ip(server, port_id\u003dport_id)"},{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_211a8e17","line":363,"range":{"start_line":359,"start_character":0,"end_line":363,"end_character":67},"updated":"2016-11-28 16:20:38.000000000","message":"I think this makes the code really difficult to read.\nOther helpers provision / de-provision resources, but this also includes the check part.\n\nSo the test code at the end looks like:\n- associate IP1\n- set dhcp for eth1\n- do checks\n- associated IP2\n\nThe associate FIP to port should behave same as the associate FIP to server, only use a port as input instead of a server.\n\nPassing the input to the check functions via self.floating_ip_tuple looks very confusing as well, but that\u0027s not something that was introduced in this patch.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"7e6cbf42ca9ee3217baeab1dd50d2c1a0b50f304","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                                         src\u003dfloating_ip))"},{"line_number":357,"context_line":"                raise"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":360,"context_line":"        floating_ip \u003d self.create_floating_ip(server, port_id\u003dport_id)"},{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_df7c65b7","line":363,"range":{"start_line":359,"start_character":0,"end_line":363,"end_character":67},"in_reply_to":"1a6eadb0_f5a78708","updated":"2016-12-15 16:11:32.000000000","message":"Ok,\nremoving the helper, all will be done in the test.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c7283cead28f0a1a9d840615090cc1fd87084b8a","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                                         src\u003dfloating_ip))"},{"line_number":357,"context_line":"                raise"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":360,"context_line":"        floating_ip \u003d self.create_floating_ip(server, port_id\u003dport_id)"},{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_f5a78708","line":363,"range":{"start_line":359,"start_character":0,"end_line":363,"end_character":67},"in_reply_to":"5a74a57a_13b85a74","updated":"2016-12-15 15:06:06.000000000","message":"No, I think the check should stay in the test.\nWhat would be even better is to avoid another help at all.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"623df1b9bad01b036436e9cc6915d33e96eb5502","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                                         src\u003dfloating_ip))"},{"line_number":357,"context_line":"                raise"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"    def _associate_floating_ip_2_port(self, server, port_id):"},{"line_number":360,"context_line":"        floating_ip \u003d self.create_floating_ip(server, port_id\u003dport_id)"},{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_13b85a74","line":363,"range":{"start_line":359,"start_character":0,"end_line":363,"end_character":67},"in_reply_to":"5a74a57a_211a8e17","updated":"2016-11-29 13:03:06.000000000","message":"The code will actually look like: \n- associate IP1\n- do checks\n\n- set dhcp for eth1\n\n- associated IP2\n- do checks\n\nDo you think I should rename the helper\u0027s name to  _associate_floating_ip_2_port_and_check ?","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c193cf423d2ca9d995ec1ced856e67414675e94a","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":367,"context_line":"    @test.idempotent_id(\u0027f323b3ba-82f8-4db7-8ea6-6a895869ec49\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_e1ea56da","line":364,"updated":"2016-11-28 16:20:38.000000000","message":"Do you really need to return the floating IP here? You\u0027re not using this anywhere.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c7283cead28f0a1a9d840615090cc1fd87084b8a","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":367,"context_line":"    @test.idempotent_id(\u0027f323b3ba-82f8-4db7-8ea6-6a895869ec49\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_9a32000f","line":364,"in_reply_to":"5a74a57a_8e2efd89","updated":"2016-12-15 15:06:06.000000000","message":"right, you use that for the 1st port, my bad","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"623df1b9bad01b036436e9cc6915d33e96eb5502","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        self.floating_ip_tuple \u003d Floating_IP_tuple(floating_ip, server)"},{"line_number":362,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":363,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":364,"context_line":"        return floating_ip[\u0027floating_ip_address\u0027]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":367,"context_line":"    @test.idempotent_id(\u0027f323b3ba-82f8-4db7-8ea6-6a895869ec49\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_8e2efd89","line":364,"in_reply_to":"5a74a57a_e1ea56da","updated":"2016-11-29 13:03:06.000000000","message":"I\u0027m using the IP for get_remote_client(), I\u0027m ssh-ing to that IP.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c193cf423d2ca9d995ec1ced856e67414675e94a","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        self.check_public_network_connectivity("},{"line_number":427,"context_line":"            should_connect\u003dTrue, mtu\u003dself.network[\u0027mtu\u0027])"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":430,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":431,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":432,"context_line":"    def test_vm_with_2_same_net_ports(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_b67ee667","line":429,"updated":"2016-11-28 16:20:38.000000000","message":"I\u0027m not sure about the current consistency of the smoke filter in tempest. In any case this seems to me go beyond the scope very basic infrastructure that a smoke test should verify.","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"623df1b9bad01b036436e9cc6915d33e96eb5502","unresolved":false,"context_lines":[{"line_number":426,"context_line":"        self.check_public_network_connectivity("},{"line_number":427,"context_line":"            should_connect\u003dTrue, mtu\u003dself.network[\u0027mtu\u0027])"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":430,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":431,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":432,"context_line":"    def test_vm_with_2_same_net_ports(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a74a57a_6e4a8156","line":429,"in_reply_to":"5a74a57a_b67ee667","updated":"2016-11-29 13:03:06.000000000","message":"Done","commit_id":"e6a33e20a059193afe61bc5a40981286d8dde2ae"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"63f6d72a5f8e9232fd7f68c269f8e8c28a53872b","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            self.assertIn(self.router[\u0027id\u0027],"},{"line_number":150,"context_line":"                          seen_router_ids)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _create_server(self, networks, port_id\u003dNone):"},{"line_number":153,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":154,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":155,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":156,"context_line":"        nets \u003d []"},{"line_number":157,"context_line":"        for net in networks:"},{"line_number":158,"context_line":"            network \u003d {\u0027uuid\u0027: net[\u0027id\u0027]}"},{"line_number":159,"context_line":"            if port_id is not None:"},{"line_number":160,"context_line":"                network[\u0027port\u0027] \u003d port_id"},{"line_number":161,"context_line":"            nets.append(network)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        server \u003d self.create_server("},{"line_number":164,"context_line":"            networks\u003dnets,"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a6eadb0_b38e0277","line":161,"range":{"start_line":152,"start_character":0,"end_line":161,"end_character":32},"updated":"2016-12-15 18:04:33.000000000","message":"The resulting interface of this helper is now mixed up. It allows for a list of networks but only for one port_id, which means the port_id cannot be used when multiple networks are used, else they would all get the same port_id which makes no sense.","commit_id":"c235beebd50db3f1b30220d7f1060bd533bec2dd"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"402226101107fcfd96573f43cedf6a5bace9dca4","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            self.assertIn(self.router[\u0027id\u0027],"},{"line_number":150,"context_line":"                          seen_router_ids)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _create_server(self, networks, port_id\u003dNone):"},{"line_number":153,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":154,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":155,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":156,"context_line":"        nets \u003d []"},{"line_number":157,"context_line":"        for net in networks:"},{"line_number":158,"context_line":"            network \u003d {\u0027uuid\u0027: net[\u0027id\u0027]}"},{"line_number":159,"context_line":"            if port_id is not None:"},{"line_number":160,"context_line":"                network[\u0027port\u0027] \u003d port_id"},{"line_number":161,"context_line":"            nets.append(network)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        server \u003d self.create_server("},{"line_number":164,"context_line":"            networks\u003dnets,"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a6eadb0_3c3ef029","line":161,"range":{"start_line":152,"start_character":0,"end_line":161,"end_character":32},"in_reply_to":"1a6eadb0_b38e0277","updated":"2016-12-19 14:42:39.000000000","message":"Done.\nNote that passing a port_id with more than 1 network has no meaning and it is never used.","commit_id":"c235beebd50db3f1b30220d7f1060bd533bec2dd"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"4da6cbddbc6d794b6996aaaf83a934f1d72f11a3","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":426,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":427,"context_line":"    def test_vm_with_2_same_net_ports(self):"},{"line_number":428,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        Spec is at :"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_814914ba","line":427,"updated":"2016-12-20 09:47:18.000000000","message":"How is that a scenario ? This should be an api test.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":426,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":427,"context_line":"    def test_vm_with_2_same_net_ports(self):"},{"line_number":428,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        Spec is at :"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_1c170fee","line":427,"in_reply_to":"1a6eadb0_6ce22803","updated":"2017-01-04 15:54:29.000000000","message":"wouldn\u0027t it be confusing to put this test under compute API ?\n\nDoes it make sense to keep this test aligned with other test_network_basic_ops tests implementation ?  \n\nDo you prefer we\u0027ll wait with this patch till after sorting out test_network_basic_ops in a dedicated patch ?  \n\nJust booting a vm with 2 nics on the same network is not enough, the vm boots with eth1 down, we use ssh to bring it up and configuring dhcp on it.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"131da8cab6a1a31a171472fbf0c6e093eed0b643","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":426,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":427,"context_line":"    def test_vm_with_2_same_net_ports(self):"},{"line_number":428,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        Spec is at :"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_82183277","line":427,"in_reply_to":"1a6eadb0_814914ba","updated":"2016-12-20 10:22:39.000000000","message":"It *could* be an api test, I do agree on that but I\u0027ve some objections about that. First, which api would you like to test? network? compute? and secondly IMHO it just fits the kind of tests that are being done within this class. Where would you propose for this to be put otherwise?","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"690cddac8cf2e9b692265bda3f671aa448d06859","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @test.idempotent_id(\u0027e8fae7ba-1b6d-4bd0-bafa-efb86fb742aa\u0027)"},{"line_number":426,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":427,"context_line":"    def test_vm_with_2_same_net_ports(self):"},{"line_number":428,"context_line":"        \"\"\"Test network with 2 nics on the same vm"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        Spec is at :"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_6ce22803","line":427,"in_reply_to":"1a6eadb0_82183277","updated":"2016-12-20 11:23:22.000000000","message":"The tests only creates a server (agreed, with networks) so does most of the compute api tests. Thus it should live in the compute API directory.\n\nI agree it fits the kind of tests that are being done within this class. But this file is a huge mess, spaghetti code and it needs to be refactor entirely. So let\u0027s not add some more code into it.\n\nAlso I would drop the SSH validation completely. Just boot a server with 2 nics on the same network and assert that IPs are correctly assigned. That\u0027s what was the original NOva api limitation, right ? It wasn\"t about floating IP.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"14500a65500ba51461c827999b167aa27f938d8a","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        self._check_network_internal_connectivity(network\u003dself.network)"},{"line_number":475,"context_line":"        self._check_network_external_connectivity()"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        ssh_client.set_nic_state(nic\u003dnic_list[1][1], state\u003d\u0027down \u0026\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        self._disassociate_floating_ips()"},{"line_number":480,"context_line":"        self.check_public_network_connectivity(should_connect\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_a1b9b0ee","line":477,"updated":"2016-12-20 09:40:48.000000000","message":"Why the trailing \u0027\u0026\u0027 ? That looks like a hack and deserve a code comment.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":23003,"name":"Gal Amado","email":"gamado@redhat.com","username":"gamado"},"change_message_id":"d353ee016cfd77708952b7b2d6b377e1c53c4fed","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        self._check_network_internal_connectivity(network\u003dself.network)"},{"line_number":475,"context_line":"        self._check_network_external_connectivity()"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        ssh_client.set_nic_state(nic\u003dnic_list[1][1], state\u003d\u0027down \u0026\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        self._disassociate_floating_ips()"},{"line_number":480,"context_line":"        self.check_public_network_connectivity(should_connect\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_1c2c6faa","line":477,"in_reply_to":"1a6eadb0_27ca1050","updated":"2017-01-04 15:54:29.000000000","message":"Done","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"},{"author":{"_account_id":14885,"name":"Daniel Mellado","email":"dmellado@redhat.com","username":"daniel-mellado"},"change_message_id":"131da8cab6a1a31a171472fbf0c6e093eed0b643","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        self._check_network_internal_connectivity(network\u003dself.network)"},{"line_number":475,"context_line":"        self._check_network_external_connectivity()"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        ssh_client.set_nic_state(nic\u003dnic_list[1][1], state\u003d\u0027down \u0026\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        self._disassociate_floating_ips()"},{"line_number":480,"context_line":"        self.check_public_network_connectivity(should_connect\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_27ca1050","line":477,"in_reply_to":"1a6eadb0_a1b9b0ee","updated":"2016-12-20 10:22:39.000000000","message":"@Gal, could you please clarify this? I kinda missed that when reviewing the patch.","commit_id":"e7c39ec56970ae5d8123235c816573693fcae075"}]}
