)]}'
{"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e2ff8b613f0ce9f59257a5a5c9b07d28d6ab6ad9","unresolved":false,"context_lines":[{"line_number":644,"context_line":"def parse_instance_info_capabilities(node):"},{"line_number":645,"context_line":"    \"\"\"Parse the instance_info capabilities."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    These capabilities are defined in in the Flavor extra_spec and passed"},{"line_number":648,"context_line":"    to Ironic by the Nova Ironic driver."},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"    NOTE: Although our API fully supports JSON fields, to maintain the"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c1efd885","line":647,"updated":"2015-02-03 16:48:02.000000000","message":"s/in in/in/","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"61d9bf9424ade9d64cbb61172839277868f568c4","unresolved":false,"context_lines":[{"line_number":644,"context_line":"def parse_instance_info_capabilities(node):"},{"line_number":645,"context_line":"    \"\"\"Parse the instance_info capabilities."},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    These capabilities are defined in in the Flavor extra_spec and passed"},{"line_number":648,"context_line":"    to Ironic by the Nova Ironic driver."},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"    NOTE: Although our API fully supports JSON fields, to maintain the"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_043d7ede","line":647,"in_reply_to":"da86d52c_c1efd885","updated":"2015-02-04 10:34:57.000000000","message":"Done","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"feae86bef53124fb4d9d37f7763087e03eca3e73","unresolved":false,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"    NOTE: Although our API fully supports JSON fields, to maintain the"},{"line_number":653,"context_line":"    backward compatibility with Juno the Nova Ironic driver is sending"},{"line_number":654,"context_line":"    it as a string."},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    :param node: a single Node."},{"line_number":657,"context_line":"    :raises: InvalidParameterValue if the capabilities string is not a"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_616a88b4","line":654,"updated":"2015-02-04 11:44:28.000000000","message":"Let us support both, so that we can update in the future (easier for users too)","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"3175bd366bbf83cb2f16d5e196339ad8816c2cdd","unresolved":false,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"    NOTE: Although our API fully supports JSON fields, to maintain the"},{"line_number":653,"context_line":"    backward compatibility with Juno the Nova Ironic driver is sending"},{"line_number":654,"context_line":"    it as a string."},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    :param node: a single Node."},{"line_number":657,"context_line":"    :raises: InvalidParameterValue if the capabilities string is not a"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_a96c6236","line":654,"in_reply_to":"da86d52c_616a88b4","updated":"2015-02-04 13:52:01.000000000","message":"Sure, ok I will put a patch up supporting both","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ccdebbb0d5d99f6e498f4fc3370d0843ea7ffbe","unresolved":false,"context_lines":[{"line_number":668,"context_line":"                           \"instance_info field. A dictionary string \""},{"line_number":669,"context_line":"                           \"is expected.\") % node.uuid)"},{"line_number":670,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    return capabilities"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_708ce6da","line":671,"updated":"2015-02-05 11:47:05.000000000","message":"it makes sense to me to raise exception if we get non-dict here","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":668,"context_line":"                           \"instance_info field. A dictionary string \""},{"line_number":669,"context_line":"                           \"is expected.\") % node.uuid)"},{"line_number":670,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    return capabilities"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_0feb7b78","line":671,"in_reply_to":"da86d52c_708ce6da","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    def parse_error():"},{"line_number":701,"context_line":"        error_msg \u003d (_(\"Error parsing capabilities from Node %s instance_info \""},{"line_number":702,"context_line":"                       \"field. A dictionary or a dictionary  string is \""},{"line_number":703,"context_line":"                       \"expected.\") % node.uuid)"},{"line_number":704,"context_line":"        raise exception.InvalidParameterValue(error_msg)"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_7847044c","line":702,"updated":"2015-02-09 11:11:39.000000000","message":"nit: redundant space before \u0027string\u0027","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    def parse_error():"},{"line_number":701,"context_line":"        error_msg \u003d (_(\"Error parsing capabilities from Node %s instance_info \""},{"line_number":702,"context_line":"                       \"field. A dictionary or a dictionary  string is \""},{"line_number":703,"context_line":"                       \"expected.\") % node.uuid)"},{"line_number":704,"context_line":"        raise exception.InvalidParameterValue(error_msg)"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_38210cb5","line":702,"in_reply_to":"da86d52c_7847044c","updated":"2015-02-09 11:21:18.000000000","message":"Done","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9bcd9e629aa90a63ca0b67406c11fbead14d88e0","unresolved":false,"context_lines":[{"line_number":684,"context_line":"    \"\"\"Parse the instance_info capabilities."},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    These capabilities are defined in the Flavor extra_spec and passed"},{"line_number":687,"context_line":"    to Ironic by the Nova Ironic driver."},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    NOTE: Although our API fully supports JSON fields, to maintain the"},{"line_number":690,"context_line":"    backward compatibility with Juno the Nova Ironic driver is sending"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_15e12afe","line":687,"updated":"2015-02-10 17:22:01.000000000","message":"nit: I would probably rephrase this like \u0027One way of having these capabilities set is via Nova, where the capabilities are defined ...","commit_id":"a4cf7149fb150519b15f8c0bb8a6a407535c52cd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"69c9924998fb296713e8a572897128fd1e331343","unresolved":false,"context_lines":[{"line_number":684,"context_line":"    \"\"\"Parse the instance_info capabilities."},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    These capabilities are defined in the Flavor extra_spec and passed"},{"line_number":687,"context_line":"    to Ironic by the Nova Ironic driver."},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    NOTE: Although our API fully supports JSON fields, to maintain the"},{"line_number":690,"context_line":"    backward compatibility with Juno the Nova Ironic driver is sending"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_7bcbd471","line":687,"in_reply_to":"da86d52c_15e12afe","updated":"2015-02-12 15:15:08.000000000","message":"+1 I will update it if happens to me to submit a new patch set","commit_id":"a4cf7149fb150519b15f8c0bb8a6a407535c52cd"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9bcd9e629aa90a63ca0b67406c11fbead14d88e0","unresolved":false,"context_lines":[{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    def parse_error():"},{"line_number":701,"context_line":"        error_msg \u003d (_(\"Error parsing capabilities from Node %s instance_info \""},{"line_number":702,"context_line":"                       \"field. A dictionary or a dictionary string is \""},{"line_number":703,"context_line":"                       \"expected.\") % node.uuid)"},{"line_number":704,"context_line":"        raise exception.InvalidParameterValue(error_msg)"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_b0606c36","line":702,"updated":"2015-02-10 17:22:01.000000000","message":"\u0027dictionary string\u0027 would be str(dict)? But we\u0027re expecting a JSON string?","commit_id":"a4cf7149fb150519b15f8c0bb8a6a407535c52cd"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"69c9924998fb296713e8a572897128fd1e331343","unresolved":false,"context_lines":[{"line_number":699,"context_line":""},{"line_number":700,"context_line":"    def parse_error():"},{"line_number":701,"context_line":"        error_msg \u003d (_(\"Error parsing capabilities from Node %s instance_info \""},{"line_number":702,"context_line":"                       \"field. A dictionary or a dictionary string is \""},{"line_number":703,"context_line":"                       \"expected.\") % node.uuid)"},{"line_number":704,"context_line":"        raise exception.InvalidParameterValue(error_msg)"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_1bb3b80a","line":702,"in_reply_to":"da86d52c_b0606c36","updated":"2015-02-12 15:15:08.000000000","message":"Hmm... yeah it\u0027s a JSON string, json.dumps(dict)... which results in a dictionary string. But anyway, I may need to be more specific here, if it happens to me to submit a new patch-set I will update this to say JSON string.","commit_id":"a4cf7149fb150519b15f8c0bb8a6a407535c52cd"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"6b571ce433b9ca478b8b2f2d3871cb2d20e938ae","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                if driver_utils.get_node_capability(node,"},{"line_number":506,"context_line":"                                                    \u0027boot_mode\u0027) \u003d\u003d \u0027uefi\u0027:"},{"line_number":507,"context_line":"                    LOG.warning(_LW(\"ipmitool is unable to set boot device \""},{"line_number":508,"context_line":"                                    \"while the node is in UEFI boot mode.\""},{"line_number":509,"context_line":"                                    \"Please set the boot device manually.\"))"},{"line_number":510,"context_line":"                else:"},{"line_number":511,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_0111f004","line":508,"updated":"2015-02-03 16:32:15.000000000","message":"nit - space is missing at the end.","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"61d9bf9424ade9d64cbb61172839277868f568c4","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                if driver_utils.get_node_capability(node,"},{"line_number":506,"context_line":"                                                    \u0027boot_mode\u0027) \u003d\u003d \u0027uefi\u0027:"},{"line_number":507,"context_line":"                    LOG.warning(_LW(\"ipmitool is unable to set boot device \""},{"line_number":508,"context_line":"                                    \"while the node is in UEFI boot mode.\""},{"line_number":509,"context_line":"                                    \"Please set the boot device manually.\"))"},{"line_number":510,"context_line":"                else:"},{"line_number":511,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_a42bd292","line":508,"in_reply_to":"da86d52c_0111f004","updated":"2015-02-04 10:34:57.000000000","message":"Done","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e2ff8b613f0ce9f59257a5a5c9b07d28d6ab6ad9","unresolved":false,"context_lines":[{"line_number":514,"context_line":"            # the PXE configuration files used for the deployment"},{"line_number":515,"context_line":"            pxe_utils.clean_up_pxe_config(task)"},{"line_number":516,"context_line":"        else:"},{"line_number":517,"context_line":"            pxe_config_path \u003d pxe_utils.get_pxe_config_file_path(node.uuid)"},{"line_number":518,"context_line":"            deploy_utils.switch_pxe_config(pxe_config_path, root_uuid,"},{"line_number":519,"context_line":"                driver_utils.get_node_capability(node, \u0027boot_mode\u0027))"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_e43b0a9a","line":517,"updated":"2015-02-03 16:48:02.000000000","message":"Is it okay that these lines are no longer inside a try loop?","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"61d9bf9424ade9d64cbb61172839277868f568c4","unresolved":false,"context_lines":[{"line_number":514,"context_line":"            # the PXE configuration files used for the deployment"},{"line_number":515,"context_line":"            pxe_utils.clean_up_pxe_config(task)"},{"line_number":516,"context_line":"        else:"},{"line_number":517,"context_line":"            pxe_config_path \u003d pxe_utils.get_pxe_config_file_path(node.uuid)"},{"line_number":518,"context_line":"            deploy_utils.switch_pxe_config(pxe_config_path, root_uuid,"},{"line_number":519,"context_line":"                driver_utils.get_node_capability(node, \u0027boot_mode\u0027))"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_8f30a7e9","line":517,"in_reply_to":"da86d52c_e43b0a9a","updated":"2015-02-04 10:34:57.000000000","message":"oh good catch, I will re-add it","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"569c523ef1bfbe26f63b16a6781eb0095a08514d","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        :param kwargs: kwargs containins the method\u0027s parameters."},{"line_number":468,"context_line":"        :raises: InvalidParameterValue if any parameters is invalid."},{"line_number":469,"context_line":"        \"\"\""},{"line_number":470,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":471,"context_line":"        iscsi_deploy.get_deploy_info(task.node, **kwargs)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    @base.passthru([\u0027POST\u0027], method\u003d\u0027pass_deploy_info\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_49b3e609","line":470,"updated":"2015-02-04 13:52:19.000000000","message":"Capability can be changed after deploy is trigerred?","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"676dae5681db706a89a5477fd4cb23bfc3097989","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        :param kwargs: kwargs containins the method\u0027s parameters."},{"line_number":468,"context_line":"        :raises: InvalidParameterValue if any parameters is invalid."},{"line_number":469,"context_line":"        \"\"\""},{"line_number":470,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":471,"context_line":"        iscsi_deploy.get_deploy_info(task.node, **kwargs)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    @base.passthru([\u0027POST\u0027], method\u003d\u0027pass_deploy_info\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_8723e2bb","line":470,"in_reply_to":"da86d52c_49b3e609","updated":"2015-02-05 10:19:08.000000000","message":"Yes, right now we don\u0027t prevent any updates on the node.properties based on the current provision_state of a node, we already have a problem that you could update the amount of resources after the node is provision (say you increase the memory_mb) and that will count as available resources in Nova[1]\n\nNot sure that as part of this patch we should actually tackle that problem, we should definitely talk about it.\n\n[1] https://bugs.launchpad.net/nova/+bug/1301279","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"feae86bef53124fb4d9d37f7763087e03eca3e73","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                                        \"boot mode. Please set the boot \""},{"line_number":512,"context_line":"                                        \"device manually.\"))"},{"line_number":513,"context_line":"                    else:"},{"line_number":514,"context_line":"                        raise"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"                # If it\u0027s going to boot from the local disk, get rid of"},{"line_number":517,"context_line":"                # the PXE configuration files used for the deployment"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_c1b41437","line":514,"updated":"2015-02-04 11:44:28.000000000","message":"I guess this snippet is copied from somewhere? then I suggest making it a function try_set_boot_device(task, device)","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"3175bd366bbf83cb2f16d5e196339ad8816c2cdd","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                                        \"boot mode. Please set the boot \""},{"line_number":512,"context_line":"                                        \"device manually.\"))"},{"line_number":513,"context_line":"                    else:"},{"line_number":514,"context_line":"                        raise"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"                # If it\u0027s going to boot from the local disk, get rid of"},{"line_number":517,"context_line":"                # the PXE configuration files used for the deployment"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_09072e83","line":514,"in_reply_to":"da86d52c_c1b41437","updated":"2015-02-04 13:52:01.000000000","message":"Done","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fbec12d6ec8f14b5c76121b57c3d39bf2bc2f5df","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        if driver_utils.get_node_capability(task.node,"},{"line_number":295,"context_line":"                                            \u0027boot_mode\u0027) \u003d\u003d \u0027uefi\u0027:"},{"line_number":296,"context_line":"            LOG.warning(_LW(\"ipmitool is unable to set boot device while \""},{"line_number":297,"context_line":"                            \"the node is in UEFI boot mode.\""},{"line_number":298,"context_line":"                            \"Please set the boot device manually.\"))"},{"line_number":299,"context_line":"        else:"},{"line_number":300,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_b0f01eca","line":297,"updated":"2015-02-05 11:53:04.000000000","message":"nit - space is missing at the end.","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        if driver_utils.get_node_capability(task.node,"},{"line_number":295,"context_line":"                                            \u0027boot_mode\u0027) \u003d\u003d \u0027uefi\u0027:"},{"line_number":296,"context_line":"            LOG.warning(_LW(\"ipmitool is unable to set boot device while \""},{"line_number":297,"context_line":"                            \"the node is in UEFI boot mode.\""},{"line_number":298,"context_line":"                            \"Please set the boot device manually.\"))"},{"line_number":299,"context_line":"        else:"},{"line_number":300,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_af98af1c","line":297,"in_reply_to":"da86d52c_b0f01eca","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ccdebbb0d5d99f6e498f4fc3370d0843ea7ffbe","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        :raises: MissingParameterValue"},{"line_number":315,"context_line":"        \"\"\""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # Check the boot_mode and boot_option capabilities parameters values."},{"line_number":318,"context_line":"        driver_utils.validate_boot_mode_capability(task.node)"},{"line_number":319,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_106acaed","line":317,"updated":"2015-02-05 11:47:05.000000000","message":"maybe s/parameters//","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        :raises: MissingParameterValue"},{"line_number":315,"context_line":"        \"\"\""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # Check the boot_mode and boot_option capabilities parameters values."},{"line_number":318,"context_line":"        driver_utils.validate_boot_mode_capability(task.node)"},{"line_number":319,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_0fa29b4a","line":317,"in_reply_to":"da86d52c_106acaed","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fbec12d6ec8f14b5c76121b57c3d39bf2bc2f5df","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # Check the boot_mode and boot_option capabilities parameters values."},{"line_number":318,"context_line":"        driver_utils.validate_boot_mode_capability(task.node)"},{"line_number":319,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        if CONF.pxe.ipxe_enabled:"},{"line_number":322,"context_line":"            if not CONF.pxe.http_url or not CONF.pxe.http_root:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_fb3a7797","line":319,"updated":"2015-02-05 11:53:04.000000000","message":"This seems to be a nit, but maybe also add validation changes here and in VendorPassthru to tests?","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        # Check the boot_mode and boot_option capabilities parameters values."},{"line_number":318,"context_line":"        driver_utils.validate_boot_mode_capability(task.node)"},{"line_number":319,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        if CONF.pxe.ipxe_enabled:"},{"line_number":322,"context_line":"            if not CONF.pxe.http_url or not CONF.pxe.http_root:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_af1b4f7f","line":319,"in_reply_to":"da86d52c_fb3a7797","updated":"2015-02-05 15:51:42.000000000","message":"Will do","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fbec12d6ec8f14b5c76121b57c3d39bf2bc2f5df","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            # PXE config files. They still need to be generated as part"},{"line_number":450,"context_line":"            # of the prepare() because the deployment does PXE boot the"},{"line_number":451,"context_line":"            # deploy ramdisk"},{"line_number":452,"context_line":"            pxe_utils.clean_up_pxe_config(task)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class VendorPassthru(base.VendorInterface):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_3ba5ef03","line":452,"updated":"2015-02-05 11:53:04.000000000","message":"There is no test for this change.","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            # PXE config files. They still need to be generated as part"},{"line_number":450,"context_line":"            # of the prepare() because the deployment does PXE boot the"},{"line_number":451,"context_line":"            # deploy ramdisk"},{"line_number":452,"context_line":"            pxe_utils.clean_up_pxe_config(task)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class VendorPassthru(base.VendorInterface):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_cfc243e8","line":452,"in_reply_to":"da86d52c_3ba5ef03","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ccdebbb0d5d99f6e498f4fc3370d0843ea7ffbe","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            # not work for setting boot devices in UEFI mode for certain"},{"line_number":502,"context_line":"            # machines. Expected IPMI failure for uefi boot mode. Logging"},{"line_number":503,"context_line":"            # a message to set the boot device manually and continue"},{"line_number":504,"context_line":"            # with deploy."},{"line_number":505,"context_line":"            if _get_boot_option(node) \u003d\u003d \"local\":"},{"line_number":506,"context_line":"                try_set_boot_device(task, boot_devices.DISK)"},{"line_number":507,"context_line":"                # If it\u0027s going to boot from the local disk, get rid of"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_d052f233","line":504,"updated":"2015-02-05 11:47:05.000000000","message":"this comment is already included in try_set_boot_device, irrelevant here","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            # not work for setting boot devices in UEFI mode for certain"},{"line_number":502,"context_line":"            # machines. Expected IPMI failure for uefi boot mode. Logging"},{"line_number":503,"context_line":"            # a message to set the boot device manually and continue"},{"line_number":504,"context_line":"            # with deploy."},{"line_number":505,"context_line":"            if _get_boot_option(node) \u003d\u003d \"local\":"},{"line_number":506,"context_line":"                try_set_boot_device(task, boot_devices.DISK)"},{"line_number":507,"context_line":"                # If it\u0027s going to boot from the local disk, get rid of"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_6fa95723","line":504,"in_reply_to":"da86d52c_d052f233","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"db97e99503aa676da59ed4e6c75f7d432be889f9","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        \u0027ari_path\u0027: ramdisk,"},{"line_number":182,"context_line":"        \u0027pxe_append_params\u0027: CONF.pxe.pxe_append_params,"},{"line_number":183,"context_line":"        \u0027tftp_server\u0027: CONF.pxe.tftp_server,"},{"line_number":184,"context_line":"        \u0027boot_option\u0027: _get_boot_option(node),"},{"line_number":185,"context_line":"    }"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    deploy_ramdisk_options \u003d iscsi_deploy.build_deploy_ramdisk_options(node)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_99c0472c","line":184,"updated":"2015-02-09 05:17:46.000000000","message":"I think better to move setting of this parameter to to iscsi_deploy so that it can be used in ilo drivers (and other upcoming drivers like irmc) (https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ilo/deploy.py#L269) as well.","commit_id":"81b3f466c4016de59a173e007cde9fc15ee1610f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7050398f5d69e4ed3eef999f6c6e4c8f933ecd20","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        \u0027ari_path\u0027: ramdisk,"},{"line_number":182,"context_line":"        \u0027pxe_append_params\u0027: CONF.pxe.pxe_append_params,"},{"line_number":183,"context_line":"        \u0027tftp_server\u0027: CONF.pxe.tftp_server,"},{"line_number":184,"context_line":"        \u0027boot_option\u0027: _get_boot_option(node),"},{"line_number":185,"context_line":"    }"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    deploy_ramdisk_options \u003d iscsi_deploy.build_deploy_ramdisk_options(node)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_b1935f4e","line":184,"in_reply_to":"da86d52c_99c0472c","updated":"2015-02-09 10:02:47.000000000","message":"Done","commit_id":"81b3f466c4016de59a173e007cde9fc15ee1610f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    deploy_ramdisk_options \u003d iscsi_deploy.build_deploy_ramdisk_options(node)"},{"line_number":187,"context_line":"    pxe_options.update(deploy_ramdisk_options)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    return pxe_options"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_78b54430","line":188,"updated":"2015-02-09 11:11:39.000000000","message":"nit: these 2 changes are not related","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    deploy_ramdisk_options \u003d iscsi_deploy.build_deploy_ramdisk_options(node)"},{"line_number":187,"context_line":"    pxe_options.update(deploy_ramdisk_options)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    return pxe_options"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_98175854","line":188,"in_reply_to":"da86d52c_78b54430","updated":"2015-02-09 11:21:18.000000000","message":"Done","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                                            \u0027boot_mode\u0027) \u003d\u003d \u0027uefi\u0027:"},{"line_number":283,"context_line":"            LOG.warning(_LW(\"ipmitool is unable to set boot device while \""},{"line_number":284,"context_line":"                            \"the node is in UEFI boot mode. \""},{"line_number":285,"context_line":"                            \"Please set the boot device manually.\"))"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            raise"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_b886dc63","line":285,"updated":"2015-02-09 11:11:39.000000000","message":"as you touch this code, does it make sense to you to include node UUID into logging?","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                                            \u0027boot_mode\u0027) \u003d\u003d \u0027uefi\u0027:"},{"line_number":283,"context_line":"            LOG.warning(_LW(\"ipmitool is unable to set boot device while \""},{"line_number":284,"context_line":"                            \"the node is in UEFI boot mode. \""},{"line_number":285,"context_line":"                            \"Please set the boot device manually.\"))"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            raise"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_38082c2d","line":285,"in_reply_to":"da86d52c_b886dc63","updated":"2015-02-09 11:21:18.000000000","message":"Done","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # we do not support creating an EFI boot partition, including the"},{"line_number":314,"context_line":"        # EFI modules and managing the bootloader variables via efibootmgr."},{"line_number":315,"context_line":"        if boot_mode \u003d\u003d \u0027uefi\u0027 and boot_option \u003d\u003d \u0027local\u0027:"},{"line_number":316,"context_line":"            error_msg \u003d (_(\"Local boot is requested,  but can\u0027t be \""},{"line_number":317,"context_line":"                           \"used with node %s because it\u0027s configured \""},{"line_number":318,"context_line":"                           \"to use UEFI boot\") % node.uuid)"},{"line_number":319,"context_line":"            LOG.error(error_msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_f8f774f3","line":316,"updated":"2015-02-09 11:11:39.000000000","message":"nit: redundant space before \u0027but\u0027","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # we do not support creating an EFI boot partition, including the"},{"line_number":314,"context_line":"        # EFI modules and managing the bootloader variables via efibootmgr."},{"line_number":315,"context_line":"        if boot_mode \u003d\u003d \u0027uefi\u0027 and boot_option \u003d\u003d \u0027local\u0027:"},{"line_number":316,"context_line":"            error_msg \u003d (_(\"Local boot is requested,  but can\u0027t be \""},{"line_number":317,"context_line":"                           \"used with node %s because it\u0027s configured \""},{"line_number":318,"context_line":"                           \"to use UEFI boot\") % node.uuid)"},{"line_number":319,"context_line":"            LOG.error(error_msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_7802a40c","line":316,"in_reply_to":"da86d52c_f8f774f3","updated":"2015-02-09 11:21:18.000000000","message":"Done","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            pxe_config_template \u003d CONF.pxe.pxe_config_template"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":411,"context_line":"                                    pxe_config_template)"},{"line_number":412,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_98a038a7","line":411,"updated":"2015-02-09 11:11:39.000000000","message":"I suspect we can skip this step when local booting...","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"34e7784ced1231f0c19e5bea66599855bce8cc1a","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            pxe_config_template \u003d CONF.pxe.pxe_config_template"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":411,"context_line":"                                    pxe_config_template)"},{"line_number":412,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_731647f3","line":411,"in_reply_to":"da86d52c_93257bb0","updated":"2015-02-09 11:26:38.000000000","message":"I\u0027m sorry, I meant the step below, line #412","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            pxe_config_template \u003d CONF.pxe.pxe_config_template"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":411,"context_line":"                                    pxe_config_template)"},{"line_number":412,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_93257bb0","line":411,"in_reply_to":"da86d52c_98a038a7","updated":"2015-02-09 11:21:18.000000000","message":"We need it because the deploy phase still PXE boot the node, so we need to generate the PXE config for the deploy ramdisk/kernel","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        :param kwargs: kwargs containins the method\u0027s parameters."},{"line_number":471,"context_line":"        :raises: InvalidParameterValue if any parameters is invalid."},{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":474,"context_line":"        iscsi_deploy.get_deploy_info(task.node, **kwargs)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    @base.passthru([\u0027POST\u0027], method\u003d\u0027pass_deploy_info\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_b8d7bc22","line":473,"updated":"2015-02-09 11:11:39.000000000","message":"do we really need it? only _continue_deploy uses this cap and we assume that it was checked during deploy","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        :param kwargs: kwargs containins the method\u0027s parameters."},{"line_number":471,"context_line":"        :raises: InvalidParameterValue if any parameters is invalid."},{"line_number":472,"context_line":"        \"\"\""},{"line_number":473,"context_line":"        driver_utils.validate_boot_option_capability(task.node)"},{"line_number":474,"context_line":"        iscsi_deploy.get_deploy_info(task.node, **kwargs)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    @base.passthru([\u0027POST\u0027], method\u003d\u0027pass_deploy_info\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_d3a4530a","line":473,"in_reply_to":"da86d52c_b8d7bc22","updated":"2015-02-09 11:21:18.000000000","message":"Maybe it\u0027s over precaution, but, I prefer to think that interfaces should validate their values independently, even tho today\u0027s we have dependencies between interfaces (Just like between this one and the PXEDeploy one)","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e068aa2d117a4fa5d8eeda995220ea1bda99b19c","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            pxe_config_template \u003d CONF.pxe.pxe_config_template"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":410,"context_line":"                                    pxe_config_template)"},{"line_number":411,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_f3b877e7","line":410,"updated":"2015-02-09 11:27:29.000000000","message":"I meant that this line probably can be dropped, sorry for confusion","commit_id":"6e2c01714d4035071a5f265322f4c7d10ed9623d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ad16a395e3e52d3864f44d2b865e9ab7c1e51adf","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        # NOTE(lucasagomes): If it\u0027s local boot do not cache the image"},{"line_number":413,"context_line":"        # kernel and ramdisk."},{"line_number":414,"context_line":"        if iscsi_deploy.get_boot_option(task.node) !\u003d \"local\":"},{"line_number":415,"context_line":"            _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def clean_up(self, task):"},{"line_number":418,"context_line":"        \"\"\"Clean up the deployment environment for the task\u0027s node."}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_32f83fe5","line":415,"updated":"2015-02-09 15:35:15.000000000","message":"This is needed, the _cache_ramdisk_kernel function fetch both, image kernel and ramdisk and also deploy kernel and ramdisk images.\n\nref: https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/pxe.py#L230\n\nI will add a note to split it later.","commit_id":"39aca778fa3f7ec37f4b3721ff45a7f47f04b42f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"727410673dd0bf237caad9cb9a411f4e7d5446d1","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        # NOTE(lucasagomes): If it\u0027s local boot do not cache the image"},{"line_number":413,"context_line":"        # kernel and ramdisk."},{"line_number":414,"context_line":"        if iscsi_deploy.get_boot_option(task.node) !\u003d \"local\":"},{"line_number":415,"context_line":"            _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    def clean_up(self, task):"},{"line_number":418,"context_line":"        \"\"\"Clean up the deployment environment for the task\u0027s node."}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_b2542f22","line":415,"in_reply_to":"da86d52c_32f83fe5","updated":"2015-02-09 15:47:02.000000000","message":"ack, sorry for confusion.","commit_id":"39aca778fa3f7ec37f4b3721ff45a7f47f04b42f"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"da3d5a000dbc2ce109776ad56ec69a398e68f154","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    def take_over(self, task):"},{"line_number":445,"context_line":"        dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":446,"context_line":"        provider \u003d dhcp_factory.DHCPFactory()"},{"line_number":447,"context_line":"        provider.update_dhcp(task, dhcp_opts)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if iscsi_deploy.get_boot_option(task.node) \u003d\u003d \"local\":"},{"line_number":450,"context_line":"            # If it\u0027s going to boot from the local disk, we don\u0027t need"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_9b47a8bb","line":447,"updated":"2015-02-12 15:17:42.000000000","message":"Can probably just skip this stuff if it\u0027s local, instead of making the config and then cleaning it up again... though I wonder if the instance won\u0027t dhcp correctly then. Good thing to try and do a follow up patch for.","commit_id":"a4cf7149fb150519b15f8c0bb8a6a407535c52cd"}],"ironic/drivers/utils.py":[{"author":{"_account_id":11278,"name":"Anusha Ramineni","email":"anusha.ramineni@india.nec.com","username":"anusha08"},"change_message_id":"18496d35992542416375b3ac8002c866de88cdab","unresolved":false,"context_lines":[{"line_number":238,"context_line":"             other than \u0027local\u0027 or \u0027netboot\u0027 or None."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    \"\"\""},{"line_number":241,"context_line":"    validate_capability(node, \u0027boot_option\u0027, [\u0027local\u0027, \u0027netboot\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_9c247eb0","line":241,"updated":"2015-02-03 08:53:41.000000000","message":"can\u0027t the validation be done as part of parse_instance_info_capabilities() only , as we do validation checks in parse_driver_info/parse_instance_info instead of having multiple validation statements.","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"61d9bf9424ade9d64cbb61172839277868f568c4","unresolved":false,"context_lines":[{"line_number":238,"context_line":"             other than \u0027local\u0027 or \u0027netboot\u0027 or None."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    \"\"\""},{"line_number":241,"context_line":"    validate_capability(node, \u0027boot_option\u0027, [\u0027local\u0027, \u0027netboot\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_d04944b8","line":241,"in_reply_to":"da86d52c_9c247eb0","updated":"2015-02-04 10:34:57.000000000","message":"Two reasons to not do that:\n\n1- This method is actually validating the option that the operator added to the node.properties[\u0027capabilities\u0027]. And this is prior to triggering deploy(). If we only validate it in the instance_info[\u0027capabilities\u0027] we can only validate the option after the deploy() have been invoked.\n\n2- I want to remove that parse_instance_info_capabilities(). The only reason why we have it is because we want to maintain backwards compatibility with the old API that only accepted strings and ints.\n\nSo, right now, our API is capable of receiving a json and validating it\u0027s sytanx, so we could just make Nova to send us a json instead of a string on the next cycle and complete remove parse_instance_info_capabilities().","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"feae86bef53124fb4d9d37f7763087e03eca3e73","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        expected values."},{"line_number":210,"context_line":"    \"\"\""},{"line_number":211,"context_line":"    if not valid_values:"},{"line_number":212,"context_line":"        valid_values \u003d []"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    value \u003d get_node_capability(node, capability_name)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_41802446","line":212,"updated":"2015-02-04 11:44:28.000000000","message":"what\u0027s the point of this default? capability with valid values at all? I think valid_values should be mandatory argument","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"569c523ef1bfbe26f63b16a6781eb0095a08514d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        expected values."},{"line_number":210,"context_line":"    \"\"\""},{"line_number":211,"context_line":"    if not valid_values:"},{"line_number":212,"context_line":"        valid_values \u003d []"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    value \u003d get_node_capability(node, capability_name)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_49e686e9","line":212,"in_reply_to":"da86d52c_41802446","updated":"2015-02-04 13:52:19.000000000","message":"+1","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"3175bd366bbf83cb2f16d5e196339ad8816c2cdd","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        expected values."},{"line_number":210,"context_line":"    \"\"\""},{"line_number":211,"context_line":"    if not valid_values:"},{"line_number":212,"context_line":"        valid_values \u003d []"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    value \u003d get_node_capability(node, capability_name)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_c918b620","line":212,"in_reply_to":"da86d52c_41802446","updated":"2015-02-04 13:52:01.000000000","message":"Done","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"569c523ef1bfbe26f63b16a6781eb0095a08514d","unresolved":false,"context_lines":[{"line_number":227,"context_line":"             other than \u0027bios\u0027 or \u0027uefi\u0027 or None."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    \"\"\""},{"line_number":230,"context_line":"    validate_capability(node, \u0027boot_mode\u0027, [\u0027bios\u0027, \u0027uefi\u0027])"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def validate_boot_option_capability(node):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_69398a40","line":230,"updated":"2015-02-04 13:52:19.000000000","message":"IMO better to use tuple here (\u0027bios\u0027, \u0027uefi\u0027).","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"676dae5681db706a89a5477fd4cb23bfc3097989","unresolved":false,"context_lines":[{"line_number":227,"context_line":"             other than \u0027bios\u0027 or \u0027uefi\u0027 or None."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    \"\"\""},{"line_number":230,"context_line":"    validate_capability(node, \u0027boot_mode\u0027, [\u0027bios\u0027, \u0027uefi\u0027])"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def validate_boot_option_capability(node):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_27123662","line":230,"in_reply_to":"da86d52c_69398a40","updated":"2015-02-05 10:19:08.000000000","message":"Done","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"569c523ef1bfbe26f63b16a6781eb0095a08514d","unresolved":false,"context_lines":[{"line_number":238,"context_line":"             other than \u0027local\u0027 or \u0027netboot\u0027 or None."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    \"\"\""},{"line_number":241,"context_line":"    validate_capability(node, \u0027boot_option\u0027, [\u0027local\u0027, \u0027netboot\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_6910aaa8","line":241,"updated":"2015-02-04 13:52:19.000000000","message":"ditto","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"676dae5681db706a89a5477fd4cb23bfc3097989","unresolved":false,"context_lines":[{"line_number":238,"context_line":"             other than \u0027local\u0027 or \u0027netboot\u0027 or None."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    \"\"\""},{"line_number":241,"context_line":"    validate_capability(node, \u0027boot_option\u0027, [\u0027local\u0027, \u0027netboot\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_670fce37","line":241,"in_reply_to":"da86d52c_6910aaa8","updated":"2015-02-05 10:19:08.000000000","message":"Done","commit_id":"c54400744d107488df332196dad42f184e84a8b0"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fbec12d6ec8f14b5c76121b57c3d39bf2bc2f5df","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    :param node: an ironic node object."},{"line_number":205,"context_line":"    :param capability_name: the name of the capability."},{"line_number":206,"context_line":"    :parameter valid_values: a list with valid values expected for"},{"line_number":207,"context_line":"        that capability."},{"line_number":208,"context_line":"    :raises: InvalidParameterValue, if the capability is not set to the"},{"line_number":209,"context_line":"        expected values."}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_d099127a","line":206,"updated":"2015-02-05 11:53:04.000000000","message":"Should it be \u0027an iterable\u0027 now?","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    :param node: an ironic node object."},{"line_number":205,"context_line":"    :param capability_name: the name of the capability."},{"line_number":206,"context_line":"    :parameter valid_values: a list with valid values expected for"},{"line_number":207,"context_line":"        that capability."},{"line_number":208,"context_line":"    :raises: InvalidParameterValue, if the capability is not set to the"},{"line_number":209,"context_line":"        expected values."}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_2f0f5f38","line":206,"in_reply_to":"da86d52c_d099127a","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ccdebbb0d5d99f6e498f4fc3370d0843ea7ffbe","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def validate_boot_mode_capability(node):"},{"line_number":220,"context_line":"    \"\"\"Validate the boot_mode capability set in node property."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    :param node: an ironic node object."},{"line_number":223,"context_line":"    :raises: InvalidParameterValue, if \u0027boot_mode\u0027 capability is set"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_b02e5ea3","line":220,"updated":"2015-02-05 11:47:05.000000000","message":"maybe s/property/properties/","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def validate_boot_mode_capability(node):"},{"line_number":220,"context_line":"    \"\"\"Validate the boot_mode capability set in node property."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    :param node: an ironic node object."},{"line_number":223,"context_line":"    :raises: InvalidParameterValue, if \u0027boot_mode\u0027 capability is set"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_4f0ad326","line":220,"in_reply_to":"da86d52c_b02e5ea3","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ccdebbb0d5d99f6e498f4fc3370d0843ea7ffbe","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"def validate_boot_option_capability(node):"},{"line_number":231,"context_line":"    \"\"\"Validate the boot_option capability set in node property."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    :param node: an ironic node object."},{"line_number":234,"context_line":"    :raises: InvalidParameterValue, if \u0027boot_option\u0027 capability is set"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_d029129c","line":231,"updated":"2015-02-05 11:47:05.000000000","message":"ditto","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"def validate_boot_option_capability(node):"},{"line_number":231,"context_line":"    \"\"\"Validate the boot_option capability set in node property."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    :param node: an ironic node object."},{"line_number":234,"context_line":"    :raises: InvalidParameterValue, if \u0027boot_option\u0027 capability is set"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_8f004b03","line":231,"in_reply_to":"da86d52c_d029129c","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7ade13267c948000921dccf3e88d635d4b7a19cf","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    if value and value not in valid_values:"},{"line_number":214,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":215,"context_line":"            _(\"Invalid %(capability)s parameter \u0027%(value)s\u0027.\") %"},{"line_number":216,"context_line":"            {\u0027capability\u0027: capability_name, \u0027value\u0027: value})"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_98b598d2","line":215,"updated":"2015-02-09 11:11:39.000000000","message":"it would be very nice to include valid values into message","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"625ee133bac2220fe3145190b3c108afe4967081","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    if value and value not in valid_values:"},{"line_number":214,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":215,"context_line":"            _(\"Invalid %(capability)s parameter \u0027%(value)s\u0027.\") %"},{"line_number":216,"context_line":"            {\u0027capability\u0027: capability_name, \u0027value\u0027: value})"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_73b56730","line":215,"in_reply_to":"da86d52c_98b598d2","updated":"2015-02-09 11:21:18.000000000","message":"Done","commit_id":"6592f5c7f680f5c01d5f49e8436034c7000457ea"}],"ironic/tests/drivers/test_deploy_utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3ccdebbb0d5d99f6e498f4fc3370d0843ea7ffbe","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        self.node \u003d obj_utils.get_test_node(self.context, driver\u003d\u0027fake\u0027)"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"    def test_parse_instance_info_capabilities(self):"},{"line_number":1043,"context_line":"        self.node.instance_info \u003d {\u0027capabilities\u0027: \u0027{\"foo\": \"bar\"}\u0027}"},{"line_number":1044,"context_line":"        expected_result \u003d {\"foo\": \"bar\"}"},{"line_number":1045,"context_line":"        result \u003d utils.parse_instance_info_capabilities(self.node)"},{"line_number":1046,"context_line":"        self.assertEqual(expected_result, result)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_d0003204","line":1043,"updated":"2015-02-05 11:47:05.000000000","message":"let\u0027s have a test with dict instead of string (and maybe on failure with e.g. int)","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d9423123fde7966562b14bda3dd66cf854d56a81","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        self.node \u003d obj_utils.get_test_node(self.context, driver\u003d\u0027fake\u0027)"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":"    def test_parse_instance_info_capabilities(self):"},{"line_number":1043,"context_line":"        self.node.instance_info \u003d {\u0027capabilities\u0027: \u0027{\"foo\": \"bar\"}\u0027}"},{"line_number":1044,"context_line":"        expected_result \u003d {\"foo\": \"bar\"}"},{"line_number":1045,"context_line":"        result \u003d utils.parse_instance_info_capabilities(self.node)"},{"line_number":1046,"context_line":"        self.assertEqual(expected_result, result)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_120c843a","line":1043,"in_reply_to":"da86d52c_d0003204","updated":"2015-02-05 15:51:42.000000000","message":"Done","commit_id":"70e06c35450003811f54e09905608c3cd0ae116e"}],"ironic/tests/drivers/test_pxe.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"6b571ce433b9ca478b8b2f2d3871cb2d20e938ae","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self._test_continue_deploy(False)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def test_continue_deploy_localboot(self):"},{"line_number":646,"context_line":"        self._test_continue_deploy(False)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    @mock.patch.object(iscsi_deploy, \u0027InstanceImageCache\u0027)"},{"line_number":649,"context_line":"    def test_continue_deploy_fail(self, mock_image_cache):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_a119047b","line":646,"updated":"2015-02-03 16:32:15.000000000","message":"Should be True?","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"61d9bf9424ade9d64cbb61172839277868f568c4","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        self._test_continue_deploy(False)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def test_continue_deploy_localboot(self):"},{"line_number":646,"context_line":"        self._test_continue_deploy(False)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    @mock.patch.object(iscsi_deploy, \u0027InstanceImageCache\u0027)"},{"line_number":649,"context_line":"    def test_continue_deploy_fail(self, mock_image_cache):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_af756b99","line":646,"in_reply_to":"da86d52c_a119047b","updated":"2015-02-04 10:34:57.000000000","message":"Done","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"}],"ironic/tests/test_pxe_utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e2ff8b613f0ce9f59257a5a5c9b07d28d6ab6ad9","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                   u\u0027c02d7f33c123/deploy_kernel\u0027,"},{"line_number":51,"context_line":"            \u0027disk\u0027: \u0027cciss/c0d0,sda,hda,vda\u0027,"},{"line_number":52,"context_line":"            \u0027root_device\u0027: \u0027vendor\u003dfake,size\u003d123\u0027,"},{"line_number":53,"context_line":"            \u0027boot_option\u0027: \u0027netboot\u0027"},{"line_number":54,"context_line":"        }"},{"line_number":55,"context_line":"        self.agent_pxe_options \u003d {"},{"line_number":56,"context_line":"            \u0027deployment_ari_path\u0027: u\u0027/tftpboot/1be26c0b-03f2-4d2e-ae87-c02d7\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c11358b6","line":53,"updated":"2015-02-03 16:48:02.000000000","message":"nit: add trailing comma","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"61d9bf9424ade9d64cbb61172839277868f568c4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                   u\u0027c02d7f33c123/deploy_kernel\u0027,"},{"line_number":51,"context_line":"            \u0027disk\u0027: \u0027cciss/c0d0,sda,hda,vda\u0027,"},{"line_number":52,"context_line":"            \u0027root_device\u0027: \u0027vendor\u003dfake,size\u003d123\u0027,"},{"line_number":53,"context_line":"            \u0027boot_option\u0027: \u0027netboot\u0027"},{"line_number":54,"context_line":"        }"},{"line_number":55,"context_line":"        self.agent_pxe_options \u003d {"},{"line_number":56,"context_line":"            \u0027deployment_ari_path\u0027: u\u0027/tftpboot/1be26c0b-03f2-4d2e-ae87-c02d7\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_af9c8bc1","line":53,"in_reply_to":"da86d52c_c11358b6","updated":"2015-02-04 10:34:57.000000000","message":"Done","commit_id":"15be5aa9bea54a7a44ea44e5e4622745b0d7025f"}]}
