)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f097f6a0b996d623270c3237f849736c250da895","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2014-11-19 17:07:11 +0200"},{"line_number":4,"context_line":"Commit:     Yair Fried \u003cyfried@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-11-23 10:30:46 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds scenario for DNS-nameserver configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Tests that subnet\u0027s DNS server configurations are effecting the VMs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_855ce44c","line":6,"updated":"2014-11-23 09:36:53.000000000","message":"host-routes is very similar as its a DHCP option we pass into the guest. I think that a single scenario should assert both, what do you think?","commit_id":"07cb7ad54154e8c4f6bdc94f9d4c00502ad0e0c0"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"2c48d7d2fe46deb5fbcf499dfc58ad0352e10582","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2014-11-19 17:07:11 +0200"},{"line_number":4,"context_line":"Commit:     Yair Fried \u003cyfried@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-11-23 10:30:46 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds scenario for DNS-nameserver configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Tests that subnet\u0027s DNS server configurations are effecting the VMs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_17066986","line":6,"in_reply_to":"5a890539_855ce44c","updated":"2014-11-25 17:02:34.000000000","message":"sure, in a later patch.","commit_id":"07cb7ad54154e8c4f6bdc94f9d4c00502ad0e0c0"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"51c06acbdbe6144384ae0b08ff66cd45ddf2fa65","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Adds dhcp_client to tempest.conf which should indicate the image DHCP client"},{"line_number":23,"context_line":"used for renewing dhcp lease."},{"line_number":24,"context_line":"Supported: \u0027udhcpc\u0027, \u0027dhclient\u0027"},{"line_number":25,"context_line":"Empty value should skip subnet update parts of scenario"},{"line_number":26,"context_line":"TODO: add support for dhcpcd client"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a890539_cfc6f048","line":24,"updated":"2014-12-03 14:54:46.000000000","message":"This does not seem to match with the description in the config file sample.","commit_id":"7277d269d667803dbc6bf15eb2acc9a1219c33b8"}],"etc/tempest.conf.sample":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"51c06acbdbe6144384ae0b08ff66cd45ddf2fa65","unresolved":false,"context_lines":[{"line_number":747,"context_line":"# Catalog type of the Neutron service. (string value)"},{"line_number":748,"context_line":"#catalog_type \u003d network"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"# DHCP client used by images to renew DCHP lease. If left empty, will"},{"line_number":751,"context_line":"# operation will be skipped. Supported clients: \"udhcpc\" (string"},{"line_number":752,"context_line":"# value)"},{"line_number":753,"context_line":"#dhcp_client \u003d udhcpc"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"5a890539_aff7e48a","line":750,"updated":"2014-12-03 14:54:46.000000000","message":"...will operation will?","commit_id":"7277d269d667803dbc6bf15eb2acc9a1219c33b8"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e4fd732a58303bcee0486d09eb5887061d145f88","unresolved":false,"context_lines":[{"line_number":753,"context_line":"# DHCP client used by images to renew DCHP lease. If left empty,"},{"line_number":754,"context_line":"# update operation will be skipped. Supported clients: \"udhcpc\","},{"line_number":755,"context_line":"# \"dhclient\" (string value)"},{"line_number":756,"context_line":"#dhcp_client \u003d udhcpc"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"# List of dns servers which should be used for subnet creation (list"},{"line_number":759,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"3a961159_cce012fb","line":756,"updated":"2015-01-02 13:54:18.000000000","message":"In the future we should consider creating a remoteclient config section, which also should have a class parameter for different remote client implementation for different images Like CirrosSSH, Win8WinRN.","commit_id":"2294c22302b6ef09ef8bf7538a0e4113f8e20ba2"}],"tempest/common/utils/linux/remote_client.py":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"32b358d24535c9ce498c8d53df9d7e9286a784dc","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        signum \u003d \u0027USR1\u0027"},{"line_number":138,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        udhcpc_cmd \u003d \u0027sudo /bin/kill -{sig} `cat {path}{nic}.pid`\u0027.format("},{"line_number":141,"context_line":"            nic\u003dnic, sig\u003dsignum, path\u003dfile_path)"},{"line_number":142,"context_line":"        return self.exec_command(udhcpc_cmd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_10498132","line":140,"updated":"2014-11-27 22:12:10.000000000","message":"If you plan support of other clients it\u0027s better to create a full command at once. For example:\n  def renew_dhcp_lease(self, dhclient\u003d\"udhcpc\")\n    sudo /bin/kill -USR1 `cat /var/run/udhcpc.eth0.pid\n\nbecause different client will require completely different command, like \"dhclient -r\" and your parameters most likely will not be used.\n\nAlso you can find PID of udhcpc via ps and get rid off interface name here. \nSupport for dhclient is very simple: \"dhclient -r\".\n\nI\u0027d do it like:\n  \n  def renew_dhcp_lease(self, client\u003d\u0027udhcpc\u0027):\n    cmds \u003d {\u0027udhcpc\u0027: \u0027ps aux | grep udhcpc | grep -v grep | awk {\u0027print $2\u0027} | xargs kill -USR1\u0027\n  \u0027dhclient\u0027: \u0027dhclient -r\u0027}\n  return self.exec_command(cmds[client])","commit_id":"d4d155d909e663522c70b3b2be8efeab515422e3"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"653320f41054dd55ce7e21ec06d4e6fade63821c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        signum \u003d \u0027USR1\u0027"},{"line_number":138,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        udhcpc_cmd \u003d \u0027sudo /bin/kill -{sig} `cat {path}{nic}.pid`\u0027.format("},{"line_number":141,"context_line":"            nic\u003dnic, sig\u003dsignum, path\u003dfile_path)"},{"line_number":142,"context_line":"        return self.exec_command(udhcpc_cmd)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_d86605bb","line":140,"in_reply_to":"5a890539_10498132","updated":"2014-12-01 19:42:23.000000000","message":"tnx. I\u0027ll add it in the next patch. I don\u0027t want to over complicate this one\n\nsidenote: isn\u0027t \"dhclient -r\" for __releasing__ dhcp lease? I was going for \"dhclient -r \u0026\u0026 dhclient eth0\"","commit_id":"d4d155d909e663522c70b3b2be8efeab515422e3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                       if len(l) and l[0] \u003d\u003d \u0027nameserver\u0027]"},{"line_number":123,"context_line":"        return dns_servers"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def renew_dhcp_lease(self):"},{"line_number":126,"context_line":"        \"\"\"Forces DHCP lease renewal."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        Assumes machine\u0027s using \"udhcpc\" as DHCP client."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_2da152f8","line":125,"updated":"2014-12-03 03:00:36.000000000","message":"So this method has way too many inherent assumptions about the guest to be added as is. \n\nThere\u0027s no guarantee that the dhcp client is udhcpc, (or dhclient for that matter) for example personally all of my machines use dhcpcd. This is very dependent on the guest image being used. The same is true with the nic being eth0, which is dependent on the hypervisor, image, etc..","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                       if len(l) and l[0] \u003d\u003d \u0027nameserver\u0027]"},{"line_number":123,"context_line":"        return dns_servers"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def renew_dhcp_lease(self):"},{"line_number":126,"context_line":"        \"\"\"Forces DHCP lease renewal."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        Assumes machine\u0027s using \"udhcpc\" as DHCP client."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_7e02223f","line":125,"in_reply_to":"5a890539_2da152f8","updated":"2014-12-03 06:24:52.000000000","message":"The dns update requires dchp renewal to take effect.\nI could add a conf value for the client, and support for \"dhclient\" with skip flag if not provided. I\u0027m, however, unfamiliar with \"dhcpcd\". I\u0027d be glad to add support for it, if you provided me with an image to test on.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"51c06acbdbe6144384ae0b08ff66cd45ddf2fa65","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        return dns_servers"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def send_signal(self, pid, signum):"},{"line_number":126,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(nic\u003dpid, sig\u003dsignum)"},{"line_number":127,"context_line":"        return self.exec_command(cmd)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def renew_dhcp_lease(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_8fd228cf","line":126,"updated":"2014-12-03 14:54:46.000000000","message":"{pid} does not match nic\u003d","commit_id":"7277d269d667803dbc6bf15eb2acc9a1219c33b8"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e4fd732a58303bcee0486d09eb5887061d145f88","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return self.exec_command(cmd)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_nic_name(self, address):"},{"line_number":101,"context_line":"        cmd \u003d \"/bin/ip -o addr | awk \u0027/%s/ {print $2}\u0027\" % address"},{"line_number":102,"context_line":"        return self.exec_command(cmd)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def get_ip_list(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_ccc73264","line":101,"updated":"2015-01-02 13:54:18.000000000","message":"Not all image has the ip command in the /bin.","commit_id":"2294c22302b6ef09ef8bf7538a0e4113f8e20ba2"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"0ed13182e83664fe003b681b93001ba4deff3149","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":134,"context_line":"        return self.exec_command(cmd)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _renew_lease_udhcpc(self, **kwargs):"},{"line_number":137,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":138,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":139,"context_line":"        fixed_ip \u003d kwargs.get(\u0027fixed_ip\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_30e3b5a5","line":136,"updated":"2015-01-13 10:52:28.000000000","message":"Why do you need kwargs here?","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"08f62f38cdd6f0c1ce6a15bfc6d684910b525e92","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        cmd \u003d \u0027sudo /bin/kill -{sig} {pid}\u0027.format(pid\u003dpid, sig\u003dsignum)"},{"line_number":134,"context_line":"        return self.exec_command(cmd)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _renew_lease_udhcpc(self, **kwargs):"},{"line_number":137,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":138,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":139,"context_line":"        fixed_ip \u003d kwargs.get(\u0027fixed_ip\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_9fdab577","line":136,"in_reply_to":"3a961159_30e3b5a5","updated":"2015-01-13 12:28:54.000000000","message":"Done","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"0ed13182e83664fe003b681b93001ba4deff3149","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":138,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":139,"context_line":"        fixed_ip \u003d kwargs.get(\u0027fixed_ip\u0027)"},{"line_number":140,"context_line":"        assert fixed_ip"},{"line_number":141,"context_line":"        nic_name \u003d self.get_nic_name(fixed_ip)"},{"line_number":142,"context_line":"        nic_name \u003d nic_name.strip().lower()"},{"line_number":143,"context_line":"        pid \u003d self.exec_command(\u0027cat {path}{nic}.pid\u0027."}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_108239a5","line":140,"updated":"2015-01-13 10:52:28.000000000","message":"Failing on an assert would give misleading information when troubleshooting an error. In any case you don\u0027t need this, just use a mandatory param as it was before.","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"08f62f38cdd6f0c1ce6a15bfc6d684910b525e92","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":138,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":139,"context_line":"        fixed_ip \u003d kwargs.get(\u0027fixed_ip\u0027)"},{"line_number":140,"context_line":"        assert fixed_ip"},{"line_number":141,"context_line":"        nic_name \u003d self.get_nic_name(fixed_ip)"},{"line_number":142,"context_line":"        nic_name \u003d nic_name.strip().lower()"},{"line_number":143,"context_line":"        pid \u003d self.exec_command(\u0027cat {path}{nic}.pid\u0027."}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_bfd5b148","line":140,"in_reply_to":"3a961159_108239a5","updated":"2015-01-13 12:28:54.000000000","message":"Done","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"0ed13182e83664fe003b681b93001ba4deff3149","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        pid \u003d pid.strip()"},{"line_number":146,"context_line":"        self.send_signal(pid, \u0027USR1\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _renew_lease_dhclient(self, **kwargs):"},{"line_number":149,"context_line":"        \"\"\"Renews DHCP lease via dhclient client. \"\"\""},{"line_number":150,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 /sbin/dhclient\""},{"line_number":151,"context_line":"        self.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_7061bd10","line":148,"updated":"2015-01-13 10:52:28.000000000","message":"An optional parameter would be enough if you wanted to make the signature of the two interfaces compatible.\nAnyways I would not use kwargs here at all.","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"08f62f38cdd6f0c1ce6a15bfc6d684910b525e92","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        pid \u003d pid.strip()"},{"line_number":146,"context_line":"        self.send_signal(pid, \u0027USR1\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def _renew_lease_dhclient(self, **kwargs):"},{"line_number":149,"context_line":"        \"\"\"Renews DHCP lease via dhclient client. \"\"\""},{"line_number":150,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 /sbin/dhclient\""},{"line_number":151,"context_line":"        self.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_5f0dade7","line":148,"in_reply_to":"3a961159_7061bd10","updated":"2015-01-13 12:28:54.000000000","message":"Done","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"0ed13182e83664fe003b681b93001ba4deff3149","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 /sbin/dhclient\""},{"line_number":151,"context_line":"        self.exec_command(cmd)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def renew_lease(self, dhcp_client, **kwargs):"},{"line_number":154,"context_line":"        \"\"\"Wrapper method for renewing DHCP lease via given client"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        Supporting:"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_504761a3","line":153,"updated":"2015-01-13 10:52:28.000000000","message":"Thanks for adding this.\n\nrenew_lease(self, dhcp_client, fixed_ip\u003dNone) \n\nwould have been fine as well. I guess you are using kwargs in case the dhcpcd would require more parameters, but it seems a bit far-fetched.","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"08f62f38cdd6f0c1ce6a15bfc6d684910b525e92","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 /sbin/dhclient\""},{"line_number":151,"context_line":"        self.exec_command(cmd)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def renew_lease(self, dhcp_client, **kwargs):"},{"line_number":154,"context_line":"        \"\"\"Wrapper method for renewing DHCP lease via given client"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        Supporting:"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_1f2a452f","line":153,"in_reply_to":"3a961159_504761a3","updated":"2015-01-13 12:28:54.000000000","message":"I\u0027d prefer to keep the higher level like this for compatibility.","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"0ed13182e83664fe003b681b93001ba4deff3149","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        if dhcp_client not in suported_clients:"},{"line_number":163,"context_line":"            raise exceptions.InvalidConfiguration(\u0027%s DHCP client unsupported\u0027"},{"line_number":164,"context_line":"                                                  % dhcp_client)"},{"line_number":165,"context_line":"        return getattr(self, \u0027_renew_lease_%s\u0027 % dhcp_client)(**kwargs)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_10d4f9b9","line":165,"updated":"2015-01-13 10:52:28.000000000","message":"I would have the logic that selects the parameters here and keep the original functions as they were.","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"08f62f38cdd6f0c1ce6a15bfc6d684910b525e92","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        if dhcp_client not in suported_clients:"},{"line_number":163,"context_line":"            raise exceptions.InvalidConfiguration(\u0027%s DHCP client unsupported\u0027"},{"line_number":164,"context_line":"                                                  % dhcp_client)"},{"line_number":165,"context_line":"        return getattr(self, \u0027_renew_lease_%s\u0027 % dhcp_client)(**kwargs)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_bff131e0","line":165,"in_reply_to":"3a961159_10d4f9b9","updated":"2015-01-13 12:28:54.000000000","message":"Done","commit_id":"0af36a5f03ee5ea8af677ef87256e552f723a630"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a6602e231de899a7f8c5c0854900318e2ef88a2c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        cmd \u003d \"sudo /sbin/dhclient -r \u0026\u0026 /sbin/dhclient\""},{"line_number":149,"context_line":"        self.exec_command(cmd)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def renew_lease(self, dhcp_client, **kwargs):"},{"line_number":152,"context_line":"        \"\"\"Wrapper method for renewing DHCP lease via given client"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        Supporting:"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_8bc7d745","line":151,"updated":"2015-01-13 14:14:03.000000000","message":"The CONF is available in this module, it does not needs to be passed as an argument.","commit_id":"65d1bb9fe3e476ccc0d22ff047f381d4124e0547"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a6602e231de899a7f8c5c0854900318e2ef88a2c","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                                                  % dhcp_client)"},{"line_number":163,"context_line":"        if dhcp_client \u003d\u003d \u0027udhcpc\u0027 and not kwargs.get(\u0027fixed_ip\u0027):"},{"line_number":164,"context_line":"            raise ValueError(\"need to set \u0027fixed_ip\u0027 for udhcpc client\")"},{"line_number":165,"context_line":"        return getattr(self, \u0027_renew_lease_%s\u0027 % dhcp_client)(**kwargs)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_6be8ebb3","line":165,"updated":"2015-01-13 14:14:03.000000000","message":"It will fail with dhclient, since it does not expects extra kwargs.","commit_id":"65d1bb9fe3e476ccc0d22ff047f381d4124e0547"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a6602e231de899a7f8c5c0854900318e2ef88a2c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"3a961159_4b332f62","line":166,"updated":"2015-01-13 14:14:03.000000000","message":"using gettattr and string concacate seams overkill.\n\nBTW: the \u0027+\u0027 is faster than %.","commit_id":"65d1bb9fe3e476ccc0d22ff047f381d4124e0547"}],"tempest/config.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5ba490538fd300461e2296d6881018ade64ec8c6","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                help\u003d\"List of dns servers which should be used\""},{"line_number":444,"context_line":"                     \" for subnet creation\"),"},{"line_number":445,"context_line":"    # TODO(yfried): add support for dhcpcd"},{"line_number":446,"context_line":"    cfg.StrOpt(\u0027dhcp_client\u0027,"},{"line_number":447,"context_line":"               default\u003d\u0027udhcpc\u0027,"},{"line_number":448,"context_line":"               choices\u003d[\"udhcpc\", \"dhclient\"],"},{"line_number":449,"context_line":"               help\u003d\u0027DHCP client used by images to renew DCHP lease. \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_9f650ae3","line":446,"updated":"2015-01-06 13:49:15.000000000","message":"This is a guest image capability rather than something network specific. As the image is configured independently in API and scenario tests, I think this should be in the scenario section instead.\n\nEventually it should go into something like an images.yaml which specifies available images and their capabilities.","commit_id":"706b12b72cc40642f5f1b318afcd36084ba4b77c"}],"tempest/scenario/manager.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":989,"context_line":"        self.addCleanup(self.delete_wrapper, router.delete)"},{"line_number":990,"context_line":"        return router"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":"    def create_networks(self, client\u003dNone, tenant_id\u003dNone, **kwargs):"},{"line_number":993,"context_line":"        \"\"\"Create a network with a subnet connected to a router."},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"        The baremetal driver is a special case since all nodes are"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_4d793e81","line":992,"updated":"2014-12-03 03:00:36.000000000","message":"If you\u0027re adding an expected param which is locally being used you should explicitly add it here. I feel like kwargs should only be used if we\u0027re doing straight pass through of arbitrary values to the clients.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":989,"context_line":"        self.addCleanup(self.delete_wrapper, router.delete)"},{"line_number":990,"context_line":"        return router"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":"    def create_networks(self, client\u003dNone, tenant_id\u003dNone, **kwargs):"},{"line_number":993,"context_line":"        \"\"\"Create a network with a subnet connected to a router."},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"        The baremetal driver is a special case since all nodes are"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_19f4d859","line":992,"in_reply_to":"5a890539_4d793e81","updated":"2014-12-03 06:24:52.000000000","message":"will do","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":997,"context_line":""},{"line_number":998,"context_line":"        :param client: network client to create resources with."},{"line_number":999,"context_line":"        :param tenant_id: id of tenant to create resources in."},{"line_number":1000,"context_line":"        :param dns_nameservers: list of dns servers to send to subnet."},{"line_number":1001,"context_line":"        :returns: network, subnet, router"},{"line_number":1002,"context_line":"        \"\"\""},{"line_number":1003,"context_line":"        if CONF.baremetal.driver_enabled:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_cd8c4e83","line":1000,"updated":"2014-12-03 03:00:36.000000000","message":"See above, especially if you\u0027re adding it to the docstring we should be explicit above.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"ac7415eb069aa656481e142c138b0cb22c5b56e0","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"            router \u003d self._get_router(client\u003dclient, tenant_id\u003dtenant_id)"},{"line_number":1048,"context_line":""},{"line_number":1049,"context_line":"            subnet_kwargs \u003d dict(network\u003dnetwork, client\u003dclient)"},{"line_number":1050,"context_line":"            # use exlicit check because empty list is a valid option"},{"line_number":1051,"context_line":"            if dns_nameservers is not None:"},{"line_number":1052,"context_line":"                subnet_kwargs[\u0027dns_nameservers\u0027] \u003d dns_nameservers"},{"line_number":1053,"context_line":"            subnet \u003d self._create_subnet(**subnet_kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_f93175ed","line":1050,"updated":"2014-12-24 09:24:23.000000000","message":"exlicit -\u003e explicit","commit_id":"b012da2e419a8fadb6ddf204786814e4a9d547f2"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"72ec6427ec21df7fc428f3ee9111ba8cc91bdaf8","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        self._hotplug_server()"},{"line_number":395,"context_line":"        self._check_network_internal_connectivity(network\u003dself.new_net)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def check_dns_server(self, ssh_client, dns_servers):"},{"line_number":398,"context_line":"        def _check_server():"},{"line_number":399,"context_line":"            servers \u003d ssh_client.get_dns_servers()"},{"line_number":400,"context_line":"            LOG.debug(\u0027Looking for servers: {trgt_serv}. \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_9542d666","line":397,"updated":"2014-11-27 08:59:23.000000000","message":"Is this function is used from out of this class? If not, the name should be _check_dns_server().","commit_id":"21ca6c98186b386fd4698d802209ceedbe79d790"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"72ec6427ec21df7fc428f3ee9111ba8cc91bdaf8","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                                             CONF.compute.ping_timeout,"},{"line_number":415,"context_line":"                                             1))"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def update_dns_server(self, subnet, dns_servers):"},{"line_number":418,"context_line":"        return subnet.update(dns_servers\u003ddns_servers)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @testtools.skipUnless(len(CONF.network.dns_servers),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_55ba2e72","line":417,"updated":"2014-11-27 08:59:23.000000000","message":"It seems this function is not used anywhere.\nCan we remove this function?","commit_id":"21ca6c98186b386fd4698d802209ceedbe79d790"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"72ec6427ec21df7fc428f3ee9111ba8cc91bdaf8","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        return subnet.update(dns_servers\u003ddns_servers)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @testtools.skipUnless(len(CONF.network.dns_servers),"},{"line_number":421,"context_line":"                          \"some expe\")"},{"line_number":422,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":423,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":424,"context_line":"    def test_dns_server(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_155346e3","line":421,"updated":"2014-11-27 08:59:23.000000000","message":"I don\u0027t understand the sentence. What do you want to describe here?","commit_id":"21ca6c98186b386fd4698d802209ceedbe79d790"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"72ec6427ec21df7fc428f3ee9111ba8cc91bdaf8","unresolved":false,"context_lines":[{"line_number":432,"context_line":"         configured for the subnet."},{"line_number":433,"context_line":"         5. TODO(yfried): ping a url and verify it is correctly resolved by VM"},{"line_number":434,"context_line":"        \"\"\""},{"line_number":435,"context_line":"        initial_dns_server, alt_dns_server \u003d CONF.network.dns_servers[:2]"},{"line_number":436,"context_line":"        self._setup_network_and_servers(dns_nameservers\u003d[initial_dns_server])"},{"line_number":437,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":438,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_75f1ea69","line":435,"updated":"2014-11-27 08:59:23.000000000","message":"Do we always have over 2 dnsservers? If not, an exception occurs here.","commit_id":"21ca6c98186b386fd4698d802209ceedbe79d790"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"213b643fcc1dada58d7735e788c91e5992ab8dc3","unresolved":false,"context_lines":[{"line_number":429,"context_line":"         configured for the subnet."},{"line_number":430,"context_line":"         5. TODO(yfried): ping a url and verify it is correctly resolved by VM"},{"line_number":431,"context_line":"        \"\"\""},{"line_number":432,"context_line":"        serv_list \u003d CONF.network.dns_servers"},{"line_number":433,"context_line":"        self._setup_network_and_servers(dns_nameservers\u003d[serv_list[0]])"},{"line_number":434,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":435,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_4c67a551","line":432,"updated":"2014-12-02 08:58:56.000000000","message":"Better variable name would be dns_server_list (instead of serv_list)","commit_id":"d4d155d909e663522c70b3b2be8efeab515422e3"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"3ff11f16c93d3cb878e2cbf0efe388d14e602698","unresolved":false,"context_lines":[{"line_number":429,"context_line":"         configured for the subnet."},{"line_number":430,"context_line":"         5. TODO(yfried): ping a url and verify it is correctly resolved by VM"},{"line_number":431,"context_line":"        \"\"\""},{"line_number":432,"context_line":"        serv_list \u003d CONF.network.dns_servers"},{"line_number":433,"context_line":"        self._setup_network_and_servers(dns_nameservers\u003d[serv_list[0]])"},{"line_number":434,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":435,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_a56017a5","line":432,"in_reply_to":"5a890539_4c67a551","updated":"2014-12-02 13:31:55.000000000","message":"Done","commit_id":"d4d155d909e663522c70b3b2be8efeab515422e3"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"9d7a5d24345e412ea5a44b1ef24974e13fffbde2","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        private_key \u003d self._get_server_key(server)"},{"line_number":438,"context_line":"        ssh_client \u003d self._ssh_to_server(ip_address, private_key)"},{"line_number":439,"context_line":"        self._check_dns_server(ssh_client, [serv_list[0]])"},{"line_number":440,"context_line":"        if len(serv_list) \u003e 1:"},{"line_number":441,"context_line":"            self.subnet.update(dns_nameservers\u003d[serv_list[1]])"},{"line_number":442,"context_line":"            self._check_dns_server(ssh_client, [serv_list[1]])"},{"line_number":443,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_d943546a","line":440,"updated":"2014-12-02 11:04:39.000000000","message":"Isn\u0027t the skipUnless decorator eliminates this code path ?\n\nif else: LOG ; is not required.","commit_id":"d4d155d909e663522c70b3b2be8efeab515422e3"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"3ff11f16c93d3cb878e2cbf0efe388d14e602698","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        private_key \u003d self._get_server_key(server)"},{"line_number":438,"context_line":"        ssh_client \u003d self._ssh_to_server(ip_address, private_key)"},{"line_number":439,"context_line":"        self._check_dns_server(ssh_client, [serv_list[0]])"},{"line_number":440,"context_line":"        if len(serv_list) \u003e 1:"},{"line_number":441,"context_line":"            self.subnet.update(dns_nameservers\u003d[serv_list[1]])"},{"line_number":442,"context_line":"            self._check_dns_server(ssh_client, [serv_list[1]])"},{"line_number":443,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_bd52ef10","line":440,"in_reply_to":"5a890539_d943546a","updated":"2014-12-02 13:31:55.000000000","message":"Done","commit_id":"d4d155d909e663522c70b3b2be8efeab515422e3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def _check_default_dns_nameserver(self, network):"},{"line_number":292,"context_line":"        \"\"\""},{"line_number":293,"context_line":"        When no nameserver is passed on subnet creation, VM should be"},{"line_number":294,"context_line":"        configured to use DHCP port address as DNS nameserver"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        via ssh check VM internal connectivity:"},{"line_number":297,"context_line":"        Verify nameserver matches default configuration"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_28a780be","line":294,"updated":"2014-12-03 03:00:36.000000000","message":"Where is this assumption coming from? Is it really enforcable?","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def _check_default_dns_nameserver(self, network):"},{"line_number":292,"context_line":"        \"\"\""},{"line_number":293,"context_line":"        When no nameserver is passed on subnet creation, VM should be"},{"line_number":294,"context_line":"        configured to use DHCP port address as DNS nameserver"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        via ssh check VM internal connectivity:"},{"line_number":297,"context_line":"        Verify nameserver matches default configuration"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_5e6f26fc","line":294,"in_reply_to":"5a890539_28a780be","updated":"2014-12-03 06:24:52.000000000","message":"Neutron devs. I\u0027ll try and look for a documentation","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"f9b77ca5a451e1d2f753472e8b6129284ad16300","unresolved":false,"context_lines":[{"line_number":291,"context_line":"    def _check_default_dns_nameserver(self, network):"},{"line_number":292,"context_line":"        \"\"\""},{"line_number":293,"context_line":"        When no nameserver is passed on subnet creation, VM should be"},{"line_number":294,"context_line":"        configured to use DHCP port address as DNS nameserver"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        via ssh check VM internal connectivity:"},{"line_number":297,"context_line":"        Verify nameserver matches default configuration"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_fb08db2e","line":294,"in_reply_to":"5a890539_5e6f26fc","updated":"2014-12-03 10:45:47.000000000","message":"This is because of dnsmasq.\nThis assumption might not work once we have other DHCP drivers.\n\nBy adding a test asserting this, we\u0027re also implying that a behaviour dictated by dnsmasq becomes neutron\u0027s default behaviour.\nI would say that if the dns server is not specified, then the setting on the VM is undetermined and we should not test it.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self._setup_network_and_servers()"},{"line_number":392,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":393,"context_line":"        self._check_network_internal_connectivity(network\u003dself.network)"},{"line_number":394,"context_line":"        self._check_default_dns_nameserver(network\u003dself.network)"},{"line_number":395,"context_line":"        self._check_network_external_connectivity()"},{"line_number":396,"context_line":"        self._disassociate_floating_ips()"},{"line_number":397,"context_line":"        self.check_public_network_connectivity(should_connect\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_08bba4e5","line":394,"updated":"2014-12-03 03:00:36.000000000","message":"I would not do this on every verify, just run the check in the dns test, at least for this patch. (future patches could potentially add this check to that method)","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self._setup_network_and_servers()"},{"line_number":392,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":393,"context_line":"        self._check_network_internal_connectivity(network\u003dself.network)"},{"line_number":394,"context_line":"        self._check_default_dns_nameserver(network\u003dself.network)"},{"line_number":395,"context_line":"        self._check_network_external_connectivity()"},{"line_number":396,"context_line":"        self._disassociate_floating_ips()"},{"line_number":397,"context_line":"        self.check_public_network_connectivity(should_connect\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_fe4a9281","line":394,"in_reply_to":"5a890539_08bba4e5","updated":"2014-12-03 06:24:52.000000000","message":"I understand if you are objecting to the scope of the patch, but other than that, what would be the difference if we add this in a future patch?","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            if not result:"},{"line_number":435,"context_line":"                LOG.debug(\u0027refreshing DHCP\u0027)"},{"line_number":436,"context_line":"                output \u003d ssh_client.renew_dhcp_lease()"},{"line_number":437,"context_line":"                LOG.debug(output)"},{"line_number":438,"context_line":"            return result"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.assertTrue(test.call_until_true(_check_server,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_2805c010","line":437,"updated":"2014-12-03 03:00:36.000000000","message":"Is the output from a dhcp renew really useful for debugging? At least on my systems (which don\u0027t use the same dhcp client) there is nothing about nameserver configuration in the output from a renew.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            if not result:"},{"line_number":435,"context_line":"                LOG.debug(\u0027refreshing DHCP\u0027)"},{"line_number":436,"context_line":"                output \u003d ssh_client.renew_dhcp_lease()"},{"line_number":437,"context_line":"                LOG.debug(output)"},{"line_number":438,"context_line":"            return result"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.assertTrue(test.call_until_true(_check_server,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_f94d4c73","line":437,"in_reply_to":"5a890539_2805c010","updated":"2014-12-03 06:24:52.000000000","message":"Well, some clients don\u0027t set return code to 1 if lease failed, so it\u0027s helpful to look at the output. but I could remove it.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                LOG.debug(output)"},{"line_number":438,"context_line":"            return result"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.assertTrue(test.call_until_true(_check_server,"},{"line_number":441,"context_line":"                                             CONF.compute.ping_timeout,"},{"line_number":442,"context_line":"                                             1))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_ad79c230","line":440,"updated":"2014-12-03 03:00:36.000000000","message":"This just seems like a bad way to handle the the dns failure. I get what you\u0027re going for by refreshing the dhcp lease you hope that will refresh the dns info. But I don\u0027t think we should just fail. If the dns info didn\u0027t get picked up correctly by the time the guest is booted and we\u0027re able to login something went wrong and trying to force it like this is just waste of time. \n\nMaybe I\u0027m just naive in my understanding of how the dhcp agent operates, but from my quick glance at the code there isn\u0027t anything to indicate that the nameserver info getting set in the dnsmasq option file is async and will be likely to change on subsequent dhcp renews.\n\nIf you need to do a renew after the subnet update (I can\u0027t remember if that\u0027s required or not, I feel like it shouldn\u0027t be, but can\u0027t think of how that would work without requiring it) I think you should just do that as part of test once and leave it at that.\n\nI also think doing this makes more assumptions about the test images. It\u0027s possible that the test image is configured to not dynamically update the resolv.conf file on a dhcp renew. That would work for all the other tests since dns isn\u0027t used anywhere else.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                LOG.debug(output)"},{"line_number":438,"context_line":"            return result"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.assertTrue(test.call_until_true(_check_server,"},{"line_number":441,"context_line":"                                             CONF.compute.ping_timeout,"},{"line_number":442,"context_line":"                                             1))"},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_f99b8cc6","line":440,"in_reply_to":"5a890539_ad79c230","updated":"2014-12-03 06:24:52.000000000","message":"Neutron is set to push dns (and \"host routes\" - that\u0027s a future test) via dhcp updates, If, for some reason, the image is set to not get dns details via dhcp updates, against Neutron design, this whole test is invalid, and should be skipped.\nI\u0027ll add a skip flag for it","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.assertTrue(test.call_until_true(_check_server,"},{"line_number":441,"context_line":"                                             CONF.compute.ping_timeout,"},{"line_number":442,"context_line":"                                             1))"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":445,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_8d95e641","line":442,"updated":"2014-12-03 03:00:36.000000000","message":"Why a hard interval of 1, if things failed this will result in a lot of dhcp renew attempts. This feels like something where an exponential backoff makes more sense.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.assertTrue(test.call_until_true(_check_server,"},{"line_number":441,"context_line":"                                             CONF.compute.ping_timeout,"},{"line_number":442,"context_line":"                                             1))"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":445,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_99ac48ef","line":442,"in_reply_to":"5a890539_8d95e641","updated":"2014-12-03 06:24:52.000000000","message":"I like your idea of one renewal post update only. So I\u0027ll remove this loop completely","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        dns_server_list \u003d [\u00271.2.3.4\u0027, \u00279.8.7.6\u0027]"},{"line_number":464,"context_line":"        self._setup_network_and_servers(dns_nameservers\u003d[dns_server_list[0]])"},{"line_number":465,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":466,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"},{"line_number":467,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":468,"context_line":"        private_key \u003d self._get_server_key(server)"},{"line_number":469,"context_line":"        ssh_client \u003d self._ssh_to_server(ip_address, private_key)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_8d20864a","line":466,"updated":"2014-12-03 03:00:36.000000000","message":"Doesn\u0027t this mean we\u0027re reusing the floating ip var from the other tests? I feel like treating this as an class scoped variable is incorrect. I get that functionally it\u0027s fine, because of how we run things in parallel and the built-in cleanup code, but you have to do some digging to figure out why that\u0027s the case.\n\nI feel like before this patch we should push another to fix that to make it a bit clearer and cleaner that these should be created for each test and cleaned up after, by making setup_network_and_server actually return it, and go from there.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":463,"context_line":"        dns_server_list \u003d [\u00271.2.3.4\u0027, \u00279.8.7.6\u0027]"},{"line_number":464,"context_line":"        self._setup_network_and_servers(dns_nameservers\u003d[dns_server_list[0]])"},{"line_number":465,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":466,"context_line":"        floating_ip, server \u003d self.floating_ip_tuple"},{"line_number":467,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":468,"context_line":"        private_key \u003d self._get_server_key(server)"},{"line_number":469,"context_line":"        ssh_client \u003d self._ssh_to_server(ip_address, private_key)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_597e606b","line":466,"in_reply_to":"5a890539_8d20864a","updated":"2014-12-03 06:24:52.000000000","message":"ok. I\u0027ll work on that. but this would be an unrelated patch.\nThe floating ip var is initialized in \"_setup_network_and_servers\".\nThe whole class is built so that each test starts with a new VM initialized with a new floating IP, so it\u0027s not a problem really. just readability issue.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8b04d4f200b9ad3a5f02e9706718eb39e397ffe2","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":468,"context_line":"        private_key \u003d self._get_server_key(server)"},{"line_number":469,"context_line":"        ssh_client \u003d self._ssh_to_server(ip_address, private_key)"},{"line_number":470,"context_line":"        self._check_dns_server(ssh_client, [dns_server_list[0]])"},{"line_number":471,"context_line":"        self.subnet.update(dns_nameservers\u003d[dns_server_list[1]])"},{"line_number":472,"context_line":"        self._check_dns_server(ssh_client, [dns_server_list[1]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_6dad1a9b","line":470,"updated":"2014-12-03 03:00:36.000000000","message":"I feel like before you ssh into the guest to verify it got the right info got set in neutron. (if it\u0027s possible to do that with the api) I don\u0027t think we want to get this far if neutron fails to setup the nameservers.","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"d9ba5d18fb4dcbfe250a20f412c2cfee62f9ae61","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":468,"context_line":"        private_key \u003d self._get_server_key(server)"},{"line_number":469,"context_line":"        ssh_client \u003d self._ssh_to_server(ip_address, private_key)"},{"line_number":470,"context_line":"        self._check_dns_server(ssh_client, [dns_server_list[0]])"},{"line_number":471,"context_line":"        self.subnet.update(dns_nameservers\u003d[dns_server_list[1]])"},{"line_number":472,"context_line":"        self._check_dns_server(ssh_client, [dns_server_list[1]])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_b98ca481","line":470,"in_reply_to":"5a890539_6dad1a9b","updated":"2014-12-03 06:24:52.000000000","message":"will do","commit_id":"5e83c0e8d20d5f43787e8c7959c60409d43d228b"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e4fd732a58303bcee0486d09eb5887061d145f88","unresolved":false,"context_lines":[{"line_number":325,"context_line":"                                                         src\u003dfloating_ip))"},{"line_number":326,"context_line":"                raise"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def _renew_lease_udhcpc(self, ssh_client):"},{"line_number":329,"context_line":"        \"\"\"Renews DHCP lease via udhcpc client. \"\"\""},{"line_number":330,"context_line":"        file_path \u003d \u0027/var/run/udhcpc.\u0027"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_0c705a3f","line":328,"updated":"2015-01-02 13:54:18.000000000","message":"The dhcp force renew methods should be implemented in the RemoteClient. (-1)","commit_id":"2294c22302b6ef09ef8bf7538a0e4113f8e20ba2"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"75709ef40ee36b137e37d6af07ad3021d2717706","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":463,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":464,"context_line":"    def test_subnet_details(self):"},{"line_number":465,"context_line":"        \"\"\"Tests that subnet\u0027s extra configuration details are effecting"},{"line_number":466,"context_line":"        the VMs"},{"line_number":467,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_cb9e1807","line":464,"updated":"2015-01-05 17:11:33.000000000","message":"The doc string is excellent but the code could have some white spaces to ease the reading and separate the different logical blocks.","commit_id":"71e8cb577c5d1ea0bdbd55b024db2080bf7be60a"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5ba490538fd300461e2296d6881018ade64ec8c6","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        suported_clients \u003d [\u0027udhcpc\u0027, \u0027dhclient\u0027]"},{"line_number":339,"context_line":"        self.assertIn(dhcp_client, suported_clients,"},{"line_number":340,"context_line":"                      \u0027%s DHCP client \u0027"},{"line_number":341,"context_line":"                      \u0027unsupported\u0027 % dhcp_client)"},{"line_number":342,"context_line":"        if dhcp_client \u003d\u003d \u0027udhcpc\u0027:"},{"line_number":343,"context_line":"            floatingips \u003d self.network_client.list_floatingips("},{"line_number":344,"context_line":"                floating_ip_address\u003dssh_client.ssh_client.host)[\u0027floatingips\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_243ded8f","line":341,"updated":"2015-01-06 13:49:15.000000000","message":"This should raise an InvalidConfiguration, rather than fail an assertion.\n\nI someone wants to run scenario tests using an image which does not support any of the supported dhcp clients, the test will fail. Until we have a guest image capability configuration, I guess that\u0027s ok - it\u0027s still possible to exclude the test from the list.\n\nThe alternative would be to allow for a third value here e.g. \"none\" or \"unsupported\" which - if specified - triggers a skip rather than a failure.","commit_id":"706b12b72cc40642f5f1b318afcd36084ba4b77c"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5ba490538fd300461e2296d6881018ade64ec8c6","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            self.assertEqual(1, len(floatingips))"},{"line_number":346,"context_line":"            fixed_ip \u003d floatingips[0][\u0027fixed_ip_address\u0027]"},{"line_number":347,"context_line":"            kwargs[\u0027fixed_ip\u0027] \u003d fixed_ip"},{"line_number":348,"context_line":"        renew_callable \u003d getattr(ssh_client, \u0027_renew_lease_%s\u0027 % dhcp_client)"},{"line_number":349,"context_line":"        return renew_callable(*args, **kwargs)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_04ef1188","line":348,"range":{"start_line":348,"start_character":8,"end_line":348,"end_character":22},"updated":"2015-01-06 13:49:15.000000000","message":"What about defining an helper function \"renew_lease(type, fixed_ip\u003dNone)\" in remote client, which validates \"type\" is a valid one (udhcpc or dhclient), checks fixed_ip is provided is needed, and then invokes the correct function?","commit_id":"706b12b72cc40642f5f1b318afcd36084ba4b77c"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5ba490538fd300461e2296d6881018ade64ec8c6","unresolved":false,"context_lines":[{"line_number":462,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":463,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":464,"context_line":"    def test_subnet_details(self):"},{"line_number":465,"context_line":"        \"\"\"Tests that subnet\u0027s extra configuration details are effecting"},{"line_number":466,"context_line":"        the VMs"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"         NOTE: Neutron subnets push data to servers via dhcp-agent, so any"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_84b0618c","line":465,"updated":"2015-01-06 13:49:15.000000000","message":"\"affecting the VM\" or \"having effect on the VM\"","commit_id":"706b12b72cc40642f5f1b318afcd36084ba4b77c"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5ba490538fd300461e2296d6881018ade64ec8c6","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        \"\"\""},{"line_number":485,"context_line":"        # this test check only updates (no actual resolution) so using"},{"line_number":486,"context_line":"        # arbitrary ip addresses as nameservers, instead of parsing CONF"},{"line_number":487,"context_line":"        dns_server_list \u003d [\u00271.2.3.4\u0027, \u00279.8.7.6\u0027]"},{"line_number":488,"context_line":"        self._setup_network_and_servers(dns_nameservers\u003d[dns_server_list[0]])"},{"line_number":489,"context_line":"        self.check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_5f0ba223","line":487,"updated":"2015-01-06 13:49:15.000000000","message":"Not sure why a list, as they are always used independently.","commit_id":"706b12b72cc40642f5f1b318afcd36084ba4b77c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"18fada63d419c856e7add604eeebc4eb1f93cbe6","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        if not CONF.scenario.dhcp_client:"},{"line_number":484,"context_line":"            LOG.warn(\u0027No DHCP client configured for servers. \u0027"},{"line_number":485,"context_line":"                     \u0027Skipping subnet update checks\u0027)"},{"line_number":486,"context_line":"            return"},{"line_number":487,"context_line":"        ssh_client.renew_lease(fixed_ip\u003dfloating_ip[\u0027fixed_ip_address\u0027])"},{"line_number":488,"context_line":"        self._check_dns_server(ssh_client, [alt_dns_server])"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_667d36e7","line":486,"updated":"2015-01-15 08:26:31.000000000","message":"Even if outputting LOG.warn(), I guess many people cannot notice this message in many cases because the test result will be \"ok\".\n\nSo how about adding the decorator\n\n @testtools.skipUnless(not CONF.scenario.dhcp_client,\n                       \"DHCP client is not available.\")\n\nto the test for clarifying the skip?","commit_id":"0f3fdefe6972c3a6f86af1847a208bb2d57767c3"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"60333c10e24915b9c6657b489eee01618369c047","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        if not CONF.scenario.dhcp_client:"},{"line_number":484,"context_line":"            LOG.warn(\u0027No DHCP client configured for servers. \u0027"},{"line_number":485,"context_line":"                     \u0027Skipping subnet update checks\u0027)"},{"line_number":486,"context_line":"            return"},{"line_number":487,"context_line":"        ssh_client.renew_lease(fixed_ip\u003dfloating_ip[\u0027fixed_ip_address\u0027])"},{"line_number":488,"context_line":"        self._check_dns_server(ssh_client, [alt_dns_server])"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a961159_1e673cb9","line":486,"in_reply_to":"3a961159_667d36e7","updated":"2015-01-15 21:01:43.000000000","message":"We don\u0027t want to skip the whole test. the first part can be checked regardless of dhcp client support.\nOnly skip the update","commit_id":"0f3fdefe6972c3a6f86af1847a208bb2d57767c3"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9a6ccd6cf0b3c0b54bdb336cffef37b649562c55","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                 act_serv\u003dservers,"},{"line_number":437,"context_line":"                                 trgt_serv\u003ddns_servers))"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    @testtools.skipUnless(not CONF.scenario.dhcp_client,"},{"line_number":440,"context_line":"                          \"DHCP client is not available.\")"},{"line_number":441,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":442,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_c6d6bc26","line":439,"updated":"2015-01-16 09:39:25.000000000","message":"I think the logic is wrong here. It should be \"skipIf(not\" or \"skipUnless without the not\"","commit_id":"c1bf4cf4a8de3e3989095f89debc66800a01ebf8"}]}
