)]}'
{"devstack/lib/ironic":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"efd917d5f07ae610852edab23f2993e9a928fd41","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"# Allow using JSON RPC instead of oslo.messaging"},{"line_number":326,"context_line":"IRONIC_RPC_TRANSPORT\u003d${IRONIC_RPC_TRANSPORT:-oslo}"},{"line_number":327,"context_line":"IRONIC_JSON_RPC_PORT\u003d${IRONIC_JSON_RPC_PORT:-8089}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"# Whether DevStack will be setup for bare metal or VMs"},{"line_number":330,"context_line":"IRONIC_IS_HARDWARE\u003d$(trueorfalse False IRONIC_IS_HARDWARE)"}],"source_content_type":"application/x-shellscript","patch_set":25,"id":"9fdfeff1_5eed34b5","line":327,"updated":"2019-02-12 10:55:04.000000000","message":"maybe make this optional if IRONIC_RPC_TRANSPORT is json-rpc ?","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"663013fdb0f20183f2be3b0793eef0ebacd38d44","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"# Allow using JSON RPC instead of oslo.messaging"},{"line_number":326,"context_line":"IRONIC_RPC_TRANSPORT\u003d${IRONIC_RPC_TRANSPORT:-oslo}"},{"line_number":327,"context_line":"IRONIC_JSON_RPC_PORT\u003d${IRONIC_JSON_RPC_PORT:-8089}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"# Whether DevStack will be setup for bare metal or VMs"},{"line_number":330,"context_line":"IRONIC_IS_HARDWARE\u003d$(trueorfalse False IRONIC_IS_HARDWARE)"}],"source_content_type":"application/x-shellscript","patch_set":25,"id":"9fdfeff1_81c6e199","line":327,"in_reply_to":"9fdfeff1_5eed34b5","updated":"2019-02-12 11:19:09.000000000","message":"We can, but it does not seem worth the effort, since the option is ignored otherwise.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"add3857885b9402425948a1d5f88dd5701f94be9","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"# Allow using JSON RPC instead of oslo.messaging"},{"line_number":326,"context_line":"IRONIC_RPC_TRANSPORT\u003d${IRONIC_RPC_TRANSPORT:-oslo}"},{"line_number":327,"context_line":"IRONIC_JSON_RPC_PORT\u003d${IRONIC_JSON_RPC_PORT:-8089}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"# Whether DevStack will be setup for bare metal or VMs"},{"line_number":330,"context_line":"IRONIC_IS_HARDWARE\u003d$(trueorfalse False IRONIC_IS_HARDWARE)"}],"source_content_type":"application/x-shellscript","patch_set":25,"id":"9fdfeff1_7104e618","line":327,"in_reply_to":"9fdfeff1_81c6e199","updated":"2019-02-12 15:39:55.000000000","message":"Doing a bunch of conditional logic like that makes it really difficult to make major changes to the plugin. Easier to just do what was done here in the long run.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"efd917d5f07ae610852edab23f2993e9a928fd41","unresolved":false,"context_lines":[{"line_number":1113,"context_line":"    iniset $IRONIC_CONF_FILE agent image_download_source $IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE"},{"line_number":1114,"context_line":"    # Configure JSON RPC backend"},{"line_number":1115,"context_line":"    iniset $IRONIC_CONF_FILE DEFAULT rpc_transport $IRONIC_RPC_TRANSPORT"},{"line_number":1116,"context_line":"    iniset $IRONIC_CONF_FILE json_rpc port $IRONIC_JSON_RPC_PORT"},{"line_number":1117,"context_line":""},{"line_number":1118,"context_line":"    # Configure Ironic conductor, if it was enabled."},{"line_number":1119,"context_line":"    if is_service_enabled ir-cond; then"}],"source_content_type":"application/x-shellscript","patch_set":25,"id":"9fdfeff1_1e31ec5a","line":1116,"updated":"2019-02-12 10:55:04.000000000","message":"ditto","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"}],"doc/source/install/include/configure-ironic-api.inc":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   .. code-block:: ini"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"      [json_rpc]"},{"line_number":71,"context_line":"      port \u003d 9999"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. Configure the ironic-api service to use these credentials with the Identity"},{"line_number":74,"context_line":"   service. Replace ``PUBLIC_IDENTITY_IP`` with the public IP of the Identity"}],"source_content_type":"text/x-c++src","patch_set":25,"id":"9fdfeff1_5a902e96","line":71,"updated":"2019-02-07 01:01:26.000000000","message":"Is there any way to restrict it to a specific host? Likely asking too soon, but it is something that pops into my brain when reading documentation.\n\nedit: I see it in the next file. \\o/","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"}],"doc/source/install/include/configure-ironic-conductor.inc":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":85,"context_line":"   .. code-block:: ini"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"      [json_rpc]"},{"line_number":88,"context_line":"      host_ip \u003d 192.168.0.10"},{"line_number":89,"context_line":"      port \u003d 9999"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"   .. warning::"}],"source_content_type":"text/x-c++src","patch_set":25,"id":"9fdfeff1_3aed2a25","line":88,"updated":"2019-02-07 01:01:26.000000000","message":"\\o/","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"}],"ironic/common/json_rpc.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"},{"line_number":42,"context_line":"_BLACK_LIST \u003d {\u0027init_host\u0027, \u0027del_host\u0027, \u0027target\u0027, \u0027iter_nodes\u0027}"},{"line_number":43,"context_line":"_SESSION \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_d7b6b48a","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":11},"updated":"2019-01-30 18:22:25.000000000","message":"Would a white list of exposed callables be more secure in the long run?","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"},{"line_number":42,"context_line":"_BLACK_LIST \u003d {\u0027init_host\u0027, \u0027del_host\u0027, \u0027target\u0027, \u0027iter_nodes\u0027}"},{"line_number":43,"context_line":"_SESSION \u003d None"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_2a59ca33","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":11},"in_reply_to":"9fdfeff1_d7b6b48a","updated":"2019-01-31 09:57:22.000000000","message":"Probably, but it will be quite annoying to create, the list is already huge.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    result \u003d {}"},{"line_number":53,"context_line":"    for method in dir(manager):"},{"line_number":54,"context_line":"        if method.startswith(\u0027_\u0027) or method in _BLACK_LIST:"},{"line_number":55,"context_line":"            continue"},{"line_number":56,"context_line":"        func \u003d getattr(manager, method)"},{"line_number":57,"context_line":"        if not callable(func):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_1ad54144","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":17},"updated":"2019-01-30 18:22:25.000000000","message":"Should we also catch potential \u0027rpc*\u0027 methods as these are internal to the jsonrpc system iirc.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    result \u003d {}"},{"line_number":53,"context_line":"    for method in dir(manager):"},{"line_number":54,"context_line":"        if method.startswith(\u0027_\u0027) or method in _BLACK_LIST:"},{"line_number":55,"context_line":"            continue"},{"line_number":56,"context_line":"        func \u003d getattr(manager, method)"},{"line_number":57,"context_line":"        if not callable(func):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_ea3e62b6","line":54,"range":{"start_line":54,"start_character":11,"end_line":54,"end_character":17},"in_reply_to":"9fdfeff1_1ad54144","updated":"2019-01-31 09:57:22.000000000","message":"Reserved are methods starting with rpc. (note that dot), which cannot happen for Python methods.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    return result"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _authenticated():"},{"line_number":65,"context_line":"    return (CONF.json_rpc.auth_strategy or CONF.auth_strategy) \u003d\u003d \u0027keystone\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_f7473876","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":18},"updated":"2019-01-30 18:22:25.000000000","message":"Would something like \u0027_require_authentication\u0027 have a bit more clear semantics? Current name can be read as if this client is already authenticated.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    return result"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def _authenticated():"},{"line_number":65,"context_line":"    return (CONF.json_rpc.auth_strategy or CONF.auth_strategy) \u003d\u003d \u0027keystone\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_ca6cbecf","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":18},"in_reply_to":"9fdfeff1_f7473876","updated":"2019-01-31 09:57:22.000000000","message":"Done","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                \"message\": str(exc),"},{"line_number":159,"context_line":"                \"data\": {"},{"line_number":160,"context_line":"                    \u0027class\u0027: \u0027%s.%s\u0027 % (cls.__module__, cls.__name__),"},{"line_number":161,"context_line":"                } if (expected and not isinstance(exc, JsonRpcError)) else {}"},{"line_number":162,"context_line":"            }"},{"line_number":163,"context_line":"        }"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_171d1c73","line":161,"range":{"start_line":161,"start_character":75,"end_line":161,"end_character":77},"updated":"2019-01-30 18:22:25.000000000","message":"nit: may be omit the whole key?","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                \"message\": str(exc),"},{"line_number":159,"context_line":"                \"data\": {"},{"line_number":160,"context_line":"                    \u0027class\u0027: \u0027%s.%s\u0027 % (cls.__module__, cls.__name__),"},{"line_number":161,"context_line":"                } if (expected and not isinstance(exc, JsonRpcError)) else {}"},{"line_number":162,"context_line":"            }"},{"line_number":163,"context_line":"        }"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_0aa40607","line":161,"range":{"start_line":161,"start_character":75,"end_line":161,"end_character":77},"in_reply_to":"9fdfeff1_171d1c73","updated":"2019-01-31 09:57:22.000000000","message":"Done","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                raise ParseError()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"            if not isinstance(body, dict):"},{"line_number":180,"context_line":"                LOG.error(\u0027JSON RPC request %s is not an object\u0027, body)"},{"line_number":181,"context_line":"                raise InvalidRequest()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"            request_id \u003d body.get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_da07b917","line":180,"range":{"start_line":180,"start_character":0,"end_line":180,"end_character":71},"updated":"2019-01-30 18:22:25.000000000","message":"nit: may be log more explicitly that batches are not yet supported?","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                raise ParseError()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"            if not isinstance(body, dict):"},{"line_number":180,"context_line":"                LOG.error(\u0027JSON RPC request %s is not an object\u0027, body)"},{"line_number":181,"context_line":"                raise InvalidRequest()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"            request_id \u003d body.get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_8a90f696","line":180,"range":{"start_line":180,"start_character":0,"end_line":180,"end_character":71},"in_reply_to":"9fdfeff1_da07b917","updated":"2019-01-31 09:57:22.000000000","message":"Done","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"            if (body.get(\u0027jsonrpc\u0027) !\u003d \u00272.0\u0027"},{"line_number":186,"context_line":"                    or not body.get(\u0027method\u0027)"},{"line_number":187,"context_line":"                    or not isinstance(body.get(\u0027params\u0027), dict)):"},{"line_number":188,"context_line":"                LOG.error(\u0027JSON RPC request %s is invalid\u0027, body)"},{"line_number":189,"context_line":"                raise InvalidRequest()"},{"line_number":190,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_da5579fb","line":187,"range":{"start_line":187,"start_character":48,"end_line":187,"end_character":54},"updated":"2019-01-30 18:22:25.000000000","message":"is \u0027params\u0027 required? formally, it seems not.\n\nMay be worth handling these cases separately for more explicit logging including non-supported positionals?","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"            if (body.get(\u0027jsonrpc\u0027) !\u003d \u00272.0\u0027"},{"line_number":186,"context_line":"                    or not body.get(\u0027method\u0027)"},{"line_number":187,"context_line":"                    or not isinstance(body.get(\u0027params\u0027), dict)):"},{"line_number":188,"context_line":"                LOG.error(\u0027JSON RPC request %s is invalid\u0027, body)"},{"line_number":189,"context_line":"                raise InvalidRequest()"},{"line_number":190,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_aab93a15","line":187,"range":{"start_line":187,"start_character":48,"end_line":187,"end_character":54},"in_reply_to":"9fdfeff1_da5579fb","updated":"2019-01-31 09:57:22.000000000","message":"Done","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                LOG.error(\u0027JSON RPC request %s is invalid\u0027, body)"},{"line_number":189,"context_line":"                raise InvalidRequest()"},{"line_number":190,"context_line":"        except Exception as exc:"},{"line_number":191,"context_line":"            # We do not treat malformed requests as notifications even if \"id\""},{"line_number":192,"context_line":"            # is absent and return proper errors. This seems in line with the"},{"line_number":193,"context_line":"            # examples in the specification."},{"line_number":194,"context_line":"            return self._handle_error(exc, request_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_3a7cc581","line":191,"range":{"start_line":191,"start_character":75,"end_line":191,"end_character":77},"updated":"2019-01-30 18:22:25.000000000","message":"Does this block verify the absence of \u0027id\u0027?","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                LOG.error(\u0027JSON RPC request %s is invalid\u0027, body)"},{"line_number":189,"context_line":"                raise InvalidRequest()"},{"line_number":190,"context_line":"        except Exception as exc:"},{"line_number":191,"context_line":"            # We do not treat malformed requests as notifications even if \"id\""},{"line_number":192,"context_line":"            # is absent and return proper errors. This seems in line with the"},{"line_number":193,"context_line":"            # examples in the specification."},{"line_number":194,"context_line":"            return self._handle_error(exc, request_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_6a66f2c3","line":191,"range":{"start_line":191,"start_character":75,"end_line":191,"end_character":77},"in_reply_to":"9fdfeff1_3a7cc581","updated":"2019-01-31 09:57:22.000000000","message":"Mmm, this is a bit outdated, yeah.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        try:"},{"line_number":226,"context_line":"            context \u003d params.pop(\u0027context\u0027)"},{"line_number":227,"context_line":"        except KeyError:"},{"line_number":228,"context_line":"            context \u003d None"},{"line_number":229,"context_line":"        else:"},{"line_number":230,"context_line":"            context \u003d ir_context.RequestContext.from_dict(context or {})"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_baac35ed","line":227,"range":{"start_line":227,"start_character":15,"end_line":227,"end_character":23},"updated":"2019-01-30 18:22:25.000000000","message":"nit: alternatively, params.pop(\u0027context\u0027, None)","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        try:"},{"line_number":226,"context_line":"            context \u003d params.pop(\u0027context\u0027)"},{"line_number":227,"context_line":"        except KeyError:"},{"line_number":228,"context_line":"            context \u003d None"},{"line_number":229,"context_line":"        else:"},{"line_number":230,"context_line":"            context \u003d ir_context.RequestContext.from_dict(context or {})"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_ca24be60","line":227,"range":{"start_line":227,"start_character":15,"end_line":227,"end_character":23},"in_reply_to":"9fdfeff1_baac35ed","updated":"2019-01-31 09:57:22.000000000","message":"Yeah, but then we\u0027ll have to check it for None before going into deserialization.. So I guess either way is fine.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e93397b99046a3d5722169b3ba0330005c676e4e","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            raise InvalidParams(params\u003d\u0027, \u0027.join(params),"},{"line_number":242,"context_line":"                                method\u003dname, error\u003dexc)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        if context is not None:"},{"line_number":245,"context_line":"            result \u003d self.serializer.serialize_entity(context, result)"},{"line_number":246,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, name, result)"},{"line_number":247,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_1aec6128","line":244,"range":{"start_line":244,"start_character":11,"end_line":244,"end_character":18},"updated":"2019-01-30 18:22:25.000000000","message":"Just wondering why we serialize conditionally, but deserialize unconditionally on line 231?","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"557518b8c0ec11d0c1da8ee56449841584cdc48a","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            raise InvalidParams(params\u003d\u0027, \u0027.join(params),"},{"line_number":242,"context_line":"                                method\u003dname, error\u003dexc)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        if context is not None:"},{"line_number":245,"context_line":"            result \u003d self.serializer.serialize_entity(context, result)"},{"line_number":246,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, name, result)"},{"line_number":247,"context_line":"        return result"}],"source_content_type":"text/x-python","patch_set":23,"id":"9fdfeff1_4ad68e2a","line":244,"range":{"start_line":244,"start_character":11,"end_line":244,"end_character":18},"in_reply_to":"9fdfeff1_1aec6128","updated":"2019-01-31 09:57:22.000000000","message":"It\u0027s not unconditional there, we do it if context is present. But I agree, maybe we better check for None there as well.","commit_id":"c4aa0f5acb739332551a43480c1b6fab200a282b"}],"ironic/common/json_rpc/client.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            \"jsonrpc\": \"2.0\","},{"line_number":148,"context_line":"            \"method\": method,"},{"line_number":149,"context_line":"            \"params\": params,"},{"line_number":150,"context_line":"        }"},{"line_number":151,"context_line":"        if not cast:"},{"line_number":152,"context_line":"            body[\u0027id\u0027] \u003d context.request_id or uuidutils.generate_uuid()"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_3a644ab9","line":150,"updated":"2019-02-07 01:01:26.000000000","message":"I clearly need to go read the jsonrpc spec. :)","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            body[\u0027id\u0027] \u003d context.request_id or uuidutils.generate_uuid()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        LOG.debug(\"RPC %s with %s\", method, body)"},{"line_number":155,"context_line":"        url \u003d \u0027http://%s:%d\u0027 % (self.host, CONF.json_rpc.port)"},{"line_number":156,"context_line":"        result \u003d _get_session().post(url, json\u003dbody)"},{"line_number":157,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, method, result.text or \u0027\u003cNone\u003e\u0027)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_fa44821d","line":155,"range":{"start_line":155,"start_character":15,"end_line":155,"end_character":19},"updated":"2019-02-07 01:01:26.000000000","message":"I feel like scope creep but I kind of wonder if we should just support http[s]...","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"daf0f017acee052185c5aee38b879ac94cdb4ab7","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            body[\u0027id\u0027] \u003d context.request_id or uuidutils.generate_uuid()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        LOG.debug(\"RPC %s with %s\", method, body)"},{"line_number":155,"context_line":"        url \u003d \u0027http://%s:%d\u0027 % (self.host, CONF.json_rpc.port)"},{"line_number":156,"context_line":"        result \u003d _get_session().post(url, json\u003dbody)"},{"line_number":157,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, method, result.text or \u0027\u003cNone\u003e\u0027)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_2189e373","line":155,"updated":"2019-02-15 16:28:56.000000000","message":"So do all conductors need to use the same port, then?","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ad0b9984ede47b0fa1c5f452c7279c5e89508117","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            body[\u0027id\u0027] \u003d context.request_id or uuidutils.generate_uuid()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        LOG.debug(\"RPC %s with %s\", method, body)"},{"line_number":155,"context_line":"        url \u003d \u0027http://%s:%d\u0027 % (self.host, CONF.json_rpc.port)"},{"line_number":156,"context_line":"        result \u003d _get_session().post(url, json\u003dbody)"},{"line_number":157,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, method, result.text or \u0027\u003cNone\u003e\u0027)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_371fe1b7","line":155,"in_reply_to":"9fdfeff1_2189e373","updated":"2019-02-15 16:33:35.000000000","message":"Yep. We can overcome it with extending the conductors table, but I dunno if we should.","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"0509643692f4ad90d69b194c89dd794b8b60cb39","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            body[\u0027id\u0027] \u003d context.request_id or uuidutils.generate_uuid()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        LOG.debug(\"RPC %s with %s\", method, body)"},{"line_number":155,"context_line":"        url \u003d \u0027http://%s:%d\u0027 % (self.host, CONF.json_rpc.port)"},{"line_number":156,"context_line":"        result \u003d _get_session().post(url, json\u003dbody)"},{"line_number":157,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, method, result.text or \u0027\u003cNone\u003e\u0027)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_b32f643d","line":155,"in_reply_to":"9fdfeff1_371fe1b7","updated":"2019-02-15 17:09:32.000000000","message":"Right, feels like a discussion for the future. Thanks.","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a99a20dc4c3982b192b4d65960fe902acec2b2fa","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            body[\u0027id\u0027] \u003d context.request_id or uuidutils.generate_uuid()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        LOG.debug(\"RPC %s with %s\", method, body)"},{"line_number":155,"context_line":"        url \u003d \u0027http://%s:%d\u0027 % (self.host, CONF.json_rpc.port)"},{"line_number":156,"context_line":"        result \u003d _get_session().post(url, json\u003dbody)"},{"line_number":157,"context_line":"        LOG.debug(\u0027RPC %s returned %s\u0027, method, result.text or \u0027\u003cNone\u003e\u0027)"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_99283f33","line":155,"in_reply_to":"9fdfeff1_b32f643d","updated":"2019-02-15 18:33:01.000000000","message":"I could see it as useful to some. But yeah, definitely later discussion.","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"}],"ironic/common/json_rpc/server.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\"Implementation of JSON RPC for communication between API and conductors."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module implementa a subset of JSON RPC 2.0 as defined in"},{"line_number":16,"context_line":"https://www.jsonrpc.org/specification. Main differences:"},{"line_number":17,"context_line":"* No support for batched requests."},{"line_number":18,"context_line":"* No support for positional arguments passing."}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_5a6cae9b","line":15,"range":{"start_line":15,"start_character":21,"end_line":15,"end_character":22},"updated":"2019-02-07 01:01:26.000000000","message":"ignore: s/a/s/","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"efd917d5f07ae610852edab23f2993e9a928fd41","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    return result"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class JsonRpcError(exception.IronicException):"},{"line_number":62,"context_line":"    pass"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_3eedd0ef","line":61,"updated":"2019-02-12 10:55:04.000000000","message":"just wondering if we should directly add the exceptions to the main exception module or maybe add a json_rpc_exceptions  since we have a separate json_rpc module anyway ?","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"663013fdb0f20183f2be3b0793eef0ebacd38d44","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    return result"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class JsonRpcError(exception.IronicException):"},{"line_number":62,"context_line":"    pass"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_61b97d13","line":61,"in_reply_to":"9fdfeff1_3eedd0ef","updated":"2019-02-12 11:19:09.000000000","message":"I was thinking about it as well, but decided not to because these exceptions never leave this module.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"efd917d5f07ae610852edab23f2993e9a928fd41","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class InvalidParams(JsonRpcError):"},{"line_number":81,"context_line":"    code \u003d -32602"},{"line_number":82,"context_line":"    _msg_fmt \u003d _(\"Params %(params)s are invalid for %(method)s: %(error)s\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class WSGIService(service.Service):"},{"line_number":86,"context_line":"    \"\"\"Provides ability to launch JSON RPC as a WSGI application.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_febc28dd","line":83,"updated":"2019-02-12 10:55:04.000000000","message":"maybe add InternalError also?","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1773afc8cd82bb193e4d2ad5cb74468d37fad16b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class InvalidParams(JsonRpcError):"},{"line_number":81,"context_line":"    code \u003d -32602"},{"line_number":82,"context_line":"    _msg_fmt \u003d _(\"Params %(params)s are invalid for %(method)s: %(error)s\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class WSGIService(service.Service):"},{"line_number":86,"context_line":"    \"\"\"Provides ability to launch JSON RPC as a WSGI application.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_e101ed6b","line":83,"in_reply_to":"9fdfeff1_213db58e","updated":"2019-02-12 11:41:59.000000000","message":"I think we return a generic internal server error if the error code is not recognized.\nAccording to the json rpc specs, the code -32603 is returned as Internal JSON-RPC error.\nCould be worth adding it as it looks specific to json rpc.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b590a13f97e44aefd256a3b767b09d5ceba9ec3f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class InvalidParams(JsonRpcError):"},{"line_number":81,"context_line":"    code \u003d -32602"},{"line_number":82,"context_line":"    _msg_fmt \u003d _(\"Params %(params)s are invalid for %(method)s: %(error)s\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class WSGIService(service.Service):"},{"line_number":86,"context_line":"    \"\"\"Provides ability to launch JSON RPC as a WSGI application.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_a16a0517","line":83,"in_reply_to":"9fdfeff1_e101ed6b","updated":"2019-02-12 11:48:05.000000000","message":"Well, internal error is a bit ambiguous since both Ironic and JSON RPC have their own internal errors. We can change that, but I also don\u0027t think it makes any practical difference for us.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"663013fdb0f20183f2be3b0793eef0ebacd38d44","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class InvalidParams(JsonRpcError):"},{"line_number":81,"context_line":"    code \u003d -32602"},{"line_number":82,"context_line":"    _msg_fmt \u003d _(\"Params %(params)s are invalid for %(method)s: %(error)s\")"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class WSGIService(service.Service):"},{"line_number":86,"context_line":"    \"\"\"Provides ability to launch JSON RPC as a WSGI application.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_213db58e","line":83,"in_reply_to":"9fdfeff1_febc28dd","updated":"2019-02-12 11:19:09.000000000","message":"I don\u0027t think we ever return it, do we?","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"daf0f017acee052185c5aee38b879ac94cdb4ab7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.server \u003d wsgi.Server(CONF, \u0027ironic-json-rpc\u0027, app,"},{"line_number":98,"context_line":"                                  host\u003dCONF.json_rpc.host_ip,"},{"line_number":99,"context_line":"                                  port\u003dCONF.json_rpc.port,"},{"line_number":100,"context_line":"                                  use_ssl\u003dCONF.json_rpc.use_ssl)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _application(self, environment, start_response):"},{"line_number":103,"context_line":"        \"\"\"WSGI application for conductor JSON RPC.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_81268fcd","line":100,"updated":"2019-02-15 16:28:56.000000000","message":"How is the cert configured?","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ad0b9984ede47b0fa1c5f452c7279c5e89508117","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.server \u003d wsgi.Server(CONF, \u0027ironic-json-rpc\u0027, app,"},{"line_number":98,"context_line":"                                  host\u003dCONF.json_rpc.host_ip,"},{"line_number":99,"context_line":"                                  port\u003dCONF.json_rpc.port,"},{"line_number":100,"context_line":"                                  use_ssl\u003dCONF.json_rpc.use_ssl)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _application(self, environment, start_response):"},{"line_number":103,"context_line":"        \"\"\"WSGI application for conductor JSON RPC.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_d783f5c9","line":100,"in_reply_to":"9fdfeff1_81268fcd","updated":"2019-02-15 16:33:35.000000000","message":"Via oslo.service options: https://github.com/openstack/oslo.service/blob/master/oslo_service/_options.py#L92-L118. Disclaimer: I haven\u0027t tried it.","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"0509643692f4ad90d69b194c89dd794b8b60cb39","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.server \u003d wsgi.Server(CONF, \u0027ironic-json-rpc\u0027, app,"},{"line_number":98,"context_line":"                                  host\u003dCONF.json_rpc.host_ip,"},{"line_number":99,"context_line":"                                  port\u003dCONF.json_rpc.port,"},{"line_number":100,"context_line":"                                  use_ssl\u003dCONF.json_rpc.use_ssl)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _application(self, environment, start_response):"},{"line_number":103,"context_line":"        \"\"\"WSGI application for conductor JSON RPC.\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_539f184f","line":100,"in_reply_to":"9fdfeff1_d783f5c9","updated":"2019-02-15 17:09:32.000000000","message":"Makes sense. Thanks.","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"daf0f017acee052185c5aee38b879ac94cdb4ab7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                environment, start_response)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if json_rpc.require_authentication():"},{"line_number":112,"context_line":"            roles \u003d (request.headers.get(\u0027X-Roles\u0027) or \u0027\u0027).split(\u0027,\u0027)"},{"line_number":113,"context_line":"            if \u0027admin\u0027 not in roles:"},{"line_number":114,"context_line":"                LOG.debug(\u0027Roles %s do not contain \"admin\", rejecting \u0027"},{"line_number":115,"context_line":"                          \u0027request\u0027, roles)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_7c3d4ec2","line":112,"updated":"2019-02-15 16:28:56.000000000","message":"Just to be sure, this is set by the keystone middleware, right?","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ad0b9984ede47b0fa1c5f452c7279c5e89508117","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                environment, start_response)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if json_rpc.require_authentication():"},{"line_number":112,"context_line":"            roles \u003d (request.headers.get(\u0027X-Roles\u0027) or \u0027\u0027).split(\u0027,\u0027)"},{"line_number":113,"context_line":"            if \u0027admin\u0027 not in roles:"},{"line_number":114,"context_line":"                LOG.debug(\u0027Roles %s do not contain \"admin\", rejecting \u0027"},{"line_number":115,"context_line":"                          \u0027request\u0027, roles)"}],"source_content_type":"text/x-python","patch_set":26,"id":"9fdfeff1_776ec92f","line":112,"in_reply_to":"9fdfeff1_7c3d4ec2","updated":"2019-02-15 16:33:35.000000000","message":"Yeah. This code was cargo-culted from ironic-inspector.","commit_id":"7efbbcc2d9460c087f0950fa1fbb8a9e015d5584"}],"ironic/common/rpc_service.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        admin_context \u003d context.get_admin_context()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        serializer \u003d objects_base.IronicObjectSerializer(is_server\u003dTrue)"},{"line_number":51,"context_line":"        if CONF.rpc_transport \u003d\u003d \u0027json-rpc\u0027:"},{"line_number":52,"context_line":"            self.rpcserver \u003d json_rpc.WSGIService(self.manager,"},{"line_number":53,"context_line":"                                                  serializer)"},{"line_number":54,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_fab9e2e8","line":51,"updated":"2019-02-07 01:01:26.000000000","message":"note: this makes sense to me, since we\u0027ve still got the dependency on messaging for metrics and all.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"}],"ironic/conf/default.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9430c99da92d14541b063e1584daab3f36704359","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                      \u0027When doing a rolling upgrade from version N to version \u0027"},{"line_number":300,"context_line":"                      \u0027N+1, set (to pin) this to N. To unpin (default), leave \u0027"},{"line_number":301,"context_line":"                      \u0027it unset and the latest versions will be used.\u0027)),"},{"line_number":302,"context_line":"    cfg.BoolOpt(\u0027use_json_rpc\u0027,"},{"line_number":303,"context_line":"                default\u003dFalse,"},{"line_number":304,"context_line":"                help\u003d_(\u0027Use JSON RPC instead of oslo.messaging transport \u0027"},{"line_number":305,"context_line":"                       \u0027between API and conductor processes\u0027)),"},{"line_number":306,"context_line":"]"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"utils_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":14,"id":"9fdfeff1_ddcd9c66","line":305,"range":{"start_line":302,"start_character":4,"end_line":305,"end_character":63},"updated":"2019-01-28 20:50:27.000000000","message":"Would it be better to implement the option as \u0027rpc_transport\u0027? Default it to \u0027oslo.messaging\u0027 and other options are \u0027json_rpc\u0027? (In case someone down the line figures a third transport would make sense we would\u0027t need another option.)","commit_id":"97c03ff46bacb26be1b68be13082eacc3ce97887"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"51661519502da3ec01ee2274e71e45dc98ae9c4c","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                      \u0027it unset and the latest versions will be used.\u0027)),"},{"line_number":318,"context_line":"    cfg.StrOpt(\u0027rpc_transport\u0027,"},{"line_number":319,"context_line":"               default\u003d\u0027oslo\u0027,"},{"line_number":320,"context_line":"               choices\u003d[(\u0027oslo\u0027, _(\u0027use oslo.messaging transport\u0027)),"},{"line_number":321,"context_line":"                        (\u0027json-rpc\u0027, _(\u0027use JSON RPC transport\u0027))],"},{"line_number":322,"context_line":"               help\u003d_(\u0027Which RPC transport implementation to use between \u0027"},{"line_number":323,"context_line":"                      \u0027conductor and API services\u0027)),"}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_8afe0d36","line":320,"updated":"2019-02-11 15:53:38.000000000","message":"do we think that oslo will ever support something other than messaging? Wondering if we might want the default to be \u0027oslo-messaging\u0027 just in case.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"30e25253a5d14c670b099a5ac214c4d7f2845553","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                      \u0027it unset and the latest versions will be used.\u0027)),"},{"line_number":318,"context_line":"    cfg.StrOpt(\u0027rpc_transport\u0027,"},{"line_number":319,"context_line":"               default\u003d\u0027oslo\u0027,"},{"line_number":320,"context_line":"               choices\u003d[(\u0027oslo\u0027, _(\u0027use oslo.messaging transport\u0027)),"},{"line_number":321,"context_line":"                        (\u0027json-rpc\u0027, _(\u0027use JSON RPC transport\u0027))],"},{"line_number":322,"context_line":"               help\u003d_(\u0027Which RPC transport implementation to use between \u0027"},{"line_number":323,"context_line":"                      \u0027conductor and API services\u0027)),"}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_aa13d165","line":320,"in_reply_to":"9fdfeff1_8afe0d36","updated":"2019-02-11 15:58:36.000000000","message":"I truly hope the oslo team does not come up with a competing messaging implementation :D","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":320,"context_line":"               choices\u003d[(\u0027oslo\u0027, _(\u0027use oslo.messaging transport\u0027)),"},{"line_number":321,"context_line":"                        (\u0027json-rpc\u0027, _(\u0027use JSON RPC transport\u0027))],"},{"line_number":322,"context_line":"               help\u003d_(\u0027Which RPC transport implementation to use between \u0027"},{"line_number":323,"context_line":"                      \u0027conductor and API services\u0027)),"},{"line_number":324,"context_line":"]"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"utils_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_3a8e8a2e","line":323,"range":{"start_line":323,"start_character":49,"end_line":323,"end_character":50},"updated":"2019-02-07 01:01:26.000000000","message":"If a follow-up or next revision, we\u0027re missing a period.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"}],"ironic/conf/json_rpc.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"3f461a781e3b7f2f1632f4112741ce9cbe8d5b61","unresolved":false,"context_lines":[{"line_number":17,"context_line":"opts \u003d ["},{"line_number":18,"context_line":"    cfg.BoolOpt(\u0027enabled\u0027,"},{"line_number":19,"context_line":"                default\u003dFalse,"},{"line_number":20,"context_line":"                help\u003d_(\u0027Whether to use JSON RPC instead of oslo.messaging\u0027)),"},{"line_number":21,"context_line":"    cfg.PortOpt(\u0027port\u0027,"},{"line_number":22,"context_line":"                default\u003d8089,"},{"line_number":23,"context_line":"                help\u003d_(\u0027The port to use for JSON-RPC\u0027)),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9fdfeff1_fa818bfc","line":20,"range":{"start_line":20,"start_character":35,"end_line":20,"end_character":38},"updated":"2019-01-28 16:00:56.000000000","message":"nit: the purpose of RPC is not quite clear from this help message.","commit_id":"782872e999f87738add0f59bb19fe1779771055e"}],"ironic/tests/unit/common/test_json_rpc.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0608383e420bd12571162dad036df45f94e74459","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        body \u003d self._request(\u0027banana\u0027, {\u0027context\u0027: self.ctx})"},{"line_number":232,"context_line":"        self._check(body,"},{"line_number":233,"context_line":"                    error\u003d{"},{"line_number":234,"context_line":"                        \u0027message\u0027: \u0027Method banana was not found\u0027,"},{"line_number":235,"context_line":"                        \u0027code\u0027: -32601,"},{"line_number":236,"context_line":"                    })"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9fdfeff1_3abc4aba","line":234,"range":{"start_line":234,"start_character":43,"end_line":234,"end_character":50},"updated":"2019-02-07 01:01:26.000000000","message":"Oh noes! What will the minions do!?!? \u003c-- This may be a sign I need to leave the computer for the day.","commit_id":"6a73a9100d68c5963a7053efd3bc1574ff2a29bf"}]}
