)]}'
{"cinder/ssh_utils.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"906e02b871b13d80bcff0c6a57576dfea7f59ff7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027with a host key present in the configured \u0027"},{"line_number":40,"context_line":"                     \u0027\"ssh_hosts_key_file\".  When set to \"False\" the host key \u0027"},{"line_number":41,"context_line":"                     \u0027will be saved upon first connection and used for \u0027"},{"line_number":42,"context_line":"                     \u0027subsequent connections.  OPTIONAL: Default\u003dFalse\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027ssh_hosts_key_file\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/home/cinder/.ssh/known_hosts\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027File containing SSH host keys for the systems with which \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_621574f0","line":42,"updated":"2014-08-14 21:56:38.000000000","message":"Remove the loud \"OPTIONAL:\" from both of these options, specifying the Default is sufficient.","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"0c3bd43027d08d02904068479678fd30ff5c0ce3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027with a host key present in the configured \u0027"},{"line_number":40,"context_line":"                     \u0027\"ssh_hosts_key_file\".  When set to \"False\" the host key \u0027"},{"line_number":41,"context_line":"                     \u0027will be saved upon first connection and used for \u0027"},{"line_number":42,"context_line":"                     \u0027subsequent connections.  OPTIONAL: Default\u003dFalse\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027ssh_hosts_key_file\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/home/cinder/.ssh/known_hosts\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027File containing SSH host keys for the systems with which \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_b1236004","line":42,"updated":"2014-08-14 20:57:31.000000000","message":"instead of a boolean a we could implement 3 options: AutoAddPolicy, RejectPolicy, WarningPolicy -- I know that is pretty library-specific -- just sayin\u0027 that\u0027s an option.  I just mapped the strings to the paramiko client classes.\n\nI admin the boolean toggle is easier for most people.","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"412369fe2a432a1146a4e2c27aab09e0ae5fccf2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027with a host key present in the configured \u0027"},{"line_number":40,"context_line":"                     \u0027\"ssh_hosts_key_file\".  When set to \"False\" the host key \u0027"},{"line_number":41,"context_line":"                     \u0027will be saved upon first connection and used for \u0027"},{"line_number":42,"context_line":"                     \u0027subsequent connections.  OPTIONAL: Default\u003dFalse\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027ssh_hosts_key_file\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/home/cinder/.ssh/known_hosts\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027File containing SSH host keys for the systems with which \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_4512f157","line":42,"in_reply_to":"7ac7a964_621574f0","updated":"2014-08-21 05:10:32.000000000","message":"Done","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"412369fe2a432a1146a4e2c27aab09e0ae5fccf2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                     \u0027with a host key present in the configured \u0027"},{"line_number":40,"context_line":"                     \u0027\"ssh_hosts_key_file\".  When set to \"False\" the host key \u0027"},{"line_number":41,"context_line":"                     \u0027will be saved upon first connection and used for \u0027"},{"line_number":42,"context_line":"                     \u0027subsequent connections.  OPTIONAL: Default\u003dFalse\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027ssh_hosts_key_file\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027/home/cinder/.ssh/known_hosts\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027File containing SSH host keys for the systems with which \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_a2930ca2","line":42,"in_reply_to":"7ac7a964_b1236004","updated":"2014-08-21 05:10:32.000000000","message":"Being able to have WarningPolicy is what we want to avoid.  So  not going to do this.","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1f015d2b3125d3738d1230c3a6a025b6d771252c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"               default\u003d\u0027/home/cinder/.ssh/known_hosts\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027File containing SSH host keys for the systems with which \u0027"},{"line_number":46,"context_line":"                    \u0027Cinder needs to communicate.  OPTIONAL: \u0027"},{"line_number":47,"context_line":"                    \u0027Default\u003d/home/cinder/.ssh/known_hosts\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_a2a06c91","line":47,"updated":"2014-08-14 22:02:23.000000000","message":"$state_path","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"412369fe2a432a1146a4e2c27aab09e0ae5fccf2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"               default\u003d\u0027/home/cinder/.ssh/known_hosts\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027File containing SSH host keys for the systems with which \u0027"},{"line_number":46,"context_line":"                    \u0027Cinder needs to communicate.  OPTIONAL: \u0027"},{"line_number":47,"context_line":"                    \u0027Default\u003d/home/cinder/.ssh/known_hosts\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_651b6d73","line":47,"in_reply_to":"7ac7a964_a2a06c91","updated":"2014-08-21 05:10:32.000000000","message":"Done","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1f015d2b3125d3738d1230c3a6a025b6d771252c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        # Paramiko handles the case where the file is inaccessible."},{"line_number":73,"context_line":"        if not CONF.ssh_hosts_key_file:"},{"line_number":74,"context_line":"            msg \u003d _(\"ssh_hosts_key_file is not set.\")"},{"line_number":75,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":76,"context_line":"        elif not os.path.isfile(CONF.ssh_hosts_key_file):"},{"line_number":77,"context_line":"            msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":78,"context_line":"                   CONF.ssh_hosts_key_file)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_42d238d3","line":75,"updated":"2014-08-14 22:02:23.000000000","message":"exception.InvalidConfigurationValue?","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"412369fe2a432a1146a4e2c27aab09e0ae5fccf2","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        # Paramiko handles the case where the file is inaccessible."},{"line_number":73,"context_line":"        if not CONF.ssh_hosts_key_file:"},{"line_number":74,"context_line":"            msg \u003d _(\"ssh_hosts_key_file is not set.\")"},{"line_number":75,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":76,"context_line":"        elif not os.path.isfile(CONF.ssh_hosts_key_file):"},{"line_number":77,"context_line":"            msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":78,"context_line":"                   CONF.ssh_hosts_key_file)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_45daf1e8","line":75,"in_reply_to":"7ac7a964_42d238d3","updated":"2014-08-21 05:10:32.000000000","message":"How about exception.ParameterNotFound","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1f015d2b3125d3738d1230c3a6a025b6d771252c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            #    LOG.debug(\"Loading key file: %s\") % key_file"},{"line_number":107,"context_line":"            ssh.load_host_keys(self.hosts_key_file)"},{"line_number":108,"context_line":"            host_keys \u003d ssh.get_host_keys()"},{"line_number":109,"context_line":"            if self.ip not in host_keys:"},{"line_number":110,"context_line":"                if self.strict_ssh_host_key_policy:"},{"line_number":111,"context_line":"                    msg \u003d (_(\"Host \u0027%(host)s\u0027 not found in hosts_key_file \""},{"line_number":112,"context_line":"                             \"\u0027%(key_file)s\u0027 and strict_ssh_host_key_policy \""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_a2514c64","line":109,"updated":"2014-08-14 22:02:23.000000000","message":"If HashKnownHosts is true in ssh_config, this may not work because the host keys that are stored in known_hosts aren\u0027t directly readable.","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"0c3bd43027d08d02904068479678fd30ff5c0ce3","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            ssh.load_host_keys(self.hosts_key_file)"},{"line_number":108,"context_line":"            host_keys \u003d ssh.get_host_keys()"},{"line_number":109,"context_line":"            if self.ip not in host_keys:"},{"line_number":110,"context_line":"                if self.strict_ssh_host_key_policy:"},{"line_number":111,"context_line":"                    msg \u003d (_(\"Host \u0027%(host)s\u0027 not found in hosts_key_file \""},{"line_number":112,"context_line":"                             \"\u0027%(key_file)s\u0027 and strict_ssh_host_key_policy \""},{"line_number":113,"context_line":"                             \"is configured.  Unable to connect!\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_d1c8dc76","line":110,"updated":"2014-08-14 20:57:31.000000000","message":"I would just use set_missing_host_key_policy(parmiko.RejectPolicy()) \n(or AutoAddPolicy based on the config) and skip this testing in our code.  Let the library do the work.\n\nDid you implement your own Reject policy in order to get a better error message?","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1f015d2b3125d3738d1230c3a6a025b6d771252c","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                             \"is configured.  Unable to connect!\") %"},{"line_number":114,"context_line":"                           {\u0027host\u0027: self.ip,"},{"line_number":115,"context_line":"                            \u0027key_file\u0027: self.hosts_key_file})"},{"line_number":116,"context_line":"                    raise exception.CinderException(msg)"},{"line_number":117,"context_line":"                else:"},{"line_number":118,"context_line":"                    LOG.debug(\"Found host \u0027%(ip)s\u0027 for the first time.  Auto \""},{"line_number":119,"context_line":"                              \"adding to hosts key file \u0027%(key_file)s\u0027...\" %"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ac7a964_e24b44ae","line":116,"updated":"2014-08-14 22:02:23.000000000","message":"This should probably be a more specific exception.","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"412369fe2a432a1146a4e2c27aab09e0ae5fccf2","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                             \"is configured.  Unable to connect!\") %"},{"line_number":114,"context_line":"                           {\u0027host\u0027: self.ip,"},{"line_number":115,"context_line":"                            \u0027key_file\u0027: self.hosts_key_file})"},{"line_number":116,"context_line":"                    raise exception.CinderException(msg)"},{"line_number":117,"context_line":"                else:"},{"line_number":118,"context_line":"                    LOG.debug(\"Found host \u0027%(ip)s\u0027 for the first time.  Auto \""},{"line_number":119,"context_line":"                              \"adding to hosts key file \u0027%(key_file)s\u0027...\" %"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_886c0c37","line":116,"in_reply_to":"7ac7a964_e24b44ae","updated":"2014-08-21 05:10:32.000000000","message":"Done","commit_id":"4246a5d548b6f5bd156e7fda40b0b0e3df74d1be"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"f470a7b5983df40e76d26199486f7768cc552e8a","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            # assume this is the first time connecting and auto add."},{"line_number":95,"context_line":"            ssh.load_host_keys(self.hosts_key_file)"},{"line_number":96,"context_line":"            host_keys \u003d ssh.get_host_keys()"},{"line_number":97,"context_line":"            if self.ip not in host_keys:"},{"line_number":98,"context_line":"                if self.strict_ssh_host_key_policy:"},{"line_number":99,"context_line":"                    msg \u003d (_(\"Host \u0027%(host)s\u0027 not found in hosts_key_file \""},{"line_number":100,"context_line":"                             \"\u0027%(key_file)s\u0027 and strict_ssh_host_key_policy \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_0397ff3b","line":97,"updated":"2014-08-21 05:44:20.000000000","message":"You might need to verify that this works with hashed host keys. I did a little research and think it might work, but I thought there was some concern and I haven\u0027t tried it.  I still prefer using ssh.set_missing_host_key_policy(paramiko.RejectPolicy()) to let paramiko do the rejection in ssh.connect instead of writing your own lookup, but perhaps I\u0027m missing something.  Feel free to ping me on that.  Otherwise, I\u0027d like to see this get in, so with that comment, I\u0027m leaning toward +1.","commit_id":"cf824867558e056f3e75a6cf65a8340c39c13f6b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"499ed9ca1e6e937b69fff9b2b9abff6f0295535c","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            # assume this is the first time connecting and auto add."},{"line_number":95,"context_line":"            ssh.load_host_keys(self.hosts_key_file)"},{"line_number":96,"context_line":"            host_keys \u003d ssh.get_host_keys()"},{"line_number":97,"context_line":"            if self.ip not in host_keys:"},{"line_number":98,"context_line":"                if self.strict_ssh_host_key_policy:"},{"line_number":99,"context_line":"                    msg \u003d (_(\"Host \u0027%(host)s\u0027 not found in hosts_key_file \""},{"line_number":100,"context_line":"                             \"\u0027%(key_file)s\u0027 and strict_ssh_host_key_policy \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_66367ce9","line":97,"in_reply_to":"1abeadc6_0397ff3b","updated":"2014-08-26 14:28:05.000000000","message":"Mark, thanks for the reminder.  I meant to make a note so that it was clear I hadn\u0027t ignored the concern.  So, couple of things I discovered.  First, even if have \u0027HashKnownHosts yes\u0027 in /etc/ssh/ssh_config, paramiko doesn\u0027t appear to hash the hosts.  So, it is unlikely that we would end up with a /var/lib/cinder/ssh_known_hosts files that is hashed.\n\nJust to be safe, I specified a hashed known_hosts files and verified that the check for the IP address worked.  It appears that paramiko is unhashing the IP when building the lists of known hosts.  So, I feel we are covered there.  I will add a note accordingly to the code.\n\nThanks for the explanation via IRC on using RejectPolicy.  I will push up another patch set with that change.","commit_id":"cf824867558e056f3e75a6cf65a8340c39c13f6b"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"efa8a25fbcba0edcb8921c78b81af92ec7c84cae","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if not self.hosts_key_file:"},{"line_number":92,"context_line":"            self.hosts_key_file \u003d CONF.ssh_hosts_key_file"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            self.hosts_key_file +\u003d \u0027,\u0027 + CONF.ssh_hosts_key_file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        super(SSHPool, self).__init__(*args, **kwargs)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_b944001c","line":94,"updated":"2014-08-26 22:31:39.000000000","message":"If you\u0027re going to use this trick of using the CONF host key file as a fall-back, it should be explained in the commit message and the config help.  Otherwise it seems sneaky.  Not sure if this is a good idea because there is no way for someone using the kwargs to avoid this trick -- but if you think this will always be desired then I can live with it.","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5045a1b109e6d082b504232d617daf9bc0a9058d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if not self.hosts_key_file:"},{"line_number":92,"context_line":"            self.hosts_key_file \u003d CONF.ssh_hosts_key_file"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            self.hosts_key_file +\u003d \u0027,\u0027 + CONF.ssh_hosts_key_file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        super(SSHPool, self).__init__(*args, **kwargs)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_c9d38a5d","line":94,"in_reply_to":"1abeadc6_b944001c","updated":"2014-08-27 15:47:30.000000000","message":"Let me think about this ... So, the point in allowing the kwargs to be used was I was under the impression that this was already being used by the zonemanager.  When I went and looked closely, I realized they were actually just doing their own connecting to paramiko.  I am going to open a bug for that.\n\nAnyway, so the only real danger I see here is if they are providing the key file and expecting to have hosts autoadded to the file.  Though, that is unlikley if they are providing their own file.\n\nWould you consider it sufficient to make a note in the commit message to document this functionality and add an INFO message here?","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"952477f1ff0f487eb57dc90bb51fe74819efe582","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if not self.hosts_key_file:"},{"line_number":92,"context_line":"            self.hosts_key_file \u003d CONF.ssh_hosts_key_file"},{"line_number":93,"context_line":"        else:"},{"line_number":94,"context_line":"            self.hosts_key_file +\u003d \u0027,\u0027 + CONF.ssh_hosts_key_file"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        super(SSHPool, self).__init__(*args, **kwargs)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_c992aa4a","line":94,"in_reply_to":"1abeadc6_c9d38a5d","updated":"2014-08-27 19:15:31.000000000","message":"or they provide a key file and expect/want a reject, but the default allows a connect.  That\u0027s probably not a real situation -- more theoretical.\n\nYes.  If you make those notes and no one else has an issue with it, then I\u0027m OK with it.  I might even learn to like it.","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"efa8a25fbcba0edcb8921c78b81af92ec7c84cae","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def create(self):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssh \u003d paramiko.SSHClient()"},{"line_number":101,"context_line":"            print(\u0027JSBRYANT: in create\u0027, self.hosts_key_file)"},{"line_number":102,"context_line":"            if \u0027,\u0027 in self.hosts_key_file:"},{"line_number":103,"context_line":"                files \u003d string.split(self.hosts_key_file, \u0027,\u0027)"},{"line_number":104,"context_line":"                for f in files:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_361b9fcb","line":101,"updated":"2014-08-26 22:31:39.000000000","message":"If you\u0027re going to print your name, you have to also print your phone number for support calls.","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"28e1df61c905cf84584168c0b669be63c694fbe7","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def create(self):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssh \u003d paramiko.SSHClient()"},{"line_number":101,"context_line":"            print(\u0027JSBRYANT: in create\u0027, self.hosts_key_file)"},{"line_number":102,"context_line":"            if \u0027,\u0027 in self.hosts_key_file:"},{"line_number":103,"context_line":"                files \u003d string.split(self.hosts_key_file, \u0027,\u0027)"},{"line_number":104,"context_line":"                for f in files:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_7698b71b","line":101,"updated":"2014-08-26 22:10:06.000000000","message":"remove.","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5045a1b109e6d082b504232d617daf9bc0a9058d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def create(self):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssh \u003d paramiko.SSHClient()"},{"line_number":101,"context_line":"            print(\u0027JSBRYANT: in create\u0027, self.hosts_key_file)"},{"line_number":102,"context_line":"            if \u0027,\u0027 in self.hosts_key_file:"},{"line_number":103,"context_line":"                files \u003d string.split(self.hosts_key_file, \u0027,\u0027)"},{"line_number":104,"context_line":"                for f in files:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_abe00b97","line":101,"in_reply_to":"1abeadc6_361b9fcb","updated":"2014-08-27 15:47:30.000000000","message":"Done  ... Very funny.  ;-)","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"efa8a25fbcba0edcb8921c78b81af92ec7c84cae","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                files \u003d string.split(self.hosts_key_file, \u0027,\u0027)"},{"line_number":104,"context_line":"                for f in files:"},{"line_number":105,"context_line":"                    ssh.load_host_keys(f)"},{"line_number":106,"context_line":"                    print(\"JSBRYANT: loaded: \", f)"},{"line_number":107,"context_line":"            else:"},{"line_number":108,"context_line":"                ssh.load_host_keys(self.hosts_key_file)"},{"line_number":109,"context_line":"            # If strict_ssh_host_key_policy is set we want to reject, by"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_5679fbfa","line":106,"updated":"2014-08-26 22:31:39.000000000","message":"ditto","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"28e1df61c905cf84584168c0b669be63c694fbe7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                files \u003d string.split(self.hosts_key_file, \u0027,\u0027)"},{"line_number":104,"context_line":"                for f in files:"},{"line_number":105,"context_line":"                    ssh.load_host_keys(f)"},{"line_number":106,"context_line":"                    print(\"JSBRYANT: loaded: \", f)"},{"line_number":107,"context_line":"            else:"},{"line_number":108,"context_line":"                ssh.load_host_keys(self.hosts_key_file)"},{"line_number":109,"context_line":"            # If strict_ssh_host_key_policy is set we want to reject, by"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_969f1303","line":106,"updated":"2014-08-26 22:10:06.000000000","message":"remove","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"5045a1b109e6d082b504232d617daf9bc0a9058d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                files \u003d string.split(self.hosts_key_file, \u0027,\u0027)"},{"line_number":104,"context_line":"                for f in files:"},{"line_number":105,"context_line":"                    ssh.load_host_keys(f)"},{"line_number":106,"context_line":"                    print(\"JSBRYANT: loaded: \", f)"},{"line_number":107,"context_line":"            else:"},{"line_number":108,"context_line":"                ssh.load_host_keys(self.hosts_key_file)"},{"line_number":109,"context_line":"            # If strict_ssh_host_key_policy is set we want to reject, by"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_abf72b58","line":106,"in_reply_to":"1abeadc6_5679fbfa","updated":"2014-08-27 15:47:30.000000000","message":"Done","commit_id":"d6f8d10ba32444d93a9c0f96e67a384e68f2e83e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"039089fa5138451e8666b5b607659852def33c45","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if not self.hosts_key_file:"},{"line_number":95,"context_line":"            self.hosts_key_file \u003d CONF.ssh_hosts_key_file"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            self.hosts_key_file +\u003d \u0027,\u0027 + CONF.ssh_hosts_key_file"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        super(SSHPool, self).__init__(*args, **kwargs)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_f33f26b2","line":97,"updated":"2014-09-03 19:06:57.000000000","message":"This is pretty strange, seems like self.hosts_key_file should just be a list.","commit_id":"8cd11d8a57b93c52b3727316edea589402265d15"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b334f77598d761b4422493849c5a0cc50bc15299","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        if not self.hosts_key_file:"},{"line_number":95,"context_line":"            self.hosts_key_file \u003d CONF.ssh_hosts_key_file"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            self.hosts_key_file +\u003d \u0027,\u0027 + CONF.ssh_hosts_key_file"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        super(SSHPool, self).__init__(*args, **kwargs)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_4be8127c","line":97,"in_reply_to":"fa98f980_f33f26b2","updated":"2014-09-04 19:06:57.000000000","message":"I had started down that path and ran into some issue.  I think I may have been wrapped around the axle with unit test issues though.  So, I will look into doing that.","commit_id":"8cd11d8a57b93c52b3727316edea589402265d15"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"ef58da001c34e7e04afc86afc3c5d16dccb48269","unresolved":false,"context_lines":[{"line_number":291,"context_line":"#strict_ssh_host_key_policy\u003dfalse"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"# File containing SSH host keys for the systems with which"},{"line_number":294,"context_line":"# Cinder needs to communicate.  OPTIONAL:"},{"line_number":295,"context_line":"# Default\u003d$state_path/known_hosts (string value)"},{"line_number":296,"context_line":"#ssh_hosts_key_file\u003d$state_path/ssh_known_hosts"},{"line_number":297,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":5,"id":"1abeadc6_d2f08aff","line":294,"updated":"2014-08-27 19:17:48.000000000","message":"Probably should mention that the default is used as a fallback here.","commit_id":"0ff31ebaee573c69a0d50d37260bb5737f03879f"}]}
