)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"278218941de7d76dc98ccff60133e5754bf82ff9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Moshe Levi \u003cmoshele@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-31 12:24:05 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add option to ssh to prevent prompting"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_0d386b9f","line":7,"updated":"2015-03-31 11:49:59.000000000","message":"please prefix this with libvirt","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"910ccb4160dd807a6e58cb9d71c25d17fd7fd74a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Moshe Levi \u003cmoshele@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-03-31 12:24:05 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add option to ssh to prevent prompting"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_b012f807","line":7,"in_reply_to":"da9b358b_0d386b9f","updated":"2015-03-31 12:17:58.000000000","message":"Done","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"278218941de7d76dc98ccff60133e5754bf82ff9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add option to ssh to prevent prompting"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configure correctly."},{"line_number":12,"context_line":"This patch disable the prompting by adding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_ed3ae797","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":33},"updated":"2015-03-31 11:49:59.000000000","message":"lbivirt \u003d\u003e libvirt","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"910ccb4160dd807a6e58cb9d71c25d17fd7fd74a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add option to ssh to prevent prompting"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configure correctly."},{"line_number":12,"context_line":"This patch disable the prompting by adding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_70f590c9","line":9,"in_reply_to":"da9b358b_ed3ae797","updated":"2015-03-31 12:17:58.000000000","message":"Done","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"278218941de7d76dc98ccff60133e5754bf82ff9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configure correctly."},{"line_number":12,"context_line":"This patch disable the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_cd41630d","line":11,"updated":"2015-03-31 11:49:59.000000000","message":"configure \u003d\u003e configured","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"910ccb4160dd807a6e58cb9d71c25d17fd7fd74a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configure correctly."},{"line_number":12,"context_line":"This patch disable the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_d0269c67","line":11,"in_reply_to":"da9b358b_cd41630d","updated":"2015-03-31 12:17:58.000000000","message":"Done","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"278218941de7d76dc98ccff60133e5754bf82ff9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configure correctly."},{"line_number":12,"context_line":"This patch disable the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1437790"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_8d4c7b43","line":12,"updated":"2015-03-31 11:49:59.000000000","message":"disable \u003d\u003e disables","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"910ccb4160dd807a6e58cb9d71c25d17fd7fd74a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When doing migration with lbivirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configure correctly."},{"line_number":12,"context_line":"This patch disable the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1437790"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_701c7013","line":12,"in_reply_to":"da9b358b_8d4c7b43","updated":"2015-03-31 12:17:58.000000000","message":"Done","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"278218941de7d76dc98ccff60133e5754bf82ff9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This patch disable the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1437790"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ib1e38f397afaac96a2e1a8717c87a4b6756419db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_4d5673d3","line":15,"updated":"2015-03-31 11:49:59.000000000","message":"1437790 \u003d\u003e #1437790","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"910ccb4160dd807a6e58cb9d71c25d17fd7fd74a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This patch disable the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1437790"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ib1e38f397afaac96a2e1a8717c87a4b6756419db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da9b358b_b0855808","line":15,"in_reply_to":"da9b358b_4d5673d3","updated":"2015-03-31 12:17:58.000000000","message":"Done","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"e9476740b159229fc201b565c343499244058d6a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When doing migration with libvirt driver there are"},{"line_number":10,"context_line":"ssh commands that can cause prompting if ssh"},{"line_number":11,"context_line":"is not configured correctly."},{"line_number":12,"context_line":"This patch disables the prompting by adding"},{"line_number":13,"context_line":"BatchMode\u003dyes option to the ssh command."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9aa53dc9_f6fa7442","line":11,"updated":"2015-04-09 14:26:15.000000000","message":"nit: add blank line between paragraphs (but no reason to spin another patch just for this request)","commit_id":"5cd60ae6e3d8323fab1e0341c649bcf22e8787ea"}],"nova/tests/unit/test_utils.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3c695fd2e7e894f87d4341c4201088a72dfc28c2","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.assertEqual(\u0027sudo\u0027, cmd)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_ssh_execute(self):"},{"line_number":222,"context_line":"        self.mox.StubOutWithMock(utils, \u0027execute\u0027)"},{"line_number":223,"context_line":"        utils.execute(\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":224,"context_line":"                      \u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":225,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_ec6c579e","line":222,"updated":"2015-03-30 12:47:31.000000000","message":"Hum... Did not see that in my first review but you should use mock for new tests. Some contributors are working to convert mox to mock.","commit_id":"eb6d61c291770433e81be6d9e8f586f51124dd34"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"a96446adad24eb55210a31a6fde3c7caa9fb2696","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.assertEqual(\u0027sudo\u0027, cmd)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_ssh_execute(self):"},{"line_number":222,"context_line":"        self.mox.StubOutWithMock(utils, \u0027execute\u0027)"},{"line_number":223,"context_line":"        utils.execute(\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":224,"context_line":"                      \u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":225,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_8d8372cc","line":222,"in_reply_to":"da9b358b_3525dfaa","updated":"2015-03-30 21:17:53.000000000","message":"Done","commit_id":"eb6d61c291770433e81be6d9e8f586f51124dd34"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"c4ed3f4140040634695ef6372769282b42fe0d71","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.assertEqual(\u0027sudo\u0027, cmd)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_ssh_execute(self):"},{"line_number":222,"context_line":"        self.mox.StubOutWithMock(utils, \u0027execute\u0027)"},{"line_number":223,"context_line":"        utils.execute(\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":224,"context_line":"                      \u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":225,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_3525dfaa","line":222,"in_reply_to":"da9b358b_ec6c579e","updated":"2015-03-30 15:45:36.000000000","message":"http://docs.openstack.org/infra/manual/developers.html#peer-review,   #4","commit_id":"eb6d61c291770433e81be6d9e8f586f51124dd34"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0b83af13c549e9c5338553a37b1f0d12e283eaf1","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         \u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":224,"context_line":"        with mock.patch(\u0027nova.utils.execute\u0027) as mock_method:"},{"line_number":225,"context_line":"            utils.ssh_execute(\u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":226,"context_line":"        mock_method.assert_called_with(*expected_args)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class VPNPingTestCase(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_4869d8bd","line":226,"updated":"2015-03-30 21:29:50.000000000","message":"assert_called_once_with maybe better?","commit_id":"6b6c469a6cefa7db38111ce013536174e03480ee"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2a038ab450b56c160968799012662356ccf68851","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         \u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":224,"context_line":"        with mock.patch(\u0027nova.utils.execute\u0027) as mock_method:"},{"line_number":225,"context_line":"            utils.ssh_execute(\u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":226,"context_line":"        mock_method.assert_called_with(*expected_args)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class VPNPingTestCase(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_4ebd5767","line":226,"in_reply_to":"da9b358b_4869d8bd","updated":"2015-03-31 06:41:14.000000000","message":"yes","commit_id":"6b6c469a6cefa7db38111ce013536174e03480ee"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"93eb01e0716c407fe12d86eefd31491ad53d50e4","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         \u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":224,"context_line":"        with mock.patch(\u0027nova.utils.execute\u0027) as mock_method:"},{"line_number":225,"context_line":"            utils.ssh_execute(\u0027remotehost\u0027, \u0027ls\u0027, \u0027-l\u0027)"},{"line_number":226,"context_line":"        mock_method.assert_called_with(*expected_args)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"class VPNPingTestCase(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_98ae0484","line":226,"in_reply_to":"da9b358b_4ebd5767","updated":"2015-03-31 09:21:52.000000000","message":"Done","commit_id":"6b6c469a6cefa7db38111ce013536174e03480ee"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3c695fd2e7e894f87d4341c4201088a72dfc28c2","unresolved":false,"context_lines":[{"line_number":9703,"context_line":"        drvr._set_cache_mode(fake_conf)"},{"line_number":9704,"context_line":"        self.assertEqual(fake_conf.driver_cache, \u0027fake\u0027)"},{"line_number":9705,"context_line":""},{"line_number":9706,"context_line":"    def _test_shared_storage_detection(self, is_same):"},{"line_number":9707,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":9708,"context_line":"        self.mox.StubOutWithMock(drvr, \u0027get_host_ip_addr\u0027)"},{"line_number":9709,"context_line":"        self.mox.StubOutWithMock(utils, \u0027execute\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_4ce22305","side":"PARENT","line":9706,"updated":"2015-03-30 12:47:31.000000000","message":"Here it is ok to continue using mox since you just update the test. ...it is better for sure if you convert the test too (but not mandatory really).","commit_id":"fc5e6315afb7fc90c6f80bd1dfed0babfa979f2f"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"a96446adad24eb55210a31a6fde3c7caa9fb2696","unresolved":false,"context_lines":[{"line_number":9703,"context_line":"        drvr._set_cache_mode(fake_conf)"},{"line_number":9704,"context_line":"        self.assertEqual(fake_conf.driver_cache, \u0027fake\u0027)"},{"line_number":9705,"context_line":""},{"line_number":9706,"context_line":"    def _test_shared_storage_detection(self, is_same):"},{"line_number":9707,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":9708,"context_line":"        self.mox.StubOutWithMock(drvr, \u0027get_host_ip_addr\u0027)"},{"line_number":9709,"context_line":"        self.mox.StubOutWithMock(utils, \u0027execute\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_ad651646","side":"PARENT","line":9706,"in_reply_to":"da9b358b_4ce22305","updated":"2015-03-30 21:17:53.000000000","message":"Done","commit_id":"fc5e6315afb7fc90c6f80bd1dfed0babfa979f2f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2a038ab450b56c160968799012662356ccf68851","unresolved":false,"context_lines":[{"line_number":9712,"context_line":"        mock_exists.return_value \u003d is_same"},{"line_number":9713,"context_line":"        with mock.patch(\u0027nova.utils.ssh_execute\u0027) as mock_ssh_method:"},{"line_number":9714,"context_line":"            result \u003d drvr._is_storage_shared_with(\u0027foo\u0027, \u0027/path\u0027)"},{"line_number":9715,"context_line":"        self.assertEqual([\u0027foo\u0027, \u0027touch\u0027],"},{"line_number":9716,"context_line":"                         list(mock_ssh_method.call_args_list[0][0])[:-1])"},{"line_number":9717,"context_line":"        if is_same:"},{"line_number":9718,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_422acb7f","line":9715,"updated":"2015-03-31 06:41:14.000000000","message":"So you try to verify arguments passed to the method mock_ssh_method here, right?\n\n  mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027touch\u0027, mock.ANY)\n  if is_same:\n    mock_unlink.assert_called_once_with(mock.ANY)\n  else:\n    mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)\n  ...","commit_id":"6b6c469a6cefa7db38111ce013536174e03480ee"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"93eb01e0716c407fe12d86eefd31491ad53d50e4","unresolved":false,"context_lines":[{"line_number":9712,"context_line":"        mock_exists.return_value \u003d is_same"},{"line_number":9713,"context_line":"        with mock.patch(\u0027nova.utils.ssh_execute\u0027) as mock_ssh_method:"},{"line_number":9714,"context_line":"            result \u003d drvr._is_storage_shared_with(\u0027foo\u0027, \u0027/path\u0027)"},{"line_number":9715,"context_line":"        self.assertEqual([\u0027foo\u0027, \u0027touch\u0027],"},{"line_number":9716,"context_line":"                         list(mock_ssh_method.call_args_list[0][0])[:-1])"},{"line_number":9717,"context_line":"        if is_same:"},{"line_number":9718,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 1)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_b89f884f","line":9715,"in_reply_to":"da9b358b_422acb7f","updated":"2015-03-31 09:21:52.000000000","message":"mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027touch\u0027, mock.ANY) is not good because it compare it with the latest call so I change it to \nmock_ssh_method.assert_any_call","commit_id":"6b6c469a6cefa7db38111ce013536174e03480ee"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5d2ad235dd8f3a30d0c2dfce88fa1278d4dc9154","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da9b358b_ead64d26","line":9719,"updated":"2015-03-31 11:25:50.000000000","message":"So, you already assert the 1st call in L9715, how about asserting the other call here, instead of just asserting that mock_ssh_method was called twice?","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1f433aebd9165fb3254e5e551301447b7dd6bf90","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_478642ba","line":9719,"in_reply_to":"da9b358b_6a211db4","updated":"2015-04-08 13:25:28.000000000","message":"Ah, got it.","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"152392b35e89faf9598fb2bec21ee8e6cc8fe5ec","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da9b358b_6dcdb75c","line":9719,"in_reply_to":"da9b358b_6a211db4","updated":"2015-03-31 11:56:19.000000000","message":"Done","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f191128fba9e38b98272eb404e2b8f6f6443d6b4","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da9b358b_6a211db4","line":9719,"in_reply_to":"da9b358b_ead64d26","updated":"2015-03-31 11:39:56.000000000","message":"I assert it in line 9720, I added the count just to make sure it only 2 calls and not more","commit_id":"27085e39d0789f8bf2d502aeb3a155005248c9fd"},{"author":{"_account_id":8300,"name":"Abhijeet Malawade","email":"abhijeet.malawade@gmail.com","username":"abhijeet"},"change_message_id":"b50bdbd70fbb9d76bd1099010bc3c03bb656a15d","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa53dc9_9f807348","line":9719,"updated":"2015-04-06 11:50:47.000000000","message":"assertEqual(expected_value, actual_value)?","commit_id":"5cd60ae6e3d8323fab1e0341c649bcf22e8787ea"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4aec23fd9fcd09a329988b37b860be04b1c24649","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dac4157f_83e9191d","line":9719,"in_reply_to":"9aa53dc9_9f807348","updated":"2015-04-20 19:39:54.000000000","message":"yeah we should switch these around since the error message is confusing if not done correctly","commit_id":"5cd60ae6e3d8323fab1e0341c649bcf22e8787ea"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"5dea06d765aac41ec079c0eaf1eab052a40e3bc3","unresolved":false,"context_lines":[{"line_number":9716,"context_line":"        if is_same:"},{"line_number":9717,"context_line":"            mock_unlink.assert_called_once_with(mock.ANY)"},{"line_number":9718,"context_line":"        else:"},{"line_number":9719,"context_line":"            self.assertEqual(mock_ssh_method.call_count, 2)"},{"line_number":9720,"context_line":"            mock_ssh_method.assert_called_with(\u0027foo\u0027, \u0027rm\u0027, mock.ANY)"},{"line_number":9721,"context_line":"        return result"},{"line_number":9722,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dac4157f_c3815191","line":9719,"in_reply_to":"dac4157f_83e9191d","updated":"2015-04-20 19:54:13.000000000","message":"Done","commit_id":"5cd60ae6e3d8323fab1e0341c649bcf22e8787ea"}],"nova/utils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"b4c465ef4e604dc9b3a2a36874f4f2d0cc9403b9","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    return processutils.execute(*cmd, **kwargs)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"def ssh_execute(dest, *cmd, **kwargs):"},{"line_number":210,"context_line":"    \"\"\"Convenience wrapper to execute ssh command.\"\"\""},{"line_number":211,"context_line":"    ssh_cmd \u003d [\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":212,"context_line":"               \u0027-o\u0027, \u0027StrictHostKeyChecking\u003dyes\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_12d1eccd","line":209,"updated":"2015-03-29 11:14:31.000000000","message":"can you also include a unit test for this?","commit_id":"5bf8526bf4957ff7b1e4319b45aa96756879d1b2"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6b7bab4fab583a7ee829e5a972876847357c1bb0","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    return processutils.execute(*cmd, **kwargs)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"def ssh_execute(dest, *cmd, **kwargs):"},{"line_number":210,"context_line":"    \"\"\"Convenience wrapper to execute ssh command.\"\"\""},{"line_number":211,"context_line":"    ssh_cmd \u003d [\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":212,"context_line":"               \u0027-o\u0027, \u0027StrictHostKeyChecking\u003dyes\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_6cbcd06c","line":209,"in_reply_to":"da9b358b_12d1eccd","updated":"2015-03-30 08:17:23.000000000","message":"Done","commit_id":"5bf8526bf4957ff7b1e4319b45aa96756879d1b2"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"50a6e6c6546ffb03dfcf1997db9382fb6cdbd2d5","unresolved":false,"context_lines":[{"line_number":209,"context_line":"def ssh_execute(dest, *cmd, **kwargs):"},{"line_number":210,"context_line":"    \"\"\"Convenience wrapper to execute ssh command.\"\"\""},{"line_number":211,"context_line":"    ssh_cmd \u003d [\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":212,"context_line":"               \u0027-o\u0027, \u0027StrictHostKeyChecking\u003dyes\u0027]"},{"line_number":213,"context_line":"    ssh_cmd.append(dest)"},{"line_number":214,"context_line":"    ssh_cmd.extend(cmd)"},{"line_number":215,"context_line":"    return execute(*ssh_cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_02250daa","line":212,"updated":"2015-03-30 08:52:23.000000000","message":"StrictHostKeyChecking\u003dyes - Some operators may not want this option; i\u0027m thinking about ironic user. Perhaps we can add a config option here to make operators the ability to set default ssh options?","commit_id":"d4f8f8ea3d8b753b7640c6c6d06c6e272580f1f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"65a5171851c7f57dd424b7e57fcb106586ef7918","unresolved":false,"context_lines":[{"line_number":209,"context_line":"def ssh_execute(dest, *cmd, **kwargs):"},{"line_number":210,"context_line":"    \"\"\"Convenience wrapper to execute ssh command.\"\"\""},{"line_number":211,"context_line":"    ssh_cmd \u003d [\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":212,"context_line":"               \u0027-o\u0027, \u0027StrictHostKeyChecking\u003dyes\u0027]"},{"line_number":213,"context_line":"    ssh_cmd.append(dest)"},{"line_number":214,"context_line":"    ssh_cmd.extend(cmd)"},{"line_number":215,"context_line":"    return execute(*ssh_cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_a00538c3","line":212,"in_reply_to":"da9b358b_02250daa","updated":"2015-03-30 10:35:01.000000000","message":"I just tested it and it seems the BatchMode\u003dyes is enough, so that ssh command won\u0027t prompt. \nI think I will remove the StrictHostKeyChecking option and the user can configure the it and other ssh options in  \u003cuser\u003e/.ssh/config file\nwhat do think?","commit_id":"d4f8f8ea3d8b753b7640c6c6d06c6e272580f1f1"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7de916093e29f0af186cf51d698e27e448d6c949","unresolved":false,"context_lines":[{"line_number":209,"context_line":"def ssh_execute(dest, *cmd, **kwargs):"},{"line_number":210,"context_line":"    \"\"\"Convenience wrapper to execute ssh command.\"\"\""},{"line_number":211,"context_line":"    ssh_cmd \u003d [\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027,"},{"line_number":212,"context_line":"               \u0027-o\u0027, \u0027StrictHostKeyChecking\u003dyes\u0027]"},{"line_number":213,"context_line":"    ssh_cmd.append(dest)"},{"line_number":214,"context_line":"    ssh_cmd.extend(cmd)"},{"line_number":215,"context_line":"    return execute(*ssh_cmd, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_036bce1f","line":212,"in_reply_to":"da9b358b_a00538c3","updated":"2015-03-30 11:26:12.000000000","message":"Yes i think if BatchMode\u003dyes is enough, this is something we should do and no more for now. Thanks","commit_id":"d4f8f8ea3d8b753b7640c6c6d06c6e272580f1f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cea37a296b9fc83a3b79289cc697dc17b7ff6f77","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    return processutils.execute(*cmd, **kwargs)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"def ssh_execute(dest, *cmd, **kwargs):"},{"line_number":210,"context_line":"    \"\"\"Convenience wrapper to execute ssh command.\"\"\""},{"line_number":211,"context_line":"    ssh_cmd \u003d [\u0027ssh\u0027, \u0027-o\u0027, \u0027BatchMode\u003dyes\u0027]"},{"line_number":212,"context_line":"    ssh_cmd.append(dest)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dac4157f_c8204efa","line":209,"updated":"2015-04-20 19:22:46.000000000","message":"Why aren\u0027t we just using paramiko?\n\nI guess this is an OK stop-gap, but it really seems we should push this generic utility code down into oslo.concurrency and use paramiko there, like what Tempest is doing with moving it\u0027s ssh wrapper code into tempest-lib https://review.openstack.org/#/c/166518/ - even that seems like it should live in oslo at some point so other projects can re-use it.","commit_id":"5cd60ae6e3d8323fab1e0341c649bcf22e8787ea"}]}
