)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57759886f02b31a675610cf8a0053311091ccf70","unresolved":false,"context_lines":[{"line_number":18,"context_line":"options : -T"},{"line_number":19,"context_line":"          -o BatchMode\u003dyes"},{"line_number":20,"context_line":"          -e none"},{"line_number":21,"context_line":"          -p 22"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"And if you want, you can change ssh options using nova.conf"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"da86d52c_5e0d2ce7","line":21,"updated":"2015-02-19 09:15:01.000000000","message":"You have forgot to remove this line as suggested by Daniel","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fec2c9b80b0fd91bc1ca71e6f82a94605cc26e69","unresolved":false,"context_lines":[{"line_number":18,"context_line":"options : -T"},{"line_number":19,"context_line":"          -o BatchMode\u003dyes"},{"line_number":20,"context_line":"          -e none"},{"line_number":21,"context_line":"          -p 22"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"And if you want, you can change ssh options using nova.conf"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba7be1f8_f4023db3","line":21,"in_reply_to":"ba7be1f8_c50f4d2d","updated":"2015-02-20 08:18:43.000000000","message":"A well experimented contributor give that interesting comment \"this is liable to cause breakage on upgrade\"","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"b58b6ba55e58eb8499449b18bc930f42d27bb1a6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"options : -T"},{"line_number":19,"context_line":"          -o BatchMode\u003dyes"},{"line_number":20,"context_line":"          -e none"},{"line_number":21,"context_line":"          -p 22"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"And if you want, you can change ssh options using nova.conf"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba7be1f8_8b937ba2","line":21,"in_reply_to":"ba7be1f8_f4023db3","updated":"2015-02-21 07:23:18.000000000","message":"Daniel mentioned a default options. For security reason, ssh port can be changed. (e.q. 3022). In that case, you can change port using this way (-p -3022)","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"d92a364235370d0e2223f821b75e52f949972538","unresolved":false,"context_lines":[{"line_number":18,"context_line":"options : -T"},{"line_number":19,"context_line":"          -o BatchMode\u003dyes"},{"line_number":20,"context_line":"          -e none"},{"line_number":21,"context_line":"          -p 22"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"And if you want, you can change ssh options using nova.conf"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba7be1f8_c50f4d2d","line":21,"in_reply_to":"da86d52c_5e0d2ce7","updated":"2015-02-20 04:12:04.000000000","message":"just show how to use it.","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57759886f02b31a675610cf8a0053311091ccf70","unresolved":false,"context_lines":[{"line_number":23,"context_line":"And if you want, you can change ssh options using nova.conf"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[libvirt]"},{"line_number":26,"context_line":"ssh_connection_options\u003d-T, -o BatchMode\u003dyes, -e none, -p 22"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DocImpact"},{"line_number":29,"context_line":"Closes-Bug: #1323989"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"da86d52c_bef548cc","line":26,"updated":"2015-02-19 09:15:01.000000000","message":"nit: perhaps you can remove \"-p 22\" here","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"d92a364235370d0e2223f821b75e52f949972538","unresolved":false,"context_lines":[{"line_number":23,"context_line":"And if you want, you can change ssh options using nova.conf"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[libvirt]"},{"line_number":26,"context_line":"ssh_connection_options\u003d-T, -o BatchMode\u003dyes, -e none, -p 22"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DocImpact"},{"line_number":29,"context_line":"Closes-Bug: #1323989"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba7be1f8_051a456e","line":26,"in_reply_to":"da86d52c_bef548cc","updated":"2015-02-20 04:12:04.000000000","message":"just show how to use it.","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d0a4b4eb398664d86ec139937ae8c7336684821a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Stephen Ahn \u003cskanddh@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-05 21:34:01 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"rollback status when cold migrate failed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When you can\u0027t access target host during cold migrating,"},{"line_number":10,"context_line":"VM status doesn\u0027t rollback."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a80dd14_7e46cc22","line":7,"updated":"2015-03-12 13:05:59.000000000","message":"please prefix this libvirt:","commit_id":"1cc5737b1f7fec21b53e52b81b74540e728487c1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"966de0370e1363b23974fdb7bf39c962a18f222f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Stephen Ahn \u003cskanddh@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-22 15:43:53 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Rollback status when cold migrate failed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When you can\u0027t access target host during cold migrating,"},{"line_number":10,"context_line":"VM status doesn\u0027t rollback."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"bab921fb_74b6d3dd","line":7,"updated":"2015-04-23 08:06:34.000000000","message":"Is this title too generic? Maybe we can say add option make ssh option configurable. But don\u0027t trust me, I\u0027m Non-English speaker...","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"8e8314aad9ada87edf3e93daa74a6693486a1d12","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Stephen Ahn \u003cskanddh@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-04-22 15:43:53 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"libvirt: Rollback status when cold migrate failed"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When you can\u0027t access target host during cold migrating,"},{"line_number":10,"context_line":"VM status doesn\u0027t rollback."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"bab921fb_2fd45d45","line":7,"in_reply_to":"bab921fb_74b6d3dd","updated":"2015-04-24 00:21:41.000000000","message":"The key point is the \"Rollback when migration failed\".. not ssh options","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"}],"nova/exception.py":[{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"5cec2b40b9bad8bb55621bd1edcab6fa8628e980","unresolved":false,"context_lines":[{"line_number":1852,"context_line":""},{"line_number":1853,"context_line":""},{"line_number":1854,"context_line":"class SSHConnectionError(MigrationError):"},{"line_number":1855,"context_line":"    msg_fmt \u003d _(\"SSH Connection error: %(reason)s\")"},{"line_number":1856,"context_line":""},{"line_number":1857,"context_line":""},{"line_number":1858,"context_line":"class UnsupportedPolicyException(Invalid):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_1c9d8c66","line":1855,"updated":"2015-02-25 16:22:28.000000000","message":"can you move this up with the other MigrationErrors around 1207? And call it EG MigrationSSHError or MigrationSSHConnectionError","commit_id":"614f6fb2a12ba6e742b8128de1808a4e53cfaf1f"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"319c015a194503dcf2c004b022f6de7fdc6d41ce","unresolved":false,"context_lines":[{"line_number":9777,"context_line":""},{"line_number":9778,"context_line":"    def _test_shared_storage_detection(self, is_same):"},{"line_number":9779,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":9780,"context_line":"        self.mox.StubOutWithMock(drvr, \u0027get_host_ip_addr\u0027)"},{"line_number":9781,"context_line":"        self.mox.StubOutWithMock(remotefs, \u0027touch_file\u0027)"},{"line_number":9782,"context_line":"        self.mox.StubOutWithMock(remotefs, \u0027delete_path\u0027)"},{"line_number":9783,"context_line":"        self.mox.StubOutWithMock(os.path, \u0027exists\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_1e943fe0","line":9780,"updated":"2015-04-30 15:56:30.000000000","message":"Why did you shift from mock to mox? Mock is preferred for new test code.","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":9777,"context_line":""},{"line_number":9778,"context_line":"    def _test_shared_storage_detection(self, is_same):"},{"line_number":9779,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":9780,"context_line":"        self.mox.StubOutWithMock(drvr, \u0027get_host_ip_addr\u0027)"},{"line_number":9781,"context_line":"        self.mox.StubOutWithMock(remotefs, \u0027touch_file\u0027)"},{"line_number":9782,"context_line":"        self.mox.StubOutWithMock(remotefs, \u0027delete_path\u0027)"},{"line_number":9783,"context_line":"        self.mox.StubOutWithMock(os.path, \u0027exists\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_0d863e13","line":9780,"in_reply_to":"3acd31a7_1e943fe0","updated":"2015-05-01 15:12:04.000000000","message":"I agree. AFAIK, there is work that is replacing the usage of mox with mock. It\u0027s not nice to add to their work.","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"}],"nova/tests/unit/virt/libvirt/test_remotefs.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":63,"context_line":"    def test_create_dir(self, mock_execute):"},{"line_number":64,"context_line":"        remotefs._execute_ssh(mock.sentinel.host, \u0027mkdir\u0027, \u0027-p\u0027,"},{"line_number":65,"context_line":"                              mock.sentinel.path)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        mock_execute.assert_any_call(\u0027ssh\u0027, \u0027-T\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_ed030241","line":64,"updated":"2015-05-01 15:12:04.000000000","message":"since the test method is called test_create_dir, maybe you should call remotefs.create_dir(...)","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        remotefs._execute_ssh(mock.sentinel.host, \u0027mkdir\u0027, \u0027-p\u0027,"},{"line_number":65,"context_line":"                              mock.sentinel.path)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        mock_execute.assert_any_call(\u0027ssh\u0027, \u0027-T\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":68,"context_line":"                                     \u0027-e\u0027, \u0027none\u0027, mock.sentinel.host,"},{"line_number":69,"context_line":"                                     \u0027mkdir\u0027, \u0027-p\u0027, mock.sentinel.path)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_6d613239","line":67,"updated":"2015-05-01 15:12:04.000000000","message":"utils.execute is called only once. Could you use instead:\n\n    mock_execute.assert_called_once_with(...)","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":72,"context_line":"    def _test_delete_path(self, mock_execute, recursive\u003dTrue):"},{"line_number":73,"context_line":"        rm_option \u003d recursive and \u0027-rf\u0027 or \u0027-f\u0027"},{"line_number":74,"context_line":"        remotefs._execute_ssh(mock.sentinel.host, \u0027rm\u0027, rm_option,"},{"line_number":75,"context_line":"                              mock.sentinel.path)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        mock_execute.assert_any_call(\u0027ssh\u0027, \u0027-T\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_0decfe8d","line":74,"updated":"2015-05-01 15:12:04.000000000","message":"since the test method is called test_delete_path, maybe you should call remotefs.delete_path(...)","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        remotefs._execute_ssh(mock.sentinel.host, \u0027rm\u0027, rm_option,"},{"line_number":75,"context_line":"                              mock.sentinel.path)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        mock_execute.assert_any_call(\u0027ssh\u0027, \u0027-T\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":78,"context_line":"                                     \u0027-e\u0027, \u0027none\u0027, mock.sentinel.host,"},{"line_number":79,"context_line":"                                     \u0027rm\u0027, rm_option, mock.sentinel.path)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_4d643648","line":77,"updated":"2015-05-01 15:12:04.000000000","message":"ditto","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":88,"context_line":"    def test_touch_file(self, mock_execute):"},{"line_number":89,"context_line":"        remotefs._execute_ssh(mock.sentinel.host, \u0027touch\u0027,"},{"line_number":90,"context_line":"                              mock.sentinel.path)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        mock_execute.assert_any_call(\u0027ssh\u0027, \u0027-T\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_8de12e9d","line":89,"updated":"2015-05-01 15:12:04.000000000","message":"since the test method is called test_touch_file, maybe you should call remotefs.touch_file(...)","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        remotefs._execute_ssh(mock.sentinel.host, \u0027touch\u0027,"},{"line_number":90,"context_line":"                              mock.sentinel.path)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        mock_execute.assert_any_call(\u0027ssh\u0027, \u0027-T\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":93,"context_line":"                                     \u0027-e\u0027, \u0027none\u0027, mock.sentinel.host,"},{"line_number":94,"context_line":"                                     \u0027touch\u0027, mock.sentinel.path)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_8d736e15","line":92,"updated":"2015-05-01 15:12:04.000000000","message":"ditto","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9d7449a98d53fd783bb29b9779426470b1900de4","unresolved":false,"context_lines":[{"line_number":5796,"context_line":"                    ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":5797,"context_line":"                ssh_options.append(dest)"},{"line_number":5798,"context_line":"                ssh_options.append(\u0027touch\u0027)"},{"line_number":5799,"context_line":"                ssh_options.append(tmp_path)"},{"line_number":5800,"context_line":"                utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":5801,"context_line":""},{"line_number":5802,"context_line":"                if os.path.exists(tmp_path):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_e9a868dd","line":5799,"updated":"2015-02-09 21:55:20.000000000","message":"This repeated code should be handled in some unified function and called from here.","commit_id":"7e954a8e5aedea5d0585d9e7254f57b8bf896a81"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9d7449a98d53fd783bb29b9779426470b1900de4","unresolved":false,"context_lines":[{"line_number":5840,"context_line":"        # shared storage for instance dir (eg. NFS)."},{"line_number":5841,"context_line":"        inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":5842,"context_line":"        inst_base_resize \u003d inst_base + \"_resize\""},{"line_number":5843,"context_line":""},{"line_number":5844,"context_line":"        shared_storage \u003d self._is_storage_shared_with(dest, inst_base)"},{"line_number":5845,"context_line":""},{"line_number":5846,"context_line":"        # try to create the directory on the remote compute node"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_a99e70b6","line":5843,"updated":"2015-02-09 21:55:20.000000000","message":"Stray whitespace damage.","commit_id":"7e954a8e5aedea5d0585d9e7254f57b8bf896a81"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f8fe9c7bc87773a224d018794c93d404e798e104","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    cfg.ListOpt(\u0027ssh_connection_options\u0027,"},{"line_number":255,"context_line":"                default\u003d["},{"line_number":256,"context_line":"                  \u0027-o NumberOfPasswordPrompts\u003d0\u0027,"},{"line_number":257,"context_line":"                  \u0027-o StrictHostKeyChecking\u003dno\u0027,"},{"line_number":258,"context_line":"                  \u0027-p 22\u0027,"},{"line_number":259,"context_line":"                ],"},{"line_number":260,"context_line":"                help\u003d\u0027List of ssh options.\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_be398d41","line":257,"updated":"2015-02-13 11:42:22.000000000","message":"This is insecure is definitely not something we should do by default - it allows for silent MITM attacks on the ssh server.\n\nAs a default I think we should have\n\n   [ \"-T\", \"-o\", \"BatchMode\u003dyes\", \"-e\", \"none\"]\n\nThe -T disables TTY allocation which we don\u0027t require\n\nThe BatchMode\u003dyes turns off all interactive prompts of any kind.\n\nThe -e none disables the escape character so that the channel is guaranteed 8-bit clean\n\nWe shouldn\u0027t include any -p option, since the host may have already setup ssh_config to point to desired ports and this would override that.","commit_id":"fd063bebdadef367013a754db269c3fcc55ee0a7"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"b84a9c10a475c35965fe650ecd850229dc48b4c6","unresolved":false,"context_lines":[{"line_number":254,"context_line":"    cfg.ListOpt(\u0027ssh_connection_options\u0027,"},{"line_number":255,"context_line":"                default\u003d["},{"line_number":256,"context_line":"                  \u0027-o NumberOfPasswordPrompts\u003d0\u0027,"},{"line_number":257,"context_line":"                  \u0027-o StrictHostKeyChecking\u003dno\u0027,"},{"line_number":258,"context_line":"                  \u0027-p 22\u0027,"},{"line_number":259,"context_line":"                ],"},{"line_number":260,"context_line":"                help\u003d\u0027List of ssh options.\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_1a49bb60","line":257,"in_reply_to":"da86d52c_be398d41","updated":"2015-02-13 15:41:44.000000000","message":"You have to use -p [port] because you changed port in ssh_config.","commit_id":"fd063bebdadef367013a754db269c3fcc55ee0a7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f8fe9c7bc87773a224d018794c93d404e798e104","unresolved":false,"context_lines":[{"line_number":5785,"context_line":"            if os.path.exists(inst_base_resize):"},{"line_number":5786,"context_line":"                utils.execute(\u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":5787,"context_line":"                utils.execute(\u0027mv\u0027, inst_base_resize, inst_base)"},{"line_number":5788,"context_line":"                if not shared_storage:"},{"line_number":5789,"context_line":"                    utils.execute(\u0027ssh\u0027, dest, \u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":5790,"context_line":"        except Exception:"},{"line_number":5791,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_be8fcd2d","line":5788,"updated":"2015-02-13 11:42:22.000000000","message":"Why didn\u0027t you update this use of ssh too ?","commit_id":"fd063bebdadef367013a754db269c3fcc55ee0a7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f8fe9c7bc87773a224d018794c93d404e798e104","unresolved":false,"context_lines":[{"line_number":5807,"context_line":"                    shared_storage \u003d True"},{"line_number":5808,"context_line":"                    os.unlink(tmp_path)"},{"line_number":5809,"context_line":"                else:"},{"line_number":5810,"context_line":"                    utils.execute(\u0027ssh\u0027, dest, \u0027rm\u0027, tmp_path)"},{"line_number":5811,"context_line":"            except Exception:"},{"line_number":5812,"context_line":"                pass"},{"line_number":5813,"context_line":"        return shared_storage"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_3ea4bdb8","line":5810,"updated":"2015-02-13 11:42:22.000000000","message":"Why didn\u0027t you update this use of ssh too ?","commit_id":"fd063bebdadef367013a754db269c3fcc55ee0a7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f8fe9c7bc87773a224d018794c93d404e798e104","unresolved":false,"context_lines":[{"line_number":5819,"context_line":"            ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":5820,"context_line":"        for arg in args:"},{"line_number":5821,"context_line":"            ssh_options.append(arg)"},{"line_number":5822,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":5823,"context_line":""},{"line_number":5824,"context_line":"    def migrate_disk_and_power_off(self, context, instance, dest,"},{"line_number":5825,"context_line":"                                   flavor, network_info,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_bef26d99","line":5822,"updated":"2015-02-13 11:42:22.000000000","message":"I think I\u0027d prefer to see a new code module introduced  \u0027sshfs.py\u0027 and in this file have this method, along with 3 helper methods\n\n  def create_file(path)\n     ....run touch...\n\n  def delete_file(path, recursive\u003dFalse)\n      ... run rm ...\n\n  def create_directory(path)\n       ...rnu mkdir...\n\n\nand make all of the methods in this driver, call the appropriate helper.  Also the config options should be in that sshfs.py file too.","commit_id":"fd063bebdadef367013a754db269c3fcc55ee0a7"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"b84a9c10a475c35965fe650ecd850229dc48b4c6","unresolved":false,"context_lines":[{"line_number":5819,"context_line":"            ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":5820,"context_line":"        for arg in args:"},{"line_number":5821,"context_line":"            ssh_options.append(arg)"},{"line_number":5822,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":5823,"context_line":""},{"line_number":5824,"context_line":"    def migrate_disk_and_power_off(self, context, instance, dest,"},{"line_number":5825,"context_line":"                                   flavor, network_info,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_7ab9d7ca","line":5822,"in_reply_to":"da86d52c_bef26d99","updated":"2015-02-13 15:41:44.000000000","message":"I knew that. but It\u0027s a just patch code. I think we\u0027d better improve step by step.","commit_id":"fd063bebdadef367013a754db269c3fcc55ee0a7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"33f61a108e0d00fe35d1f7f8ac1ae4e8c78dba40","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                  \u0027-T\u0027,"},{"line_number":257,"context_line":"                  \u0027-o BatchMode\u003dyes\u0027,"},{"line_number":258,"context_line":"                  \u0027-e none\u0027,"},{"line_number":259,"context_line":"                  \u0027-p 22\u0027,"},{"line_number":260,"context_line":"                ],"},{"line_number":261,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":262,"context_line":"                     \u0027Syntax is -T, -o BatchMode\u003dyes, -e none, -p 22\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_143322f7","line":259,"updated":"2015-02-16 09:50:29.000000000","message":"As before, do not include \"-p 22\" - this overrides defaults the user might have set in the config file. Our default options should only include things related to making the channel non-interactive \u0026 8-bit clean.","commit_id":"1ef9292b90772835f3ff58cb2012f9e93f7a8dec"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"33f61a108e0d00fe35d1f7f8ac1ae4e8c78dba40","unresolved":false,"context_lines":[{"line_number":5818,"context_line":"            ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":5819,"context_line":"        for arg in args:"},{"line_number":5820,"context_line":"            ssh_options.append(arg)"},{"line_number":5821,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":5822,"context_line":""},{"line_number":5823,"context_line":"    def migrate_disk_and_power_off(self, context, instance, dest,"},{"line_number":5824,"context_line":"                                   flavor, network_info,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_f43a0ec3","line":5821,"updated":"2015-02-16 09:50:29.000000000","message":"As before I\u0027d like to see all this put in a separate remotefs.py code file","commit_id":"1ef9292b90772835f3ff58cb2012f9e93f7a8dec"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"eb0ec8e13d1bbc676e5ff024de14adfbe224f8c4","unresolved":false,"context_lines":[{"line_number":5850,"context_line":"        # shared storage for instance dir (eg. NFS)."},{"line_number":5851,"context_line":"        inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":5852,"context_line":"        inst_base_resize \u003d inst_base + \"_resize\""},{"line_number":5853,"context_line":""},{"line_number":5854,"context_line":"        shared_storage \u003d self._is_storage_shared_with(dest, inst_base)"},{"line_number":5855,"context_line":""},{"line_number":5856,"context_line":"        # try to create the directory on the remote compute node"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_0f0f60e2","line":5853,"updated":"2015-02-17 10:12:25.000000000","message":"no necessary","commit_id":"2e8360d4a4fa347d35f01496ba525c49c13881f1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d91f762dbaf887ffef8c1e38a7fd61235c59cf7a","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                  \u0027-T\u0027,"},{"line_number":258,"context_line":"                  \u0027-o BatchMode\u003dyes\u0027,"},{"line_number":259,"context_line":"                  \u0027-e none\u0027,"},{"line_number":260,"context_line":"                  \u0027-p 22\u0027,"},{"line_number":261,"context_line":"                ],"},{"line_number":262,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":263,"context_line":"                     \u0027Syntax is -T, -o BatchMode\u003dyes, -e none, -p 22\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_49a11da8","line":260,"updated":"2015-02-18 13:57:36.000000000","message":"As requested many times now, do not set the \u0027-p 22\u0027 argument in the default option list as this is liable to cause breakage on upgrade. Also remove references to \u0027-p 22\u0027 in the commit message and help string below.\n\nThis config option should be declared in the remotefs.py file itself too.","commit_id":"3eace8f01a23c3df0703b89f7429600a5bc846e9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d91f762dbaf887ffef8c1e38a7fd61235c59cf7a","unresolved":false,"context_lines":[{"line_number":5788,"context_line":"                if not shared_storage:"},{"line_number":5789,"context_line":"                    remotefs.execute_ssh_with_options("},{"line_number":5790,"context_line":"                                    CONF.libvirt.ssh_connection_options,"},{"line_number":5791,"context_line":"                                    dest, \u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":5792,"context_line":"        except Exception:"},{"line_number":5793,"context_line":"            pass"},{"line_number":5794,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_e9f49188","line":5791,"updated":"2015-02-18 13:57:36.000000000","message":"As mentioned before, I think the remotefs  file should just define methods for each command. eg  remotefs.touch_file(host, path),   remotefs.delete_path(host, path, recursive\u003dTrue|False), remotefs.create_dir(host, path)","commit_id":"3eace8f01a23c3df0703b89f7429600a5bc846e9"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"5cec2b40b9bad8bb55621bd1edcab6fa8628e980","unresolved":false,"context_lines":[{"line_number":6205,"context_line":"            try:"},{"line_number":6206,"context_line":"                remotefs.create_dir(dest, inst_base)"},{"line_number":6207,"context_line":"            except Exception:"},{"line_number":6208,"context_line":"                reason \u003d _(\"Can\u0027t create a instance directory using ssh.\")"},{"line_number":6209,"context_line":"                raise exception.InstanceFaultRollback("},{"line_number":6210,"context_line":"                    exception.SSHConnectionError(reason\u003dreason))"},{"line_number":6211,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_c94fb132","line":6208,"updated":"2015-02-25 16:22:28.000000000","message":"This would be better as:\n\n    \"Failed to create instance directory with ssh: %s\"\n\nwith the reason for the failure provided to the %s, otherwise debugging this failure will be difficult","commit_id":"614f6fb2a12ba6e742b8128de1808a4e53cfaf1f"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"8ed557aac2985edecb1d6c3a6f29924810acf3b4","unresolved":false,"context_lines":[{"line_number":6205,"context_line":"            try:"},{"line_number":6206,"context_line":"                remotefs.create_dir(dest, inst_base)"},{"line_number":6207,"context_line":"            except Exception:"},{"line_number":6208,"context_line":"                reason \u003d _(\"Can\u0027t create a instance directory using ssh.\")"},{"line_number":6209,"context_line":"                raise exception.InstanceFaultRollback("},{"line_number":6210,"context_line":"                    exception.SSHConnectionError(reason\u003dreason))"},{"line_number":6211,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_4e29d988","line":6208,"in_reply_to":"ba7be1f8_c94fb132","updated":"2015-02-26 14:01:59.000000000","message":"I think \"%s\" doesn\u0027t need to. System message already logged in remotefs or processutil file.","commit_id":"614f6fb2a12ba6e742b8128de1808a4e53cfaf1f"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"cf911187b1d35082ab00df8da8c7a201d8c46d77","unresolved":false,"context_lines":[{"line_number":6205,"context_line":"            try:"},{"line_number":6206,"context_line":"                remotefs.create_dir(dest, inst_base)"},{"line_number":6207,"context_line":"            except Exception:"},{"line_number":6208,"context_line":"                reason \u003d _(\"Failed to create instance directory with ssh.\")"},{"line_number":6209,"context_line":"                raise exception.InstanceFaultRollback("},{"line_number":6210,"context_line":"                    exception.MigrationSSHConnectionError(reason\u003dreason))"},{"line_number":6211,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_9743e06a","line":6208,"updated":"2015-02-26 15:02:35.000000000","message":"I think we should retain the root cause longer than this. Not all the way to the user, but far enough that an operator doesn\u0027t have to check logs to see why the instance failed to boot. IE it should make it into the instance_faults table.\n\nI\u0027m going to +1 despite this because I\u0027d like opinions from others.","commit_id":"5d5146661ac4b9f37c87e183b7cc9dbba761c78f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"966de0370e1363b23974fdb7bf39c962a18f222f","unresolved":false,"context_lines":[{"line_number":6186,"context_line":"                utils.execute(\u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":6187,"context_line":"                utils.execute(\u0027mv\u0027, inst_base_resize, inst_base)"},{"line_number":6188,"context_line":"                if not shared_storage:"},{"line_number":6189,"context_line":"                    utils.ssh_execute(dest, \u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":6190,"context_line":"        except Exception:"},{"line_number":6191,"context_line":"            pass"},{"line_number":6192,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab921fb_94ef27b0","side":"PARENT","line":6189,"updated":"2015-04-23 08:06:34.000000000","message":"ssh_execute looks like useless. can we remove it?","commit_id":"2141620d47c919e9cafea9846cabc323142b844e"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"8e8314aad9ada87edf3e93daa74a6693486a1d12","unresolved":false,"context_lines":[{"line_number":6186,"context_line":"                utils.execute(\u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":6187,"context_line":"                utils.execute(\u0027mv\u0027, inst_base_resize, inst_base)"},{"line_number":6188,"context_line":"                if not shared_storage:"},{"line_number":6189,"context_line":"                    utils.ssh_execute(dest, \u0027rm\u0027, \u0027-rf\u0027, inst_base)"},{"line_number":6190,"context_line":"        except Exception:"},{"line_number":6191,"context_line":"            pass"},{"line_number":6192,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab921fb_cf4cc144","side":"PARENT","line":6189,"in_reply_to":"bab921fb_94ef27b0","updated":"2015-04-24 00:21:41.000000000","message":"This is not my code. :)","commit_id":"2141620d47c919e9cafea9846cabc323142b844e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"80c1fb43b55ca32014dd715569cfc2892c600b6b","unresolved":false,"context_lines":[{"line_number":6271,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":6272,"context_line":"                reason \u003d _(\"not able to execute ssh command: %s\") % e"},{"line_number":6273,"context_line":"                raise exception.InstanceFaultRollback("},{"line_number":6274,"context_line":"                    exception.MigrationSSHConnectionError(reason\u003dreason))"},{"line_number":6275,"context_line":""},{"line_number":6276,"context_line":"        self.power_off(instance, timeout, retry_interval)"},{"line_number":6277,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5afe65bd_1d8a27c0","line":6274,"updated":"2015-06-02 12:22:35.000000000","message":"i am not sure that this exception should be changed","commit_id":"58b025ab3775447eaf9e8fa69a45f7f0a6f47374"}],"nova/virt/libvirt/remotefs.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"eb0ec8e13d1bbc676e5ff024de14adfbe224f8c4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    ssh_options \u003d []"},{"line_number":75,"context_line":"    for opt in default_ssh_options:"},{"line_number":76,"context_line":"        ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":77,"context_line":"    for arg in args:"},{"line_number":78,"context_line":"        ssh_options.append(arg)"},{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_0f41200b","line":77,"updated":"2015-02-17 10:12:25.000000000","message":"You should be able to remove this block and use:\n\n  ssh_options.extend(args)","commit_id":"2e8360d4a4fa347d35f01496ba525c49c13881f1"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"eb0ec8e13d1bbc676e5ff024de14adfbe224f8c4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":85,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. Check authorized_keys\"))"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. \"))"},{"line_number":88,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_4f3958d7","line":87,"updated":"2015-02-17 10:12:25.000000000","message":"Can you passe the error returned by the remote host in this case?\n\n  LOG.exception(_LE(\"Fail to ssh connection: (%s). \"), err.stderr)","commit_id":"2e8360d4a4fa347d35f01496ba525c49c13881f1"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"bf289c96bbd83f1d86cf8747f4c39d930a2e77ef","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":85,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. Check authorized_keys\"))"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. \"))"},{"line_number":88,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_3538c5ed","line":87,"in_reply_to":"da86d52c_4f3958d7","updated":"2015-02-18 13:41:52.000000000","message":"We don\u0027t need that.\noslo_concurrency/processutils.py.execute(...) function do that.\nIn this case just show the error message.","commit_id":"2e8360d4a4fa347d35f01496ba525c49c13881f1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d91f762dbaf887ffef8c1e38a7fd61235c59cf7a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                          export_path)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def execute_ssh_with_options(default_ssh_options, *args):"},{"line_number":68,"context_line":"    \"\"\"execute ssh command."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    :param default_ssh_options: Passed to ssh_connection_options in CONF."}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_296f8961","line":67,"updated":"2015-02-18 13:57:36.000000000","message":"The method name is a bit overly verbose - just use \u0027execute_ssh\u0027","commit_id":"3eace8f01a23c3df0703b89f7429600a5bc846e9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d91f762dbaf887ffef8c1e38a7fd61235c59cf7a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def execute_ssh_with_options(default_ssh_options, *args):"},{"line_number":68,"context_line":"    \"\"\"execute ssh command."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    :param default_ssh_options: Passed to ssh_connection_options in CONF."},{"line_number":71,"context_line":"    :param args: Passed to ssh command options."},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_49883d22","line":70,"updated":"2015-02-18 13:57:36.000000000","message":"Get rid of this and just refer to the config option here.","commit_id":"3eace8f01a23c3df0703b89f7429600a5bc846e9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57759886f02b31a675610cf8a0053311091ccf70","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                  \u0027-e none\u0027,"},{"line_number":31,"context_line":"                ],"},{"line_number":32,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":33,"context_line":"                     \u0027Syntax is -T, -o BatchMode\u003dyes, -e none, -p 22\u0027)"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_3e3158a2","line":33,"updated":"2015-02-19 09:15:01.000000000","message":"super-nit: perhaps you can remove \"-p 22\" here","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"330d5f16bdd174460dd6c7f62cea12bbc3984daa","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                  \u0027-e none\u0027,"},{"line_number":31,"context_line":"                ],"},{"line_number":32,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":33,"context_line":"                     \u0027Syntax is -T, -o BatchMode\u003dyes, -e none, -p 22\u0027)"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_01e835e1","line":33,"in_reply_to":"ba7be1f8_6509412c","updated":"2015-02-23 10:28:38.000000000","message":"It is misleading to include it here if it is not part of the default IMHO","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"d92a364235370d0e2223f821b75e52f949972538","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                  \u0027-e none\u0027,"},{"line_number":31,"context_line":"                ],"},{"line_number":32,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":33,"context_line":"                     \u0027Syntax is -T, -o BatchMode\u003dyes, -e none, -p 22\u0027)"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_6509412c","line":33,"in_reply_to":"da86d52c_3e3158a2","updated":"2015-02-20 04:12:04.000000000","message":"No. I\u0027m intend to show that options. It\u0027s not default. but you can use it.","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57759886f02b31a675610cf8a0053311091ccf70","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":93,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. Check authorized_keys\"))"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection.\"))"},{"line_number":96,"context_line":"        raise"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_dec59c5c","line":95,"updated":"2015-02-19 09:15:01.000000000","message":"I still believe it\u0027s important to pass the error message here, please let me know your thinking?","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fec2c9b80b0fd91bc1ca71e6f82a94605cc26e69","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":93,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. Check authorized_keys\"))"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection.\"))"},{"line_number":96,"context_line":"        raise"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_746e4dcb","line":95,"in_reply_to":"ba7be1f8_d208f12f","updated":"2015-02-20 08:18:43.000000000","message":"Since the exception will be re-raised and logged your messages should be in \u0027debug\u0027 level not \u0027error\u0027","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"d92a364235370d0e2223f821b75e52f949972538","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":93,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection. Check authorized_keys\"))"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            LOG.exception(_LE(\"Fail to ssh connection.\"))"},{"line_number":96,"context_line":"        raise"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_d208f12f","line":95,"in_reply_to":"da86d52c_dec59c5c","updated":"2015-02-20 04:12:04.000000000","message":"Before I said, err.stderr message is already logged processutil.execute() message.  You should look out all that code before comment.","commit_id":"68e37ad1e0350a10ac405900153d9f25737b41cf"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"5cec2b40b9bad8bb55621bd1edcab6fa8628e980","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                  \u0027-e none\u0027,"},{"line_number":31,"context_line":"                ],"},{"line_number":32,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":33,"context_line":"                     \u0027Syntax is -T, -o BatchMode\u003dyes, -e none\u0027)"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_095469fd","line":33,"updated":"2015-02-25 16:22:28.000000000","message":"Think you mean:\n\n     Default is \"-T, -o BatchMode\u003dyes, -e none\"","commit_id":"614f6fb2a12ba6e742b8128de1808a4e53cfaf1f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d0a4b4eb398664d86ec139937ae8c7336684821a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                  \u0027-o BatchMode\u003dyes\u0027,"},{"line_number":30,"context_line":"                  \u0027-e none\u0027,"},{"line_number":31,"context_line":"                ],"},{"line_number":32,"context_line":"                help\u003d\u0027List of ssh options.\u0027"},{"line_number":33,"context_line":"                     \u0027Default is -T, -o BatchMode\u003dyes, -e none\u0027)"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_5ef908c7","line":32,"updated":"2015-03-12 13:05:59.000000000","message":"missing space at the end of the line","commit_id":"1cc5737b1f7fec21b53e52b81b74540e728487c1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d0a4b4eb398664d86ec139937ae8c7336684821a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    ssh_options.extend(args)"},{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":89,"context_line":"    except processutils.ProcessExecutionError as err:"},{"line_number":90,"context_line":"        if \u0027Host key verification failed\u0027 in err.stderr:"},{"line_number":91,"context_line":"            LOG.exception(_LE(\"Failed to ssh connection. \""},{"line_number":92,"context_line":"                              \"Check known_hosts\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_9ef1c0cf","line":89,"updated":"2015-03-12 13:05:59.000000000","message":"please use:\nwith excutils.save_and_reraise_exception():","commit_id":"1cc5737b1f7fec21b53e52b81b74540e728487c1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d0a4b4eb398664d86ec139937ae8c7336684821a","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":89,"context_line":"    except processutils.ProcessExecutionError as err:"},{"line_number":90,"context_line":"        if \u0027Host key verification failed\u0027 in err.stderr:"},{"line_number":91,"context_line":"            LOG.exception(_LE(\"Failed to ssh connection. \""},{"line_number":92,"context_line":"                              \"Check known_hosts\"))"},{"line_number":93,"context_line":"        elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":94,"context_line":"            LOG.exception(_LE(\"Failed to ssh connection. \""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_3eb8d4e4","line":91,"updated":"2015-03-12 13:05:59.000000000","message":"why do we need a log exception here - why not a info or warning. the exception will print the whole trace","commit_id":"1cc5737b1f7fec21b53e52b81b74540e728487c1"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6f60eac0bd96855360b53b701a65d3de3f59cfb2","unresolved":false,"context_lines":[{"line_number":83,"context_line":"def _execute_ssh(*args):"},{"line_number":84,"context_line":"    ssh_options \u003d []"},{"line_number":85,"context_line":"    for opt in CONF.libvirt.ssh_connection_options:"},{"line_number":86,"context_line":"        ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":87,"context_line":"    ssh_options.extend(args)"},{"line_number":88,"context_line":"    try:"},{"line_number":89,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_7b9e1f08","line":86,"updated":"2015-04-10 15:43:02.000000000","message":"the options defined in CONF.libvirt.ssh_connection_options won\u0027t change, unless the process restarts. So, Can\u0027t those options be defined as a constant, rather than just resplitting them every single time? (split once)","commit_id":"903644c3641cd546f612577ca08084601f931fe2"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6f60eac0bd96855360b53b701a65d3de3f59cfb2","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":92,"context_line":"            if \u0027Host key verification failed\u0027 in err.stderr:"},{"line_number":93,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":94,"context_line":"                                  \"Check known_hosts\"))"},{"line_number":95,"context_line":"            elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_9bc203e8","line":94,"updated":"2015-04-10 15:43:02.000000000","message":"overindented, unindent to match \"Failed..\"\n\nalso, this should be a warning, rather than just info. Maybe Error?","commit_id":"903644c3641cd546f612577ca08084601f931fe2"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6f60eac0bd96855360b53b701a65d3de3f59cfb2","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                  \"Check known_hosts\"))"},{"line_number":95,"context_line":"            elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                LOG.info(_LI(\"Failed to ssh connection.\"))"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_5bb8fb74","line":97,"updated":"2015-04-10 15:43:02.000000000","message":"ditto\n\nalso, this should be a warning, rather than just info. Maybe Error?","commit_id":"903644c3641cd546f612577ca08084601f931fe2"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6f60eac0bd96855360b53b701a65d3de3f59cfb2","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                LOG.info(_LI(\"Failed to ssh connection.\"))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def create_dir(host, path):"}],"source_content_type":"text/x-python","patch_set":17,"id":"9aa53dc9_fb2eafa3","line":99,"updated":"2015-04-10 15:43:02.000000000","message":"I think this should be a warn level log.","commit_id":"903644c3641cd546f612577ca08084601f931fe2"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":92,"context_line":"            if \u0027Host key verification failed\u0027 in err.stderr:"},{"line_number":93,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":94,"context_line":"                                  \"Check known_hosts\"))"},{"line_number":95,"context_line":"            elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_6d4b7288","line":94,"updated":"2015-05-01 15:12:04.000000000","message":"overindented. It should match \"Failed..\"","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                  \"Check known_hosts\"))"},{"line_number":95,"context_line":"            elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                LOG.info(_LI(\"Failed to ssh connection.\"))"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_2d457a6f","line":97,"updated":"2015-05-01 15:12:04.000000000","message":"ditto","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"966de0370e1363b23974fdb7bf39c962a18f222f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                LOG.info(_LI(\"Failed to ssh connection.\"))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def create_dir(host, path):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab921fb_34ddfb42","line":99,"updated":"2015-04-23 08:06:34.000000000","message":"Looks like in _error_out_instance_on_exception will print exception message also. So it is real useful print those info again?","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8263,"name":"Stephen Ahn","email":"skanddh@gmail.com","username":"StephenAhn"},"change_message_id":"8e8314aad9ada87edf3e93daa74a6693486a1d12","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                LOG.info(_LI(\"Failed to ssh connection.\"))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def create_dir(host, path):"}],"source_content_type":"text/x-python","patch_set":18,"id":"bab921fb_6f16d5f2","line":99,"in_reply_to":"bab921fb_34ddfb42","updated":"2015-04-24 00:21:41.000000000","message":"The last thing is unexpected exception. That\u0027s why I log general message.","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d71ddc3f38f4d969bd6c29b4c9a3952a3c7f6fc","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                LOG.info(_LI(\"Failed to ssh connection. \""},{"line_number":97,"context_line":"                                  \"Check authorized_keys\"))"},{"line_number":98,"context_line":"            else:"},{"line_number":99,"context_line":"                LOG.info(_LI(\"Failed to ssh connection.\"))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def create_dir(host, path):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_2d6e9a01","line":99,"in_reply_to":"bab921fb_6f16d5f2","updated":"2015-05-01 15:12:04.000000000","message":"I still think this should be a warning instead of info. Same with the other LOG.info in this exception block.","commit_id":"ea1e67f8e1aaa8e29027df4c94495af9060a52bb"}],"nova/virt/libvirt/volume/remotefs.py":[{"author":{"_account_id":16839,"name":"Cale Rath","email":"ctrath@us.ibm.com","username":"ctrath"},"change_message_id":"d628323a12ec7c31a3f9f1f954212d010e89f1f6","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    try:"},{"line_number":89,"context_line":"        utils.execute(\u0027ssh\u0027, *ssh_options)"},{"line_number":90,"context_line":"    except processutils.ProcessExecutionError as err:"},{"line_number":91,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":92,"context_line":"            if \u0027Host key verification failed\u0027 in err.stderr:"},{"line_number":93,"context_line":"                LOG.warn(_LW(\"Failed to ssh connection. \""},{"line_number":94,"context_line":"                             \"Check known_hosts\"))"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa1b9901_5b07e917","line":91,"updated":"2015-08-19 20:16:26.000000000","message":"Why do you check stdout/stderr rather than exit codes?  It seems to me that it would be safer to check documented SSH exit codes, for instance: https://www.eldos.com/documentation/sbb/documentation/ref_err_ssherrorcodes.html","commit_id":"40483008a8afefaf530507ac328ebf3d62d01730"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"5c831a438adc327200503b742544a9b228f4fbe1","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    def _execute_ssh(self, *args, **kwargs):"},{"line_number":200,"context_line":"        ssh_options \u003d []"},{"line_number":201,"context_line":"        for opt in CONF.libvirt.ssh_connection_options:"},{"line_number":202,"context_line":"            ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":203,"context_line":"        ssh_options.extend(args)"},{"line_number":204,"context_line":"        try:"},{"line_number":205,"context_line":"            utils.execute(\u0027ssh\u0027, *ssh_options, **kwargs)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_55a9347a","line":202,"updated":"2015-09-15 12:23:54.000000000","message":"Why it\u0027s needed to split ssh_connection_options elements by \u0027 \u0027?","commit_id":"30dbe3ac6193787ab7eb69c21d9a2f1d6488d588"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9e2efb3e9be79d02037fc10b375a131753de419c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        ssh_options \u003d []"},{"line_number":201,"context_line":"        for opt in CONF.libvirt.ssh_connection_options:"},{"line_number":202,"context_line":"            ssh_options.extend(opt.split(\u0027 \u0027))"},{"line_number":203,"context_line":"        ssh_options.extend(args)"},{"line_number":204,"context_line":"        try:"},{"line_number":205,"context_line":"            utils.execute(\u0027ssh\u0027, *ssh_options, **kwargs)"},{"line_number":206,"context_line":"        except processutils.ProcessExecutionError as err:"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_5d2ac47f","line":203,"updated":"2015-09-15 09:38:21.000000000","message":"I don\u0027t know about having the ssh_connection_options as a list, wouldn\u0027t be my first pick. IMO, if ssh_connection_options would have been a string, it would have been much easier:\n\n    ssh_options \u003d CONF.libvirt.ssh_connection_options.split(\u0027 \u0027)\n\nrather than having this block here.\n\nalthough, caching or initializing the ssh_options would be nice, as they won\u0027t change while the service is running.\n\nalso, would be great if there could be some validation for the ssh_connection_options early on. It wouldn\u0027t be great to end up with failing migrations just because the user made a mistake in setting this config option. although, I don\u0027t know how this validation would be done.","commit_id":"30dbe3ac6193787ab7eb69c21d9a2f1d6488d588"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9e2efb3e9be79d02037fc10b375a131753de419c","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        except processutils.ProcessExecutionError as err:"},{"line_number":207,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":208,"context_line":"                if \u0027Host key verification failed\u0027 in err.stderr:"},{"line_number":209,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection. \""},{"line_number":210,"context_line":"                                 \"Check known_hosts\"))"},{"line_number":211,"context_line":"                elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":212,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection. \""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_8af254d1","line":209,"updated":"2015-09-15 09:38:21.000000000","message":"currently in string freeze, so either wait for this to be merged in M, or set the log leve to debug, with a TODO, to set the log level back to warning in M.","commit_id":"30dbe3ac6193787ab7eb69c21d9a2f1d6488d588"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9e2efb3e9be79d02037fc10b375a131753de419c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection. \""},{"line_number":210,"context_line":"                                 \"Check known_hosts\"))"},{"line_number":211,"context_line":"                elif \u0027Permission denied (publickey,password)\u0027 in err.stderr:"},{"line_number":212,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection. \""},{"line_number":213,"context_line":"                             \"Check authorized_keys\"))"},{"line_number":214,"context_line":"                else:"},{"line_number":215,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection.\"))"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_4abbdce5","line":212,"updated":"2015-09-15 09:38:21.000000000","message":"currently in string freeze, so either wait for this to be merged in M, or set the log leve to debug, with a TODO, to set the log level back to warning in M.","commit_id":"30dbe3ac6193787ab7eb69c21d9a2f1d6488d588"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"9e2efb3e9be79d02037fc10b375a131753de419c","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection. \""},{"line_number":213,"context_line":"                             \"Check authorized_keys\"))"},{"line_number":214,"context_line":"                else:"},{"line_number":215,"context_line":"                    LOG.warn(_LW(\"Failed to ssh connection.\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def create_file(self, host, dst_path, on_execute, on_completion):"},{"line_number":218,"context_line":"        self._execute_ssh(host, \u0027touch\u0027, dst_path,"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_cae84ce5","line":215,"updated":"2015-09-15 09:38:21.000000000","message":"currently in string freeze, so either wait for this to be merged in M, or set the log leve to debug, with a TODO, to set the log level back to warning in M.","commit_id":"30dbe3ac6193787ab7eb69c21d9a2f1d6488d588"}]}
