)]}'
{"cinder/tests/unit/volume/drivers/test_gpfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1870,"context_line":"        expected \u003d [mock.call((\u0027test\u0027,), True)]"},{"line_number":1871,"context_line":"        self.assertEqual(expected, mock_run_ssh.mock_calls)"},{"line_number":1872,"context_line":""},{"line_number":1873,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1874,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1875,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1876,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_e3d7184f","line":1873,"updated":"2017-04-25 17:20:07.000000000","message":"Add new\u003dmock.MagicMock() here and you can remove the mock_sshclient parameter, and lines 1883 and 1884.","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1870,"context_line":"        expected \u003d [mock.call((\u0027test\u0027,), True)]"},{"line_number":1871,"context_line":"        self.assertEqual(expected, mock_run_ssh.mock_calls)"},{"line_number":1872,"context_line":""},{"line_number":1873,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1874,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1875,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1876,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_69d6472a","line":1873,"in_reply_to":"5ff73747_e3d7184f","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1891,"context_line":"        self.driver \u003d gpfs.GPFSRemoteDriver(configuration\u003dconfiguration)"},{"line_number":1892,"context_line":"        self.assertEqual(\u002710.0.0.1\u0027, self.driver.configuration.san_ip)"},{"line_number":1893,"context_line":""},{"line_number":1894,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1895,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1896,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1897,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_23cf40b1","line":1894,"updated":"2017-04-25 17:20:07.000000000","message":"Same as above","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1891,"context_line":"        self.driver \u003d gpfs.GPFSRemoteDriver(configuration\u003dconfiguration)"},{"line_number":1892,"context_line":"        self.assertEqual(\u002710.0.0.1\u0027, self.driver.configuration.san_ip)"},{"line_number":1893,"context_line":""},{"line_number":1894,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1895,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1896,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1897,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_49ddcb40","line":1894,"in_reply_to":"5ff73747_23cf40b1","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1912,"context_line":"        self.driver \u003d gpfs.GPFSRemoteDriver(configuration\u003dconfiguration)"},{"line_number":1913,"context_line":"        self.assertEqual(\u002710.0.0.1\u0027, self.driver.configuration.san_ip)"},{"line_number":1914,"context_line":""},{"line_number":1915,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1916,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1917,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1918,"context_line":"    def test_get_active_gpfs_node_ip_missing_key_and_password(self, mock_open,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_633ae898","line":1915,"updated":"2017-04-25 17:20:07.000000000","message":"Same as above","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1912,"context_line":"        self.driver \u003d gpfs.GPFSRemoteDriver(configuration\u003dconfiguration)"},{"line_number":1913,"context_line":"        self.assertEqual(\u002710.0.0.1\u0027, self.driver.configuration.san_ip)"},{"line_number":1914,"context_line":""},{"line_number":1915,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1916,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1917,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1918,"context_line":"    def test_get_active_gpfs_node_ip_missing_key_and_password(self, mock_open,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_e9e137fe","line":1915,"in_reply_to":"5ff73747_633ae898","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1927,"context_line":"                          gpfs.GPFSRemoteDriver,"},{"line_number":1928,"context_line":"                          configuration\u003dconfiguration)"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1931,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1932,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1933,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_43412c0b","line":1930,"updated":"2017-04-25 17:20:07.000000000","message":"Same as above","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1927,"context_line":"                          gpfs.GPFSRemoteDriver,"},{"line_number":1928,"context_line":"                          configuration\u003dconfiguration)"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1931,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1932,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1933,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_c9f0bbcc","line":1930,"in_reply_to":"5ff73747_43412c0b","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"        self.driver \u003d gpfs.GPFSRemoteDriver(configuration\u003dconfiguration)"},{"line_number":1952,"context_line":"        self.assertEqual(\u002710.0.0.2\u0027, self.driver.configuration.san_ip)"},{"line_number":1953,"context_line":""},{"line_number":1954,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1955,"context_line":"    def test_missing_ssh_host_key_config(self, mock_sshclient):"},{"line_number":1956,"context_line":"        mock_ssh \u003d mock.MagicMock()"},{"line_number":1957,"context_line":"        mock_sshclient.return_value \u003d mock_ssh"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_2344e01a","line":1954,"updated":"2017-04-25 17:20:07.000000000","message":"Same as above","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"        self.driver \u003d gpfs.GPFSRemoteDriver(configuration\u003dconfiguration)"},{"line_number":1952,"context_line":"        self.assertEqual(\u002710.0.0.2\u0027, self.driver.configuration.san_ip)"},{"line_number":1953,"context_line":""},{"line_number":1954,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1955,"context_line":"    def test_missing_ssh_host_key_config(self, mock_sshclient):"},{"line_number":1956,"context_line":"        mock_ssh \u003d mock.MagicMock()"},{"line_number":1957,"context_line":"        mock_sshclient.return_value \u003d mock_ssh"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_a9eb2fda","line":1954,"in_reply_to":"5ff73747_2344e01a","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1962,"context_line":"                          gpfs.GPFSRemoteDriver,"},{"line_number":1963,"context_line":"                          configuration\u003dconfiguration)"},{"line_number":1964,"context_line":""},{"line_number":1965,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1966,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dFalse)"},{"line_number":1967,"context_line":"    def test_init_missing_ssh_host_key_file(self,"},{"line_number":1968,"context_line":"                                            mock_is_file,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_e345d816","line":1965,"updated":"2017-04-25 17:20:07.000000000","message":"Same as above","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1962,"context_line":"                          gpfs.GPFSRemoteDriver,"},{"line_number":1963,"context_line":"                          configuration\u003dconfiguration)"},{"line_number":1964,"context_line":""},{"line_number":1965,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1966,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dFalse)"},{"line_number":1967,"context_line":"    def test_init_missing_ssh_host_key_file(self,"},{"line_number":1968,"context_line":"                                            mock_is_file,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_89bcf3dc","line":1965,"in_reply_to":"5ff73747_e345d816","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"7e831ee9a484cd46d4e8cf602f9ba74212deb216","unresolved":false,"context_lines":[{"line_number":1977,"context_line":"                          gpfs.GPFSRemoteDriver,"},{"line_number":1978,"context_line":"                          configuration\u003dconfiguration)"},{"line_number":1979,"context_line":""},{"line_number":1980,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1981,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1982,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1983,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_836054a7","line":1980,"updated":"2017-04-25 17:20:07.000000000","message":"Same as above","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1977,"context_line":"                          gpfs.GPFSRemoteDriver,"},{"line_number":1978,"context_line":"                          configuration\u003dconfiguration)"},{"line_number":1979,"context_line":""},{"line_number":1980,"context_line":"    @mock.patch(\u0027paramiko.SSHClient\u0027)"},{"line_number":1981,"context_line":"    @mock.patch(\u0027os.path.isfile\u0027, return_value\u003dTrue)"},{"line_number":1982,"context_line":"    @mock.patch(\u0027six.moves.builtins.open\u0027)"},{"line_number":1983,"context_line":"    @mock.patch(\u0027os.path.expanduser\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_69bf67d0","line":1980,"in_reply_to":"5ff73747_836054a7","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"}],"cinder/volume/drivers/ibm/gpfs.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c4393a98f8ceb6ee0d0568b003b5295b4abdbbc4","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, None)"},{"line_number":1277,"context_line":"        return self._run_ssh(cmd, check_exit_code)"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"    def _set_active_gpfs_node_ip(self):"},{"line_number":1280,"context_line":"        \"\"\"Set the san_ip to active gpfs node IP\"\"\""},{"line_number":1281,"context_line":"        active_gpfs_node_ip \u003d None"},{"line_number":1282,"context_line":"        gpfs_node_ips \u003d self.configuration.gpfs_hosts.split(\u0027,\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_ffbda168","line":1279,"updated":"2016-12-15 16:08:04.000000000","message":"why can\u0027t you use self._run_ssh to do this and process the results?","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"e09d5577990542ecf9113226b3f61aac95b63516","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, None)"},{"line_number":1277,"context_line":"        return self._run_ssh(cmd, check_exit_code)"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":"    def _set_active_gpfs_node_ip(self):"},{"line_number":1280,"context_line":"        \"\"\"Set the san_ip to active gpfs node IP\"\"\""},{"line_number":1281,"context_line":"        active_gpfs_node_ip \u003d None"},{"line_number":1282,"context_line":"        gpfs_node_ips \u003d self.configuration.gpfs_hosts.split(\u0027,\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_ed05e445","line":1279,"in_reply_to":"1a6eadb0_ffbda168","updated":"2016-12-16 05:18:24.000000000","message":"Here, we need to test with multiple IPs if the first one is not reachable or GPFS is not active on it. Multiple sshpools don\u0027t work somehow. It hangs and driver doesn\u0027t get initialized (not sure why). Hence, implemented the single client approach.","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"835bde376265cc2d0f55788809f78d2d4a6a1944","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1293,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1294,"context_line":"                # check if GPFS state is active on the node"},{"line_number":1295,"context_line":"                (out, __) \u003d processutils.ssh_execute(ssh, \u0027mmgetstate -Y\u0027)"},{"line_number":1296,"context_line":"                lines \u003d out.splitlines()"},{"line_number":1297,"context_line":"                state_token \u003d lines[0].split(\u0027:\u0027).index(\u0027state\u0027)"},{"line_number":1298,"context_line":"                gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_1fc17d54","line":1295,"updated":"2016-12-15 16:02:40.000000000","message":"Why not use (out, err) ?\n\nAnd perhaps log any err?","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"e09d5577990542ecf9113226b3f61aac95b63516","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1293,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1294,"context_line":"                # check if GPFS state is active on the node"},{"line_number":1295,"context_line":"                (out, __) \u003d processutils.ssh_execute(ssh, \u0027mmgetstate -Y\u0027)"},{"line_number":1296,"context_line":"                lines \u003d out.splitlines()"},{"line_number":1297,"context_line":"                state_token \u003d lines[0].split(\u0027:\u0027).index(\u0027state\u0027)"},{"line_number":1298,"context_line":"                gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_2dfc3c3d","line":1295,"in_reply_to":"1a6eadb0_1fc17d54","updated":"2016-12-16 05:18:24.000000000","message":"Done","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"835bde376265cc2d0f55788809f78d2d4a6a1944","unresolved":false,"context_lines":[{"line_number":1299,"context_line":"                if gpfs_state !\u003d \u0027active\u0027:"},{"line_number":1300,"context_line":"                    continue"},{"line_number":1301,"context_line":"                # check if filesystem is mounted on the node"},{"line_number":1302,"context_line":"                processutils.ssh_execute("},{"line_number":1303,"context_line":"                    ssh,"},{"line_number":1304,"context_line":"                    \u0027df \u0027 + self.configuration.gpfs_mount_point_base)"},{"line_number":1305,"context_line":"                # set the san_ip to the active gpfs node IP"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_df9aa56d","line":1302,"updated":"2016-12-15 16:02:40.000000000","message":"Why not capture return value and check for success? and log any err?","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"e09d5577990542ecf9113226b3f61aac95b63516","unresolved":false,"context_lines":[{"line_number":1299,"context_line":"                if gpfs_state !\u003d \u0027active\u0027:"},{"line_number":1300,"context_line":"                    continue"},{"line_number":1301,"context_line":"                # check if filesystem is mounted on the node"},{"line_number":1302,"context_line":"                processutils.ssh_execute("},{"line_number":1303,"context_line":"                    ssh,"},{"line_number":1304,"context_line":"                    \u0027df \u0027 + self.configuration.gpfs_mount_point_base)"},{"line_number":1305,"context_line":"                # set the san_ip to the active gpfs node IP"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_4df7b858","line":1302,"in_reply_to":"1a6eadb0_df9aa56d","updated":"2016-12-16 05:18:24.000000000","message":"Done","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"835bde376265cc2d0f55788809f78d2d4a6a1944","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"                    ssh,"},{"line_number":1304,"context_line":"                    \u0027df \u0027 + self.configuration.gpfs_mount_point_base)"},{"line_number":1305,"context_line":"                # set the san_ip to the active gpfs node IP"},{"line_number":1306,"context_line":"                active_gpfs_node_ip \u003d ip"},{"line_number":1307,"context_line":"                break"},{"line_number":1308,"context_line":"            except Exception:"},{"line_number":1309,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_7fa511a0","line":1306,"updated":"2016-12-15 16:02:40.000000000","message":"It would probably help with debugging issues to log which IP you are using for the active gpfs node.","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"e09d5577990542ecf9113226b3f61aac95b63516","unresolved":false,"context_lines":[{"line_number":1303,"context_line":"                    ssh,"},{"line_number":1304,"context_line":"                    \u0027df \u0027 + self.configuration.gpfs_mount_point_base)"},{"line_number":1305,"context_line":"                # set the san_ip to the active gpfs node IP"},{"line_number":1306,"context_line":"                active_gpfs_node_ip \u003d ip"},{"line_number":1307,"context_line":"                break"},{"line_number":1308,"context_line":"            except Exception:"},{"line_number":1309,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_6d98f41c","line":1306,"in_reply_to":"1a6eadb0_7fa511a0","updated":"2016-12-16 05:18:24.000000000","message":"Done","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"835bde376265cc2d0f55788809f78d2d4a6a1944","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"                active_gpfs_node_ip \u003d ip"},{"line_number":1307,"context_line":"                break"},{"line_number":1308,"context_line":"            except Exception:"},{"line_number":1309,"context_line":"                pass"},{"line_number":1310,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1311,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"},{"line_number":1312,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_5fb3f5e8","line":1309,"updated":"2016-12-15 16:02:40.000000000","message":"It would probably be good to log any exception.","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"e09d5577990542ecf9113226b3f61aac95b63516","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"                active_gpfs_node_ip \u003d ip"},{"line_number":1307,"context_line":"                break"},{"line_number":1308,"context_line":"            except Exception:"},{"line_number":1309,"context_line":"                pass"},{"line_number":1310,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1311,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"},{"line_number":1312,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_8d9b9017","line":1309,"in_reply_to":"1a6eadb0_5fb3f5e8","updated":"2016-12-16 05:18:24.000000000","message":"Done","commit_id":"1d470c853ef27f89cc6e95a90b263628077e7a5c"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"CONF \u003d cfg.CONF"},{"line_number":104,"context_line":"CONF.register_opts(gpfs_opts)"},{"line_number":105,"context_line":"CONF.register_opts(gpfs_remote_ssh_opts)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def _different(difference_tuple):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_6c98d678","line":105,"updated":"2016-12-16 18:31:14.000000000","message":"ssh_opts would add some things you are not currently supporting","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"CONF \u003d cfg.CONF"},{"line_number":104,"context_line":"CONF.register_opts(gpfs_opts)"},{"line_number":105,"context_line":"CONF.register_opts(gpfs_remote_ssh_opts)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"def _different(difference_tuple):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_65d4bcbc","line":105,"in_reply_to":"1a6eadb0_6c98d678","updated":"2016-12-28 11:25:13.000000000","message":"Have added the support for configurable strict_ssh_host_key_policy and known_hosts_file.","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"        self.configuration.san_private_key \u003d ("},{"line_number":1275,"context_line":"            self.configuration.gpfs_private_key)"},{"line_number":1276,"context_line":"        self.configuration.san_ssh_port \u003d self.configuration.gpfs_ssh_port"},{"line_number":1277,"context_line":"        self._set_active_gpfs_node_ip()"},{"line_number":1278,"context_line":"        self.gpfs_execute \u003d self._gpfs_remote_execute"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    def _gpfs_remote_execute(self, *cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_715c2f4b","line":1277,"range":{"start_line":1277,"start_character":8,"end_line":1277,"end_character":39},"updated":"2016-12-16 18:31:14.000000000","message":"Hmmm. So this little feature here allows a list of IPs and using a ssh try/except (w/ configurable timeout) you pick one that works on start-up. Might be convenient. But if the active node changes you have to restart to pick up the new one. So although this is clever and handy, I\u0027m just wondering if maybe the admin should configure the one that is expected to work in the first place.  I guess the list thing doesn\u0027t hurt, though.\n\nAlso see below about changing this to self.configuration.san_ip \u003d self._set_active_gpfs_node_ip()","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1274,"context_line":"        self.configuration.san_private_key \u003d ("},{"line_number":1275,"context_line":"            self.configuration.gpfs_private_key)"},{"line_number":1276,"context_line":"        self.configuration.san_ssh_port \u003d self.configuration.gpfs_ssh_port"},{"line_number":1277,"context_line":"        self._set_active_gpfs_node_ip()"},{"line_number":1278,"context_line":"        self.gpfs_execute \u003d self._gpfs_remote_execute"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    def _gpfs_remote_execute(self, *cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_0533f014","line":1277,"range":{"start_line":1277,"start_character":8,"end_line":1277,"end_character":39},"in_reply_to":"1a6eadb0_715c2f4b","updated":"2016-12-28 11:25:13.000000000","message":"This change is intended for the automated configuration of GPFS driver using Juju charm where admin would not be involved in setting the active gpfs node IP. Hence, it is set as part of driver initialization and subsequent ssh operations are done with that IP as san_ip.\nYou are right on the other point about restart of cinder volume service to pick up the new active node IP if the current one goes offline. But it should be ok.","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"        active_gpfs_node_ip \u003d None"},{"line_number":1287,"context_line":"        gpfs_node_ips \u003d self.configuration.gpfs_hosts.split(\u0027,\u0027)"},{"line_number":1288,"context_line":"        ssh \u003d paramiko.SSHClient()"},{"line_number":1289,"context_line":"        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())"},{"line_number":1290,"context_line":"        pkfile \u003d os.path.expanduser(self.configuration.gpfs_private_key)"},{"line_number":1291,"context_line":"        privatekey \u003d paramiko.RSAKey.from_private_key_file(pkfile)"},{"line_number":1292,"context_line":"        for ip in gpfs_node_ips:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_cc4f2a32","line":1289,"range":{"start_line":1289,"start_character":40,"end_line":1289,"end_character":64},"updated":"2016-12-16 18:31:14.000000000","message":"should be configurable with strict_ssh_host_key_policy","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"        active_gpfs_node_ip \u003d None"},{"line_number":1287,"context_line":"        gpfs_node_ips \u003d self.configuration.gpfs_hosts.split(\u0027,\u0027)"},{"line_number":1288,"context_line":"        ssh \u003d paramiko.SSHClient()"},{"line_number":1289,"context_line":"        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())"},{"line_number":1290,"context_line":"        pkfile \u003d os.path.expanduser(self.configuration.gpfs_private_key)"},{"line_number":1291,"context_line":"        privatekey \u003d paramiko.RSAKey.from_private_key_file(pkfile)"},{"line_number":1292,"context_line":"        for ip in gpfs_node_ips:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_45e6d8b0","line":1289,"range":{"start_line":1289,"start_character":40,"end_line":1289,"end_character":64},"in_reply_to":"1a6eadb0_cc4f2a32","updated":"2016-12-28 11:25:13.000000000","message":"Done","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1291,"context_line":"        privatekey \u003d paramiko.RSAKey.from_private_key_file(pkfile)"},{"line_number":1292,"context_line":"        for ip in gpfs_node_ips:"},{"line_number":1293,"context_line":"            try:"},{"line_number":1294,"context_line":"                ssh.connect(ip,"},{"line_number":1295,"context_line":"                            port\u003dself.configuration.gpfs_ssh_port,"},{"line_number":1296,"context_line":"                            username\u003dself.configuration.gpfs_user_login,"},{"line_number":1297,"context_line":"                            pkey\u003dprivatekey,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_2cdc1e45","line":1294,"range":{"start_line":1294,"start_character":20,"end_line":1294,"end_character":27},"updated":"2016-12-16 18:31:14.000000000","message":"doesn\u0027t have configurable known_hosts_file.  I guess really just leveraging cinder ssh_utils would be the right way to handle this.","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1291,"context_line":"        privatekey \u003d paramiko.RSAKey.from_private_key_file(pkfile)"},{"line_number":1292,"context_line":"        for ip in gpfs_node_ips:"},{"line_number":1293,"context_line":"            try:"},{"line_number":1294,"context_line":"                ssh.connect(ip,"},{"line_number":1295,"context_line":"                            port\u003dself.configuration.gpfs_ssh_port,"},{"line_number":1296,"context_line":"                            username\u003dself.configuration.gpfs_user_login,"},{"line_number":1297,"context_line":"                            pkey\u003dprivatekey,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_259c740e","line":1294,"range":{"start_line":1294,"start_character":20,"end_line":1294,"end_character":27},"in_reply_to":"1a6eadb0_2cdc1e45","updated":"2016-12-28 11:25:13.000000000","message":"Leveraging cinder ssh_utils doesn\u0027t work for me as it hangs in the driver initialization. Have added support for known_hosts_file.","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                continue"},{"line_number":1328,"context_line":"            # set the san_ip to the active gpfs node IP"},{"line_number":1329,"context_line":"            LOG.debug(\"Setting active GPFS node IP to %s\", ip)"},{"line_number":1330,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1331,"context_line":"            break"},{"line_number":1332,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1333,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_8cf6128d","line":1330,"range":{"start_line":1330,"start_character":0,"end_line":1330,"end_character":36},"updated":"2016-12-16 18:31:14.000000000","message":"self.configuration_san_ip \u003d ip  # assuming that\u0027s what you want to set or keep as-is and \"return active_gpfs_node_ip\" at the bottom (see below)","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                continue"},{"line_number":1328,"context_line":"            # set the san_ip to the active gpfs node IP"},{"line_number":1329,"context_line":"            LOG.debug(\"Setting active GPFS node IP to %s\", ip)"},{"line_number":1330,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1331,"context_line":"            break"},{"line_number":1332,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1333,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_0b0787ca","line":1330,"range":{"start_line":1330,"start_character":0,"end_line":1330,"end_character":36},"in_reply_to":"1a6eadb0_8cf6128d","updated":"2016-12-28 11:25:13.000000000","message":"Done","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"            LOG.debug(\"Setting active GPFS node IP to %s\", ip)"},{"line_number":1330,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1331,"context_line":"            break"},{"line_number":1332,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1333,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"},{"line_number":1334,"context_line":"        else:"},{"line_number":1335,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1336,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_0c31225a","line":1333,"range":{"start_line":1332,"start_character":0,"end_line":1333,"end_character":59},"updated":"2016-12-16 18:31:14.000000000","message":"You don\u0027t need this \"if\". You can use python for/else and just do the set above (or return active_gpfs_node_ip below)","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1329,"context_line":"            LOG.debug(\"Setting active GPFS node IP to %s\", ip)"},{"line_number":1330,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1331,"context_line":"            break"},{"line_number":1332,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1333,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"},{"line_number":1334,"context_line":"        else:"},{"line_number":1335,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1336,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_eb67a3b4","line":1333,"range":{"start_line":1332,"start_character":0,"end_line":1333,"end_character":59},"in_reply_to":"1a6eadb0_0c31225a","updated":"2016-12-28 11:25:13.000000000","message":"Done","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"            break"},{"line_number":1332,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1333,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"},{"line_number":1334,"context_line":"        else:"},{"line_number":1335,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1336,"context_line":"            LOG.error(msg)"},{"line_number":1337,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_2c0b3e7e","line":1334,"range":{"start_line":1334,"start_character":7,"end_line":1334,"end_character":13},"updated":"2016-12-16 18:31:14.000000000","message":"and keep the else because you can do for/else in python to handle the exception if you never did a \"break\"","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"            break"},{"line_number":1332,"context_line":"        if active_gpfs_node_ip:"},{"line_number":1333,"context_line":"            self.configuration.san_ip \u003d active_gpfs_node_ip"},{"line_number":1334,"context_line":"        else:"},{"line_number":1335,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1336,"context_line":"            LOG.error(msg)"},{"line_number":1337,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_cb6adf80","line":1334,"range":{"start_line":1334,"start_character":7,"end_line":1334,"end_character":13},"in_reply_to":"1a6eadb0_2c0b3e7e","updated":"2016-12-28 11:25:13.000000000","message":"Done","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"d2d1d03083c76bead37f966d4a02bd1a4162710a","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1336,"context_line":"            LOG.error(msg)"},{"line_number":1337,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1338,"context_line":"        return"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"@interface.volumedriver"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_2756f905","line":1338,"range":{"start_line":1338,"start_character":8,"end_line":1338,"end_character":14},"updated":"2016-12-16 18:31:14.000000000","message":"Probably instead of setting any self.configuration* above you could \"return active_gpfs_node_ip\" here and keep all your self.configuration assignments in __init__()","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"32ec18bbf8656b699422dd232c9f157e6a6741bd","unresolved":false,"context_lines":[{"line_number":1335,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1336,"context_line":"            LOG.error(msg)"},{"line_number":1337,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1338,"context_line":"        return"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"@interface.volumedriver"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_ab711b78","line":1338,"range":{"start_line":1338,"start_character":8,"end_line":1338,"end_character":14},"in_reply_to":"1a6eadb0_2756f905","updated":"2016-12-28 11:25:13.000000000","message":"Done","commit_id":"9f6bcc164fe59aba2cbe6fe340acaabcf221958a"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"gpfs_remote_ssh_opts \u003d ["},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027gpfs_hosts\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":91,"context_line":"               help\u003d\u0027list of IP address of GPFS nodes\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027gpfs_user_login\u0027,"},{"line_number":93,"context_line":"               default\u003d\u0027root\u0027,"},{"line_number":94,"context_line":"               help\u003d\u0027Username for GPFS nodes\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_7856205d","line":91,"range":{"start_line":91,"start_character":21,"end_line":91,"end_character":22},"updated":"2017-01-06 00:34:31.000000000","message":"Start with cap L","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":88,"context_line":"gpfs_remote_ssh_opts \u003d ["},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027gpfs_hosts\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":91,"context_line":"               help\u003d\u0027list of IP address of GPFS nodes\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027gpfs_user_login\u0027,"},{"line_number":93,"context_line":"               default\u003d\u0027root\u0027,"},{"line_number":94,"context_line":"               help\u003d\u0027Username for GPFS nodes\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_fb112353","line":91,"range":{"start_line":91,"start_character":21,"end_line":91,"end_character":22},"in_reply_to":"ba5201f7_7856205d","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication\u0027),"},{"line_number":98,"context_line":"    cfg.PortOpt(\u0027gpfs_ssh_port\u0027,"},{"line_number":99,"context_line":"                default\u003d22,"},{"line_number":100,"context_line":"                help\u003d\u0027SSH port to use\u0027),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_d849ccb8","line":100,"updated":"2017-01-06 00:34:31.000000000","message":"All the help strings should end with a period.","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":97,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication\u0027),"},{"line_number":98,"context_line":"    cfg.PortOpt(\u0027gpfs_ssh_port\u0027,"},{"line_number":99,"context_line":"                default\u003d22,"},{"line_number":100,"context_line":"                help\u003d\u0027SSH port to use\u0027),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_1b1d0766","line":100,"in_reply_to":"ba5201f7_d849ccb8","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1315,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1316,"context_line":"            except Exception as e:"},{"line_number":1317,"context_line":"                msg \u003d (_(\"Error connecting to GPFS node %(ip)s.\""},{"line_number":1318,"context_line":"                         \"Error is : %(err)s\"),"},{"line_number":1319,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                LOG.info(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_f84bf084","line":1317,"updated":"2017-01-06 00:34:31.000000000","message":"add a space after period (before next line \"Error...\")","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1315,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1316,"context_line":"            except Exception as e:"},{"line_number":1317,"context_line":"                msg \u003d (_(\"Error connecting to GPFS node %(ip)s.\""},{"line_number":1318,"context_line":"                         \"Error is : %(err)s\"),"},{"line_number":1319,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                LOG.info(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_9b1f375a","line":1317,"in_reply_to":"ba5201f7_f84bf084","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1316,"context_line":"            except Exception as e:"},{"line_number":1317,"context_line":"                msg \u003d (_(\"Error connecting to GPFS node %(ip)s.\""},{"line_number":1318,"context_line":"                         \"Error is : %(err)s\"),"},{"line_number":1319,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                LOG.info(msg)"},{"line_number":1321,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_3842d868","line":1318,"range":{"start_line":1318,"start_character":34,"end_line":1318,"end_character":35},"updated":"2017-01-06 00:34:31.000000000","message":"I don\u0027t think there should be a space before the \u0027:\u0027","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1316,"context_line":"            except Exception as e:"},{"line_number":1317,"context_line":"                msg \u003d (_(\"Error connecting to GPFS node %(ip)s.\""},{"line_number":1318,"context_line":"                         \"Error is : %(err)s\"),"},{"line_number":1319,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                LOG.info(msg)"},{"line_number":1321,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_db3d3fc5","line":1318,"range":{"start_line":1318,"start_character":34,"end_line":1318,"end_character":35},"in_reply_to":"ba5201f7_3842d868","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"                msg \u003d (_(\"Error connecting to GPFS node %(ip)s.\""},{"line_number":1318,"context_line":"                         \"Error is : %(err)s\"),"},{"line_number":1319,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                LOG.info(msg)"},{"line_number":1321,"context_line":"                continue"},{"line_number":1322,"context_line":"            try:"},{"line_number":1323,"context_line":"                # check if GPFS state is active on the node"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_0b96a03e","line":1320,"updated":"2017-01-06 00:34:31.000000000","message":"here you can pass in (msg, data) instead of creating a tuple in msg above.","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"                msg \u003d (_(\"Error connecting to GPFS node %(ip)s.\""},{"line_number":1318,"context_line":"                         \"Error is : %(err)s\"),"},{"line_number":1319,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                LOG.info(msg)"},{"line_number":1321,"context_line":"                continue"},{"line_number":1322,"context_line":"            try:"},{"line_number":1323,"context_line":"                # check if GPFS state is active on the node"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_fbd923f4","line":1320,"in_reply_to":"ba5201f7_0b96a03e","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"},{"line_number":1328,"context_line":"                if gpfs_state !\u003d \u0027active\u0027:"},{"line_number":1329,"context_line":"                    msg \u003d (_(\"GPFS is not active on node %(ip)s.\""},{"line_number":1330,"context_line":"                             \"Continuing to next node\"),"},{"line_number":1331,"context_line":"                           {\u0027ip\u0027: ip})"},{"line_number":1332,"context_line":"                    LOG.info(msg)"},{"line_number":1333,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_8bc9b05b","line":1330,"range":{"start_line":1330,"start_character":55,"end_line":1330,"end_character":56},"updated":"2017-01-06 00:34:31.000000000","message":"same here. looks like you are creating a tuple instead of passing (msg, data) in LOG.info.","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":1327,"context_line":"                gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"},{"line_number":1328,"context_line":"                if gpfs_state !\u003d \u0027active\u0027:"},{"line_number":1329,"context_line":"                    msg \u003d (_(\"GPFS is not active on node %(ip)s.\""},{"line_number":1330,"context_line":"                             \"Continuing to next node\"),"},{"line_number":1331,"context_line":"                           {\u0027ip\u0027: ip})"},{"line_number":1332,"context_line":"                    LOG.info(msg)"},{"line_number":1333,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_3be00b96","line":1330,"range":{"start_line":1330,"start_character":55,"end_line":1330,"end_character":56},"in_reply_to":"ba5201f7_8bc9b05b","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c0351241c193de76b5b41386a9a461994644052b","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":1339,"context_line":"                msg \u003d (_(\"GPFS is not active on node %(ip)s. \""},{"line_number":1340,"context_line":"                         \"Error is : %(err)s\""},{"line_number":1341,"context_line":"                         \"Continuing to next node\"),"},{"line_number":1342,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e.stderr})"},{"line_number":1343,"context_line":"                LOG.info(msg)"},{"line_number":1344,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_8bda90e6","line":1341,"range":{"start_line":1341,"start_character":51,"end_line":1341,"end_character":52},"updated":"2017-01-06 00:34:31.000000000","message":"same.","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"d8d228db96731e4c783be2a1cf5fb404268b11ef","unresolved":false,"context_lines":[{"line_number":1338,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":1339,"context_line":"                msg \u003d (_(\"GPFS is not active on node %(ip)s. \""},{"line_number":1340,"context_line":"                         \"Error is : %(err)s\""},{"line_number":1341,"context_line":"                         \"Continuing to next node\"),"},{"line_number":1342,"context_line":"                       {\u0027ip\u0027: ip, \u0027err\u0027: e.stderr})"},{"line_number":1343,"context_line":"                LOG.info(msg)"},{"line_number":1344,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba5201f7_5bf14f6a","line":1341,"range":{"start_line":1341,"start_character":51,"end_line":1341,"end_character":52},"in_reply_to":"ba5201f7_8bda90e6","updated":"2017-01-06 06:17:52.000000000","message":"Done","commit_id":"017bd1678c90ff0322649c98df4d42de7819ea52"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f8a0af63963c8d9c1baad91926f07a4fadd47e1b","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            else:"},{"line_number":1289,"context_line":"                msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":1290,"context_line":"                       CONF.ssh_hosts_key_file)"},{"line_number":1291,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"    def _gpfs_remote_execute(self, *cmd, **kwargs):"},{"line_number":1294,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a57fde8_f9e8f018","line":1291,"updated":"2017-01-12 17:18:24.000000000","message":"I\u0027d move this section into do_setup()","commit_id":"907b39bf84c799ee5c786ea8be497de0df16356f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ceac9a6bab1150c4a6a2718e68647de2d1406d2d","unresolved":false,"context_lines":[{"line_number":1288,"context_line":"            else:"},{"line_number":1289,"context_line":"                msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":1290,"context_line":"                       CONF.ssh_hosts_key_file)"},{"line_number":1291,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"    def _gpfs_remote_execute(self, *cmd, **kwargs):"},{"line_number":1294,"context_line":"        check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_6b6714b7","line":1291,"in_reply_to":"9a57fde8_f9e8f018","updated":"2017-02-08 14:45:52.000000000","message":"I\u0027ve rather moved this part into _get_active_gpfs_node_ip() function.","commit_id":"907b39bf84c799ee5c786ea8be497de0df16356f"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"88b20cbe950bb4ab285546a0da1319b3a17dbd10","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1315,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1316,"context_line":"            except Exception as e:"},{"line_number":1317,"context_line":"                LOG.info(_LI(\"Error connecting to GPFS node %(ip)s. \""},{"line_number":1318,"context_line":"                             \"Error is: %(err)s\"),"},{"line_number":1319,"context_line":"                         {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_c75fdd73","line":1317,"range":{"start_line":1317,"start_character":30,"end_line":1317,"end_character":35},"updated":"2017-01-25 17:05:22.000000000","message":"This is actually not an error.\nThis text may be misleading.\nThis should be something like \"Could not connect to GPFS node....\"","commit_id":"907b39bf84c799ee5c786ea8be497de0df16356f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ceac9a6bab1150c4a6a2718e68647de2d1406d2d","unresolved":false,"context_lines":[{"line_number":1314,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1315,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1316,"context_line":"            except Exception as e:"},{"line_number":1317,"context_line":"                LOG.info(_LI(\"Error connecting to GPFS node %(ip)s. \""},{"line_number":1318,"context_line":"                             \"Error is: %(err)s\"),"},{"line_number":1319,"context_line":"                         {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1320,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_ab0bbcd4","line":1317,"range":{"start_line":1317,"start_character":30,"end_line":1317,"end_character":35},"in_reply_to":"3a461143_c75fdd73","updated":"2017-02-08 14:45:52.000000000","message":"Done","commit_id":"907b39bf84c799ee5c786ea8be497de0df16356f"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"88b20cbe950bb4ab285546a0da1319b3a17dbd10","unresolved":false,"context_lines":[{"line_number":1344,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1345,"context_line":"            break"},{"line_number":1346,"context_line":"        else:"},{"line_number":1347,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1348,"context_line":"            LOG.error(msg)"},{"line_number":1349,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1350,"context_line":"        return active_gpfs_node_ip"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_a74bb1af","line":1347,"range":{"start_line":1347,"start_character":21,"end_line":1347,"end_character":22},"updated":"2017-01-25 17:05:22.000000000","message":"Add _LE","commit_id":"907b39bf84c799ee5c786ea8be497de0df16356f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"ceac9a6bab1150c4a6a2718e68647de2d1406d2d","unresolved":false,"context_lines":[{"line_number":1344,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1345,"context_line":"            break"},{"line_number":1346,"context_line":"        else:"},{"line_number":1347,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1348,"context_line":"            LOG.error(msg)"},{"line_number":1349,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1350,"context_line":"        return active_gpfs_node_ip"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_eb114405","line":1347,"range":{"start_line":1347,"start_character":21,"end_line":1347,"end_character":22},"in_reply_to":"3a461143_a74bb1af","updated":"2017-02-08 14:45:52.000000000","message":"Done","commit_id":"907b39bf84c799ee5c786ea8be497de0df16356f"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"ac00d20d1d0075d95abf64e85ec2c8700a8094a0","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1307,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1308,"context_line":"            except Exception as e:"},{"line_number":1309,"context_line":"                LOG.info(_LI(\"Error connecting to GPFS node %(ip)s. \""},{"line_number":1310,"context_line":"                             \"Error is: %(err)s\"),"},{"line_number":1311,"context_line":"                         {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1312,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_2e7407ce","line":1309,"range":{"start_line":1309,"start_character":30,"end_line":1309,"end_character":36},"updated":"2017-02-02 23:42:16.000000000","message":"see earlier comments here","commit_id":"a9747c48436d22f0345b90a4c1810db869f76bc1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"7326e321606e3ff9ab1965575d72d4fec2b79c6a","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"                            pkey\u003dprivatekey,"},{"line_number":1307,"context_line":"                            timeout\u003dself.configuration.ssh_conn_timeout)"},{"line_number":1308,"context_line":"            except Exception as e:"},{"line_number":1309,"context_line":"                LOG.info(_LI(\"Error connecting to GPFS node %(ip)s. \""},{"line_number":1310,"context_line":"                             \"Error is: %(err)s\"),"},{"line_number":1311,"context_line":"                         {\u0027ip\u0027: ip, \u0027err\u0027: e})"},{"line_number":1312,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_eb286435","line":1309,"range":{"start_line":1309,"start_character":30,"end_line":1309,"end_character":36},"in_reply_to":"1a430d35_2e7407ce","updated":"2017-02-08 14:46:04.000000000","message":"Done","commit_id":"a9747c48436d22f0345b90a4c1810db869f76bc1"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"ac00d20d1d0075d95abf64e85ec2c8700a8094a0","unresolved":false,"context_lines":[{"line_number":1336,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1337,"context_line":"            break"},{"line_number":1338,"context_line":"        else:"},{"line_number":1339,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1340,"context_line":"            LOG.error(msg)"},{"line_number":1341,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1342,"context_line":"        return active_gpfs_node_ip"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_4eaa331b","line":1339,"updated":"2017-02-02 23:42:16.000000000","message":"_() for localization of exception text","commit_id":"a9747c48436d22f0345b90a4c1810db869f76bc1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"7326e321606e3ff9ab1965575d72d4fec2b79c6a","unresolved":false,"context_lines":[{"line_number":1336,"context_line":"            active_gpfs_node_ip \u003d ip"},{"line_number":1337,"context_line":"            break"},{"line_number":1338,"context_line":"        else:"},{"line_number":1339,"context_line":"            msg \u003d \"No GPFS node is active\""},{"line_number":1340,"context_line":"            LOG.error(msg)"},{"line_number":1341,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1342,"context_line":"        return active_gpfs_node_ip"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_0b24d05b","line":1339,"in_reply_to":"1a430d35_4eaa331b","updated":"2017-02-08 14:46:04.000000000","message":"Done","commit_id":"a9747c48436d22f0345b90a4c1810db869f76bc1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"import math"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import paramiko"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import shutil"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_9621deb7","line":21,"updated":"2017-04-24 18:03:08.000000000","message":"paramiko should be in the second set of imports w/ oslo and six rather than here.","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"import math"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import paramiko"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import shutil"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_bbd95084","line":21,"in_reply_to":"5ff73747_9621deb7","updated":"2017-04-25 10:48:33.000000000","message":"Done","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"gpfs_remote_ssh_opts \u003d ["},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027gpfs_hosts\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":91,"context_line":"               help\u003d\u0027List of IP address of GPFS nodes.\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027gpfs_user_login\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_b6885ac6","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":14},"updated":"2017-04-24 18:03:08.000000000","message":"Should be a ListOpt.","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":86,"context_line":"]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"gpfs_remote_ssh_opts \u003d ["},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027gpfs_hosts\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":91,"context_line":"               help\u003d\u0027List of IP address of GPFS nodes.\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027gpfs_user_login\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_9b0214b4","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":14},"in_reply_to":"5ff73747_b6885ac6","updated":"2017-04-25 10:48:33.000000000","message":"Done","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":88,"context_line":"gpfs_remote_ssh_opts \u003d ["},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027gpfs_hosts\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":91,"context_line":"               help\u003d\u0027List of IP address of GPFS nodes.\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027gpfs_user_login\u0027,"},{"line_number":93,"context_line":"               default\u003d\u0027root\u0027,"},{"line_number":94,"context_line":"               help\u003d\u0027Username for GPFS nodes.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_f6e94280","line":91,"updated":"2017-04-24 18:03:08.000000000","message":"IP addresses or also hostnames?","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":88,"context_line":"gpfs_remote_ssh_opts \u003d ["},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027gpfs_hosts\u0027,"},{"line_number":90,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":91,"context_line":"               help\u003d\u0027List of IP address of GPFS nodes.\u0027),"},{"line_number":92,"context_line":"    cfg.StrOpt(\u0027gpfs_user_login\u0027,"},{"line_number":93,"context_line":"               default\u003d\u0027root\u0027,"},{"line_number":94,"context_line":"               help\u003d\u0027Username for GPFS nodes.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_bbf5d0cd","line":91,"in_reply_to":"5ff73747_f6e94280","updated":"2017-04-25 10:48:33.000000000","message":"Good point. Done !","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":94,"context_line":"               help\u003d\u0027Username for GPFS nodes.\u0027),"},{"line_number":95,"context_line":"    cfg.StrOpt(\u0027gpfs_user_password\u0027,"},{"line_number":96,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":97,"context_line":"               help\u003d\u0027Password for GPFS node user.\u0027),"},{"line_number":98,"context_line":"    cfg.StrOpt(\u0027gpfs_private_key\u0027,"},{"line_number":99,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":100,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_b6da9ae6","line":97,"updated":"2017-04-24 18:03:08.000000000","message":"Need secret\u003dTrue for the password option.","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":94,"context_line":"               help\u003d\u0027Username for GPFS nodes.\u0027),"},{"line_number":95,"context_line":"    cfg.StrOpt(\u0027gpfs_user_password\u0027,"},{"line_number":96,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":97,"context_line":"               help\u003d\u0027Password for GPFS node user.\u0027),"},{"line_number":98,"context_line":"    cfg.StrOpt(\u0027gpfs_private_key\u0027,"},{"line_number":99,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":100,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_dbf89cc5","line":97,"in_reply_to":"5ff73747_b6da9ae6","updated":"2017-04-25 10:48:33.000000000","message":"Done","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":1285,"context_line":""},{"line_number":1286,"context_line":"        # Validate good config setting here."},{"line_number":1287,"context_line":"        # Paramiko handles the case where the file is inaccessible."},{"line_number":1288,"context_line":"        if not CONF.ssh_hosts_key_file:"},{"line_number":1289,"context_line":"            raise exception.ParameterNotFound(param\u003d\u0027ssh_hosts_key_file\u0027)"},{"line_number":1290,"context_line":"        elif not os.path.isfile(CONF.ssh_hosts_key_file):"},{"line_number":1291,"context_line":"            # If using the default path, just create the file."}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_76abf21c","line":1288,"updated":"2017-04-24 18:03:08.000000000","message":"Should use self.configuration here instead of CONF.","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":1285,"context_line":""},{"line_number":1286,"context_line":"        # Validate good config setting here."},{"line_number":1287,"context_line":"        # Paramiko handles the case where the file is inaccessible."},{"line_number":1288,"context_line":"        if not CONF.ssh_hosts_key_file:"},{"line_number":1289,"context_line":"            raise exception.ParameterNotFound(param\u003d\u0027ssh_hosts_key_file\u0027)"},{"line_number":1290,"context_line":"        elif not os.path.isfile(CONF.ssh_hosts_key_file):"},{"line_number":1291,"context_line":"            # If using the default path, just create the file."}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_bb1ef009","line":1288,"in_reply_to":"5ff73747_76abf21c","updated":"2017-04-25 10:48:33.000000000","message":"Done","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        ssh.load_host_keys(CONF.ssh_hosts_key_file)"},{"line_number":1300,"context_line":"        if CONF.strict_ssh_host_key_policy:"},{"line_number":1301,"context_line":"            ssh.set_missing_host_key_policy(paramiko.RejectPolicy())"},{"line_number":1302,"context_line":"        else:"},{"line_number":1303,"context_line":"            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_d671a6e2","line":1300,"updated":"2017-04-24 18:03:08.000000000","message":"Should use self.configuration here instead of CONF to allow different settings per-backend.","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        ssh.load_host_keys(CONF.ssh_hosts_key_file)"},{"line_number":1300,"context_line":"        if CONF.strict_ssh_host_key_policy:"},{"line_number":1301,"context_line":"            ssh.set_missing_host_key_policy(paramiko.RejectPolicy())"},{"line_number":1302,"context_line":"        else:"},{"line_number":1303,"context_line":"            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_f126d9b7","line":1300,"in_reply_to":"5ff73747_d671a6e2","updated":"2017-04-25 10:48:33.000000000","message":"Done","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ad44b7597b72abdede7c20de4e7d466a9f49d0b7","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"        if ((not self.configuration.gpfs_user_password) and"},{"line_number":1305,"context_line":"                (not self.configuration.gpfs_private_key)):"},{"line_number":1306,"context_line":"            msg \u003d _(\"Specify a password or private_key\")"},{"line_number":1307,"context_line":"            raise exception.CinderException(msg)"},{"line_number":1308,"context_line":"        for ip in gpfs_node_ips:"},{"line_number":1309,"context_line":"            try:"},{"line_number":1310,"context_line":"                if self.configuration.gpfs_user_password:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_567d96af","line":1307,"range":{"start_line":1307,"start_character":28,"end_line":1307,"end_character":43},"updated":"2017-04-24 18:03:08.000000000","message":"VolumeDriverException","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"f4eef0de0ed3fde60c8f50645771b6307bf75718","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"        if ((not self.configuration.gpfs_user_password) and"},{"line_number":1305,"context_line":"                (not self.configuration.gpfs_private_key)):"},{"line_number":1306,"context_line":"            msg \u003d _(\"Specify a password or private_key\")"},{"line_number":1307,"context_line":"            raise exception.CinderException(msg)"},{"line_number":1308,"context_line":"        for ip in gpfs_node_ips:"},{"line_number":1309,"context_line":"            try:"},{"line_number":1310,"context_line":"                if self.configuration.gpfs_user_password:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_9bc9f479","line":1307,"range":{"start_line":1307,"start_character":28,"end_line":1307,"end_character":43},"in_reply_to":"5ff73747_567d96af","updated":"2017-04-25 10:48:33.000000000","message":"Done","commit_id":"cb4bfbab8676155023bc16ee5d7071f688f1d95f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ef9a5de5c348e4b10351fd434449bd8c873d8ca0","unresolved":false,"context_lines":[{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"@interface.volumedriver"},{"line_number":1272,"context_line":"class GPFSRemoteDriver(GPFSDriver, san.SanDriver):"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":1275,"context_line":"        super(GPFSRemoteDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5ff73747_69f655fc","line":1272,"updated":"2017-04-25 13:04:25.000000000","message":"New driver needs VERSION and CI_WIKI_NAME variables defined. It would also be good to add a descriptive docstring to this driver class that explains what it\u0027s used for so the output in the driver list has that info.","commit_id":"673d6e6ec66b39ed013220f44e3479cc0e8d2f2e"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3054a72857614f729d93378f0eda035bb8dc8e41","unresolved":false,"context_lines":[{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"@interface.volumedriver"},{"line_number":1272,"context_line":"class GPFSRemoteDriver(GPFSDriver, san.SanDriver):"},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":1275,"context_line":"        super(GPFSRemoteDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5ff73747_0481f88f","line":1272,"in_reply_to":"5ff73747_69f655fc","updated":"2017-04-25 13:43:51.000000000","message":"Thanks Sean. I\u0027ve added the details.","commit_id":"673d6e6ec66b39ed013220f44e3479cc0e8d2f2e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"281c28f0cff1ed06cc905305dcc860c5e214cef5","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"            else:"},{"line_number":1319,"context_line":"                msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":1320,"context_line":"                       self.configuration.gpfs_hosts_key_file)"},{"line_number":1321,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        ssh.load_host_keys(self.configuration.gpfs_hosts_key_file)"},{"line_number":1324,"context_line":"        if self.configuration.gpfs_strict_host_key_policy:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_adea2072","line":1321,"updated":"2017-04-25 16:24:33.000000000","message":"The validation of configuration settings should happen inside of \n\ncheck_for_setup_error(), which is called by the volume manager at start time.","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"8b0379c78cf5bcc50217a8735ad05aabb61dd59d","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"            else:"},{"line_number":1319,"context_line":"                msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":1320,"context_line":"                       self.configuration.gpfs_hosts_key_file)"},{"line_number":1321,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        ssh.load_host_keys(self.configuration.gpfs_hosts_key_file)"},{"line_number":1324,"context_line":"        if self.configuration.gpfs_strict_host_key_policy:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_e84db672","line":1321,"in_reply_to":"5ff73747_adea2072","updated":"2017-04-25 16:30:45.000000000","message":"The driver initialization requires doing ssh to the gpfs node which happens in __init__. Hence, all of the validations are done here in this function _get_active_gpfs_node_ip().","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":9207,"name":"Gaurang Tapase","email":"gtapase@ddn.com","username":"gaurang.tapase"},"change_message_id":"3ab17dcbb749538a07985fdb32f740e7abd23293","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"            else:"},{"line_number":1319,"context_line":"                msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":1320,"context_line":"                       self.configuration.gpfs_hosts_key_file)"},{"line_number":1321,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        ssh.load_host_keys(self.configuration.gpfs_hosts_key_file)"},{"line_number":1324,"context_line":"        if self.configuration.gpfs_strict_host_key_policy:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_e9ca576c","line":1321,"in_reply_to":"5ff73747_c892fa4b","updated":"2017-04-25 18:14:46.000000000","message":"Done","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c237d968c7432c54d94fe4ac9dc216940291ae94","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"            else:"},{"line_number":1319,"context_line":"                msg \u003d (_(\"Unable to find ssh_hosts_key_file: %s\") %"},{"line_number":1320,"context_line":"                       self.configuration.gpfs_hosts_key_file)"},{"line_number":1321,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        ssh.load_host_keys(self.configuration.gpfs_hosts_key_file)"},{"line_number":1324,"context_line":"        if self.configuration.gpfs_strict_host_key_policy:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_c892fa4b","line":1321,"in_reply_to":"5ff73747_e84db672","updated":"2017-04-25 16:40:31.000000000","message":"You can do these setup type of things in do_setup() then.   That gives the volume manager a chance to initialize and properly handle driver \"setup\" type of problems correctly.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/manager.py#L433-L434","commit_id":"d62fd77e987ebb26c1a71e31412f281fe68558d1"}]}
