)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"e13c489501af9b0868096a8693ce149082495a63","unresolved":false,"context_lines":[{"line_number":7,"context_line":"POC: attach volume w/o Nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Usage:"},{"line_number":10,"context_line":"cinder attach ISCSI 88c78cff-ed7b-462e-913b-7fb4205da7df dscvm2"},{"line_number":11,"context_line":"cinder detach ISCSI 88c78cff-ed7b-462e-913b-7fb4205da7df"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I287e57b4ec70c4e37f38aab0cb3dc1397a90bf9b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba15a1d1_7bfec56c","line":10,"updated":"2015-09-14 22:11:26.000000000","message":"The end user doesn\u0027t know the protocol used by the volume.  That\u0027s determined by the cinder volume driver itself.  Remove the protocol entirely.","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cc7aec3f953697ed13a73906ac13697cbedf665c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"POC: attach volume w/o Nova"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Usage:"},{"line_number":10,"context_line":"cinder attach ISCSI 88c78cff-ed7b-462e-913b-7fb4205da7df dscvm2"},{"line_number":11,"context_line":"cinder detach ISCSI 88c78cff-ed7b-462e-913b-7fb4205da7df"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I287e57b4ec70c4e37f38aab0cb3dc1397a90bf9b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba15a1d1_ec461a7a","line":10,"in_reply_to":"ba15a1d1_7bfec56c","updated":"2015-09-17 13:32:18.000000000","message":"Done","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"}],"cinderclient/v2/shell.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b809bb8e71f7efb74c3cd45bec41ed360d5579dc","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                                                use_multipath\u003duse_multipath,"},{"line_number":2402,"context_line":"                                                device_scan_attempts\u003d"},{"line_number":2403,"context_line":"                                                device_scan_attempts,"},{"line_number":2404,"context_line":"                                                *args, **kwargs)"},{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":""},{"line_number":2407,"context_line":"def _get_connector(protocol):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_1b9d4965","line":2404,"updated":"2015-09-14 22:10:38.000000000","message":"I would probably move this stuff into a utils, so it doesn\u0027t pollute this file.","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cc7aec3f953697ed13a73906ac13697cbedf665c","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                                                use_multipath\u003duse_multipath,"},{"line_number":2402,"context_line":"                                                device_scan_attempts\u003d"},{"line_number":2403,"context_line":"                                                device_scan_attempts,"},{"line_number":2404,"context_line":"                                                *args, **kwargs)"},{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":""},{"line_number":2407,"context_line":"def _get_connector(protocol):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_4c49465f","line":2404,"in_reply_to":"ba15a1d1_1b9d4965","updated":"2015-09-17 13:32:18.000000000","message":"Even more, all this stuff will be moved to a separate project","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b809bb8e71f7efb74c3cd45bec41ed360d5579dc","unresolved":false,"context_lines":[{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":""},{"line_number":2407,"context_line":"def _get_connector(protocol):"},{"line_number":2408,"context_line":"    return _brick_get_connector(protocol)"},{"line_number":2409,"context_line":""},{"line_number":2410,"context_line":""},{"line_number":2411,"context_line":"def _attach(connector, connection):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_fb1ad516","line":2408,"updated":"2015-09-14 22:10:38.000000000","message":"why do we need this wrapper?","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cc7aec3f953697ed13a73906ac13697cbedf665c","unresolved":false,"context_lines":[{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":""},{"line_number":2407,"context_line":"def _get_connector(protocol):"},{"line_number":2408,"context_line":"    return _brick_get_connector(protocol)"},{"line_number":2409,"context_line":""},{"line_number":2410,"context_line":""},{"line_number":2411,"context_line":"def _attach(connector, connection):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_2c5412fd","line":2408,"in_reply_to":"ba15a1d1_fb1ad516","updated":"2015-09-17 13:32:18.000000000","message":"It\u0027s a copy-paste from cinder-agent poc","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b809bb8e71f7efb74c3cd45bec41ed360d5579dc","unresolved":false,"context_lines":[{"line_number":2423,"context_line":"           help\u003d\u0027hostname\u0027)"},{"line_number":2424,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":2425,"context_line":"def do_attach(cs, args):"},{"line_number":2426,"context_line":"    connector \u003d _get_connector(args.protocol)"},{"line_number":2427,"context_line":"    print (args.identifier)"},{"line_number":2428,"context_line":"    print(connector)"},{"line_number":2429,"context_line":"    conn \u003d cs.volumes.initialize_connection(args.identifier,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_db8d9132","line":2426,"updated":"2015-09-14 22:10:38.000000000","message":"The user isn\u0027t going to know what protocol the Cinder volume is being exported as.  \n\nThe protocol for a volume is the type as reported by the return value of cs.volumes.initialize_connection\n\nThe \u0027driver_volume_type\u0027 is what determines which protocol is used to attach/export the volume from the cinder driver.\n\nFor example,\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/hp/hp_3par_fc.py#L262","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cc7aec3f953697ed13a73906ac13697cbedf665c","unresolved":false,"context_lines":[{"line_number":2423,"context_line":"           help\u003d\u0027hostname\u0027)"},{"line_number":2424,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":2425,"context_line":"def do_attach(cs, args):"},{"line_number":2426,"context_line":"    connector \u003d _get_connector(args.protocol)"},{"line_number":2427,"context_line":"    print (args.identifier)"},{"line_number":2428,"context_line":"    print(connector)"},{"line_number":2429,"context_line":"    conn \u003d cs.volumes.initialize_connection(args.identifier,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_2c6ad2ee","line":2426,"in_reply_to":"ba15a1d1_db8d9132","updated":"2015-09-17 13:32:18.000000000","message":"Thank you, Walter. Fixed","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b809bb8e71f7efb74c3cd45bec41ed360d5579dc","unresolved":false,"context_lines":[{"line_number":2427,"context_line":"    print (args.identifier)"},{"line_number":2428,"context_line":"    print(connector)"},{"line_number":2429,"context_line":"    conn \u003d cs.volumes.initialize_connection(args.identifier,"},{"line_number":2430,"context_line":"        {\u0027initiator\u0027: connector.get_initiator()})"},{"line_number":2431,"context_line":""},{"line_number":2432,"context_line":"    _attach(connector, conn)"},{"line_number":2433,"context_line":"    print(cs.volumes.attach(args.identifier, None, None, host_name\u003dargs.hostname))"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_7b824502","line":2430,"updated":"2015-09-14 22:10:38.000000000","message":"not all connectors have the get_initiator().  Only the iSCSI connector has get_initiator(), which only returns the IQN of the host.\n\nAlso, cinder\u0027s initialize_connection needs the result from \nos_brick.initiator.connector.get_connector_properties()\n\nhttps://github.com/openstack/os-brick/blob/master/os_brick/initiator/connector.py#L93","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"cc7aec3f953697ed13a73906ac13697cbedf665c","unresolved":false,"context_lines":[{"line_number":2427,"context_line":"    print (args.identifier)"},{"line_number":2428,"context_line":"    print(connector)"},{"line_number":2429,"context_line":"    conn \u003d cs.volumes.initialize_connection(args.identifier,"},{"line_number":2430,"context_line":"        {\u0027initiator\u0027: connector.get_initiator()})"},{"line_number":2431,"context_line":""},{"line_number":2432,"context_line":"    _attach(connector, conn)"},{"line_number":2433,"context_line":"    print(cs.volumes.attach(args.identifier, None, None, host_name\u003dargs.hostname))"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_ec6ffaf9","line":2430,"in_reply_to":"ba15a1d1_7b824502","updated":"2015-09-17 13:32:18.000000000","message":"Thanks, fixed","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b809bb8e71f7efb74c3cd45bec41ed360d5579dc","unresolved":false,"context_lines":[{"line_number":2441,"context_line":"           help\u003d\u0027Name or other Identifier for existing volume\u0027)"},{"line_number":2442,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":2443,"context_line":"def do_detach(cs, args):"},{"line_number":2444,"context_line":"    connector \u003d _get_connector(args.protocol)"},{"line_number":2445,"context_line":"    conn \u003d cs.volumes.initialize_connection(args.identifier,"},{"line_number":2446,"context_line":"        {\u0027initiator\u0027: connector.get_initiator()})"},{"line_number":2447,"context_line":"    connector.disconnect_volume(conn[\u0027data\u0027], None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_bb8f7d22","line":2444,"updated":"2015-09-14 22:10:38.000000000","message":"same issue as above.  the user doesn\u0027t know the protocol used by the volume.  The protocol for the volume is defined by the cinder volume driver\u0027s return value from \u0027driver_volume_type\u0027\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/san/hp/hp_3par_fc.py#L262","commit_id":"ca64d44954e359a2b00437c8c3d9f83523b10447"},{"author":{"_account_id":14084,"name":"Einst Crazy","email":"yu.changcai@99cloud.net","username":"Einst"},"change_message_id":"87e6d640e42c38fba4247d29005e6ea4fd400e7f","unresolved":false,"context_lines":[{"line_number":2381,"context_line":""},{"line_number":2382,"context_line":"from os_brick.initiator import connector"},{"line_number":2383,"context_line":"from oslo_concurrency import processutils"},{"line_number":2384,"context_line":"import socket"},{"line_number":2385,"context_line":""},{"line_number":2386,"context_line":""},{"line_number":2387,"context_line":"def _brick_get_connector(protocol, driver\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_d3a711a5","line":2384,"updated":"2015-09-18 03:35:33.000000000","message":"You may import in the head of the file","commit_id":"bfe30f2ffc0aedd64e92c5a9774d4f8d3f6e12ea"},{"author":{"_account_id":14084,"name":"Einst Crazy","email":"yu.changcai@99cloud.net","username":"Einst"},"change_message_id":"87e6d640e42c38fba4247d29005e6ea4fd400e7f","unresolved":false,"context_lines":[{"line_number":2407,"context_line":"def _get_my_ip():"},{"line_number":2408,"context_line":"    try:"},{"line_number":2409,"context_line":"        csock \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"},{"line_number":2410,"context_line":"        csock.connect((\u00278.8.8.8\u0027, 80))"},{"line_number":2411,"context_line":"        (addr, port) \u003d csock.getsockname()"},{"line_number":2412,"context_line":"        csock.close()"},{"line_number":2413,"context_line":"        return addr"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_f3cd7566","line":2410,"updated":"2015-09-18 03:35:33.000000000","message":"well, I think this may be terrible, when the server cannot connect to 8.8.8.8 80 for some reason.","commit_id":"bfe30f2ffc0aedd64e92c5a9774d4f8d3f6e12ea"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"569db667d2b594ebdca842e6f7104cee4e383014","unresolved":false,"context_lines":[{"line_number":2407,"context_line":"def _get_my_ip():"},{"line_number":2408,"context_line":"    try:"},{"line_number":2409,"context_line":"        csock \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"},{"line_number":2410,"context_line":"        csock.connect((\u00278.8.8.8\u0027, 80))"},{"line_number":2411,"context_line":"        (addr, port) \u003d csock.getsockname()"},{"line_number":2412,"context_line":"        csock.close()"},{"line_number":2413,"context_line":"        return addr"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a29b11f_49c99c77","line":2410,"in_reply_to":"3a29b11f_b8c54a5c","updated":"2015-10-20 09:50:54.000000000","message":"This should definitely be the volume host, not 8.8.8.8 - there are people using openstack quite legitamately on closed networks with no default routes.\n\nWe should probably also allow \u0027my IP\u0027 to be overriden manually, for example for multi-homed machines where you want to force storage traffic over a none-default network.","commit_id":"bfe30f2ffc0aedd64e92c5a9774d4f8d3f6e12ea"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"6105f7ec72a1b992e16e69e0dbd4133514aeffa7","unresolved":false,"context_lines":[{"line_number":2407,"context_line":"def _get_my_ip():"},{"line_number":2408,"context_line":"    try:"},{"line_number":2409,"context_line":"        csock \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"},{"line_number":2410,"context_line":"        csock.connect((\u00278.8.8.8\u0027, 80))"},{"line_number":2411,"context_line":"        (addr, port) \u003d csock.getsockname()"},{"line_number":2412,"context_line":"        csock.close()"},{"line_number":2413,"context_line":"        return addr"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a29b11f_b8c54a5c","line":2410,"in_reply_to":"ba15a1d1_f3cd7566","updated":"2015-10-19 13:38:00.000000000","message":"There\u0027s also the case where multiple IPs are on the host, and only one of the networks has connectivity to the volume host.\n\nFor example at Rackspace there is a public IP and a 10. IP - default route is the public address.\n\nPerhaps this should attempt a connection to the volume host instead? I think that would solve both problems... if we can\u0027t connect to the volume host, we won\u0027t be able to mount it anyway.","commit_id":"bfe30f2ffc0aedd64e92c5a9774d4f8d3f6e12ea"}]}
