)]}'
{"tempest/common/ssh.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e112cf3225f958d0a61cbfc7c9492718b33be952","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import time"},{"line_number":22,"context_line":"import warnings"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import six"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from tempest import exceptions"},{"line_number":27,"context_line":"from tempest.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_21cfaf58","line":24,"updated":"2014-06-25 20:38:30.000000000","message":"Unrelated??!?!?!","commit_id":"21f85b78566a84e41c999dbb2a48c7127ce95cc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5dc1734d6fbe590a68d77c77664bd8bd61d9d9ef","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import time"},{"line_number":22,"context_line":"import warnings"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import six"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from tempest import exceptions"},{"line_number":27,"context_line":"from tempest.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_c17a8bef","line":24,"in_reply_to":"1ae5cdf2_21cfaf58","updated":"2014-06-25 20:39:16.000000000","message":"FTR, I don\u0027t care, I\u0027m fine with the cleanup while changing imports.","commit_id":"21f85b78566a84e41c999dbb2a48c7127ce95cc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e112cf3225f958d0a61cbfc7c9492718b33be952","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                         self.username, self.host)"},{"line_number":81,"context_line":"                return ssh"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            except subprocess.CalledProcessError as e:"},{"line_number":84,"context_line":"                LOG.warning(\"Failed to ping %s\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            except (socket.error,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_41f11b95","line":83,"updated":"2014-06-25 20:38:30.000000000","message":"Don\u0027t need the e var if not using it.","commit_id":"21f85b78566a84e41c999dbb2a48c7127ce95cc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e112cf3225f958d0a61cbfc7c9492718b33be952","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                return ssh"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            except subprocess.CalledProcessError as e:"},{"line_number":84,"context_line":"                LOG.warning(\"Failed to ping %s\")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            except (socket.error,"},{"line_number":87,"context_line":"                    paramiko.SSHException) as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_01e9d3b6","line":84,"updated":"2014-06-25 20:38:30.000000000","message":"No replacement var here.\n\nAlso, use the _LW from gettextutils.","commit_id":"21f85b78566a84e41c999dbb2a48c7127ce95cc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e112cf3225f958d0a61cbfc7c9492718b33be952","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            except (socket.error,"},{"line_number":87,"context_line":"                    paramiko.SSHException) as e:"},{"line_number":88,"context_line":"                LOG.warning(\"Failed to establish authenticated ssh\""},{"line_number":89,"context_line":"                            \" connection to %s@%s (%s). Number attempts: %s.\""},{"line_number":90,"context_line":"                            \" Retry after %d seconds.\","},{"line_number":91,"context_line":"                            self.username, self.host, e, attempts, bsleep)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_21240f0d","line":88,"updated":"2014-06-25 20:38:30.000000000","message":"Since you\u0027re moving this anyway, use the _LW from gettextutils now.","commit_id":"21f85b78566a84e41c999dbb2a48c7127ce95cc2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"e8772a8b4cef09e4f9cb8dfda8c8a418a26ca513","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.timeout \u003d int(timeout)"},{"line_number":52,"context_line":"        self.channel_timeout \u003d float(channel_timeout)"},{"line_number":53,"context_line":"        self.buf_size \u003d 1024"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _get_ssh_connection(self, sleep\u003d1.5, backoff\u003d1):"},{"line_number":56,"context_line":"        \"\"\"Returns an ssh connection to the specified host.\"\"\""},{"line_number":57,"context_line":"        bsleep \u003d sleep"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_a606ba1a","line":54,"updated":"2014-07-30 12:59:22.000000000","message":"In the frame of an SSH connection, I don\u0027t think this code should be implicitly aware of whether or not the destination is pingable or not, especially since a ping can fail for multiple reasons, network failure, machine failure... (like security groups not allowing ICMP).","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"2bcdc31bdefb95f7effaefd0308691dbf0003d6d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.timeout \u003d int(timeout)"},{"line_number":52,"context_line":"        self.channel_timeout \u003d float(channel_timeout)"},{"line_number":53,"context_line":"        self.buf_size \u003d 1024"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _get_ssh_connection(self, sleep\u003d1.5, backoff\u003d1):"},{"line_number":56,"context_line":"        \"\"\"Returns an ssh connection to the specified host.\"\"\""},{"line_number":57,"context_line":"        bsleep \u003d sleep"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_b286ad14","line":54,"in_reply_to":"baada198_a606ba1a","updated":"2014-08-04 05:25:37.000000000","message":"So the thing to remember is that in tempest we control everything that\u0027s being created. We already make sure icmp is enabled in the default secgroup for the  devstack gate jobs. If we\u0027re not doing this in tempest (it might be in devstack) we should add a check to ensure icmp (and ssh for that matter) is enabled for nodes we plan to login into.\n\nThe harms you listed at the end of the list is actually what the intent of doing the ping first is. Right now if an ssh failure occurs we have no idea if the network is reachable (for any of the reasons you metioned or another) Which is a not a good situation to be in from debugging the failure. So we\u0027re using ping to filter the list of possible reasons for the failure.\n\nThat being said I think it\u0027ll probably be useful as a follow-on patch to maybe make this configurable or opt-out, but default on. But, that\u0027s something we dicuss in the future, because right now this whole ssh verification path probably needs to be refactored. This is really a stop-gate as a first step for debugging non-deterministic ssh failures in the gate.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"cd525dfbb90ab6191a8f74cf0e81bca90e012686","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        attempts \u003d 0"},{"line_number":71,"context_line":"        while True:"},{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                self._is_connected(self.host)"},{"line_number":74,"context_line":"                ssh.connect(self.host, username\u003dself.username,"},{"line_number":75,"context_line":"                            password\u003dself.password,"},{"line_number":76,"context_line":"                            look_for_keys\u003dself.look_for_keys,"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_b2e2b000","line":73,"updated":"2014-07-30 08:51:54.000000000","message":"please handle each \"risky\" code with its own try block:\n\n\ntry:\n   self._is_connected(self.host)\nexcept exceptions.CommandFailed as e:\n   LOG.warning(\"Failed to ping %s (%s)\" % (self.host, e))\ntry:\n   ssh.connect\nexcept (socket.error,paramiko.SSHException) as e:","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"2bcdc31bdefb95f7effaefd0308691dbf0003d6d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        attempts \u003d 0"},{"line_number":71,"context_line":"        while True:"},{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                self._is_connected(self.host)"},{"line_number":74,"context_line":"                ssh.connect(self.host, username\u003dself.username,"},{"line_number":75,"context_line":"                            password\u003dself.password,"},{"line_number":76,"context_line":"                            look_for_keys\u003dself.look_for_keys,"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_b2022d70","line":73,"in_reply_to":"baada198_b2e2b000","updated":"2014-08-04 05:25:37.000000000","message":"So I\u0027m not sure that would actually improve anything related to readability. Because while it would be a bit more clear which call the exceptions were coming from, the way it\u0027s formatted right now the try block is all the connection testing.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"cd525dfbb90ab6191a8f74cf0e81bca90e012686","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                return ssh"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            except exceptions.CommandFailed as e:"},{"line_number":84,"context_line":"                LOG.warning(\"Failed to ping %s (%s)\" % (self.host, e))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            except (socket.error,"},{"line_number":87,"context_line":"                    paramiko.SSHException) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_f29a686e","line":84,"updated":"2014-07-30 08:51:54.000000000","message":"I\u0027m not sure I understand - why catch this error? if it fails, shouldn\u0027t ssh fail as well?\n\nalso - shouldn\u0027t the warning be logged on line 113 instead of here?","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"2bcdc31bdefb95f7effaefd0308691dbf0003d6d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                return ssh"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"            except exceptions.CommandFailed as e:"},{"line_number":84,"context_line":"                LOG.warning(\"Failed to ping %s (%s)\" % (self.host, e))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"            except (socket.error,"},{"line_number":87,"context_line":"                    paramiko.SSHException) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_32e53d0a","line":84,"in_reply_to":"baada198_f29a686e","updated":"2014-08-04 05:25:37.000000000","message":"This is part of the retry handling. If we can\u0027t ping that doesn\u0027t mean that everything has failed. We want to retry it over the same retry interval, because it could just be that something as part of the server startup was a bit slow.\n\nAs for L113, it\u0027s not caught there so the tempest exception which adds support for the stderr and stdout logging it was easier to raise it there and catch it here rather than making a custom log message down there which pulls in the stdout and stderr.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"e8772a8b4cef09e4f9cb8dfda8c8a418a26ca513","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def _is_timed_out(self, start_time):"},{"line_number":104,"context_line":"        return (time.time() - self.timeout) \u003e start_time"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _is_connected(self, ip):"},{"line_number":107,"context_line":"        stdout \u003d subprocess.PIPE"},{"line_number":108,"context_line":"        stderr \u003d subprocess.PIPE"},{"line_number":109,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_839528e5","line":106,"updated":"2014-07-30 12:59:22.000000000","message":"I think that the function name is misleading. \u0027is_connected\u0027 hints that a certain persistent connection is made, but in actuality you only check if you can reach the destination using a ping. Maybe \u0027check_connectivity\u0027?\n\nAlso, pinging was already implemented at least 3 times - tempest/scenario/manager.py:_ping_ip_address (two functions in two classes), and tempest/stress/actions/ssh_floating.py. Maybe we can do some code reusing?","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"2bcdc31bdefb95f7effaefd0308691dbf0003d6d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def _is_timed_out(self, start_time):"},{"line_number":104,"context_line":"        return (time.time() - self.timeout) \u003e start_time"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _is_connected(self, ip):"},{"line_number":107,"context_line":"        stdout \u003d subprocess.PIPE"},{"line_number":108,"context_line":"        stderr \u003d subprocess.PIPE"},{"line_number":109,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_5268f120","line":106,"in_reply_to":"baada198_839528e5","updated":"2014-08-04 05:25:37.000000000","message":"So sure there is a bit of duplication, but I\u0027d view that cleanup as outside the scope of this change and unrelated. We can do that as a separate patch.\n\nAs for the rename sure I\u0027ll do that when I get around to the next rev, which might be a while.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"31c91d619257a255d8ad0f3f52127acd0c40b2ee","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        stdout \u003d subprocess.PIPE"},{"line_number":108,"context_line":"        stderr \u003d subprocess.PIPE"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            subprocess.check_call(\"ping -c 1 %s\" % ip, shell\u003dTrue,"},{"line_number":111,"context_line":"                                  stdout\u003dstdout, stderr\u003dstderr)"},{"line_number":112,"context_line":"        except subprocess.CalledProcessError as e:"},{"line_number":113,"context_line":"            raise exceptions.CommandFailed(e.returncode, e.cmd, stdout, stderr)"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_c1506dd7","line":110,"updated":"2014-08-04 06:55:21.000000000","message":"I agree with John about the code duplication. I\u0027d much rather see \"ping\" method pulled out to some utility module now, as part of this test, rather than adding another implementation of it here and hoping for a later cleanup patch. unless you already have/know of a patch in progress, then I withdraw my objection","commit_id":"f7147195de4f575983860f7de9fe57ce1bc1e210"}],"tempest/scenario/test_security_groups_basic_ops.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"e8772a8b4cef09e4f9cb8dfda8c8a418a26ca513","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            name\u003ddata_utils.rand_name(\u0027keypair-smoke-\u0027))"},{"line_number":168,"context_line":"        self.tenants[tenant_id].keypair \u003d keypair"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def _create_tenant_security_groups(self, tenant, ping\u003dTrue):"},{"line_number":171,"context_line":"        access_sg \u003d self._create_empty_security_group("},{"line_number":172,"context_line":"            namestart\u003d\u0027secgroup_access-\u0027,"},{"line_number":173,"context_line":"            tenant_id\u003dtenant.creds.tenant_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_063206f3","line":170,"updated":"2014-07-30 12:59:22.000000000","message":"Please rename to \u0027allow_ping\u0027. Same in L282.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"e8772a8b4cef09e4f9cb8dfda8c8a418a26ca513","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            port_range_max\u003d22,"},{"line_number":186,"context_line":"            direction\u003d\u0027ingress\u0027,"},{"line_number":187,"context_line":"        )"},{"line_number":188,"context_line":"        ping_rule \u003d dict("},{"line_number":189,"context_line":"            protocol\u003d\u0027icmp\u0027,"},{"line_number":190,"context_line":"            direction\u003d\u0027ingress\u0027"},{"line_number":191,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_2631caed","line":188,"updated":"2014-07-30 12:59:22.000000000","message":"Please move this variable declaration to inside the \u0027if ping\u0027 block, as it is not needed if ping \u003d\u003d False.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"cd525dfbb90ab6191a8f74cf0e81bca90e012686","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            # deploy new tenant"},{"line_number":434,"context_line":"            self._deploy_tenant(self.alt_tenant, ping\u003dFalse)"},{"line_number":435,"context_line":"            self._verify_network_details(self.alt_tenant)"},{"line_number":436,"context_line":"            self._verify_mac_addr(self.alt_tenant)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            # cross tenant check"},{"line_number":439,"context_line":"            source_tenant \u003d self.primary_tenant"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_b221d0ff","line":436,"updated":"2014-07-30 08:51:54.000000000","message":"this fails jenkins because we try to ssh to the the new vm as well","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"2bcdc31bdefb95f7effaefd0308691dbf0003d6d","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            # deploy new tenant"},{"line_number":434,"context_line":"            self._deploy_tenant(self.alt_tenant, ping\u003dFalse)"},{"line_number":435,"context_line":"            self._verify_network_details(self.alt_tenant)"},{"line_number":436,"context_line":"            self._verify_mac_addr(self.alt_tenant)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            # cross tenant check"},{"line_number":439,"context_line":"            source_tenant \u003d self.primary_tenant"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_30b095fc","line":436,"in_reply_to":"baada198_b221d0ff","updated":"2014-08-04 05:25:37.000000000","message":"Yeah, I see that in the logsa at this point I\u0027m just going to delete the ping rule after verify_mac is run here to make this test work.","commit_id":"9a0ccbd0058ee5dea5ef24665d34622f835250b4"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"31c91d619257a255d8ad0f3f52127acd0c40b2ee","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # of storing them as collections on the class."},{"line_number":147,"context_line":"        cls.floating_ips \u003d {}"},{"line_number":148,"context_line":"        cls.tenants \u003d {}"},{"line_number":149,"context_line":"        cls.ping_rule \u003d {}"},{"line_number":150,"context_line":"        creds \u003d cls.credentials()"},{"line_number":151,"context_line":"        cls.primary_tenant \u003d cls.TenantProperties(creds)"},{"line_number":152,"context_line":"        cls.alt_tenant \u003d cls.TenantProperties(cls.alt_creds)"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_41c61d9d","line":149,"updated":"2014-08-04 06:55:21.000000000","message":"the test manages resources at tenant level. Please keep in line with that.\n\nsee suggestion L196","commit_id":"f7147195de4f575983860f7de9fe57ce1bc1e210"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"31c91d619257a255d8ad0f3f52127acd0c40b2ee","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        self._create_security_group_rule(secgroup\u003daccess_sg, **ssh_rule)"},{"line_number":194,"context_line":"        ping_rule \u003d self._create_security_group_rule(secgroup\u003daccess_sg,"},{"line_number":195,"context_line":"                                                     **ping_rule)"},{"line_number":196,"context_line":"        self.ping_rule[tenant] \u003d ping_rule"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _remove_ping_rule(self, tenant):"},{"line_number":199,"context_line":"        self.ping_rule[tenant].delete()"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_213a0998","line":196,"updated":"2014-08-04 06:55:21.000000000","message":"tenant.ping_rule \u003d ping_rule","commit_id":"f7147195de4f575983860f7de9fe57ce1bc1e210"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"31c91d619257a255d8ad0f3f52127acd0c40b2ee","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        self.ping_rule[tenant] \u003d ping_rule"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def _remove_ping_rule(self, tenant):"},{"line_number":199,"context_line":"        self.ping_rule[tenant].delete()"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _verify_network_details(self, tenant):"},{"line_number":202,"context_line":"        # Checks that we see the newly created network/subnet/router via"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_61f24106","line":199,"updated":"2014-08-04 06:55:21.000000000","message":"one line method is a little redundant. could you please use the the single line instaed","commit_id":"f7147195de4f575983860f7de9fe57ce1bc1e210"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"31c91d619257a255d8ad0f3f52127acd0c40b2ee","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            self._deploy_tenant(self.alt_tenant)"},{"line_number":440,"context_line":"            self._verify_network_details(self.alt_tenant)"},{"line_number":441,"context_line":"            self._verify_mac_addr(self.alt_tenant)"},{"line_number":442,"context_line":"            self._remove_ping_rule(self.alt_tenant)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"            # cross tenant check"},{"line_number":445,"context_line":"            source_tenant \u003d self.primary_tenant"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_210849d8","line":442,"updated":"2014-08-04 06:55:21.000000000","message":"suggestion: replace single line method with: self.tenant.ping_rule.delete()\n\nconcern - will this help? won\u0027t ping check be executed still before any ssh.exec_command() and fail?","commit_id":"f7147195de4f575983860f7de9fe57ce1bc1e210"}]}
