)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b0dd20dd4e6550b4e61a6b1ca559bd7b8be08b17","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t write PXE config file during takeover"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If node has reached an active state then a valid configuration file"},{"line_number":10,"context_line":"exists so use the existing file otherwise create a new config file."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id8a1b46c82e31dadfb1a9dee9ae19bba536b6e4f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_8413055b","line":10,"updated":"2015-02-18 10:15:10.000000000","message":"Not sure, I need to investigate more. But \"a valid configuration file exists\" -- yes exist[ed] on the conductor where this node has been first deployed. If a new conductor take over that node there\u0027s no guarantee that the config file for that particular node exists in the new conductor.","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"51c8201aab9328a18b8822322087693b40453bfa","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t write PXE config during ACTIVE takeover"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If the node has reached an active state and the root_uuid is known then"},{"line_number":10,"context_line":"we should use that rather than rewriting the PXE config."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id8a1b46c82e31dadfb1a9dee9ae19bba536b6e4f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba7be1f8_31679227","line":10,"updated":"2015-02-26 20:42:42.000000000","message":"the commit message does not describe the change very clearly, or at least I fail to understand how this changes any behavior of a takeover of an ACTIVE node by another conductor.\n\nCould you clarify what problem this is fixing?","commit_id":"c29a2c668025b3d81e5807a5077235cbc68f7d09"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"b36b76a8152470802b95fffec6c02613234b22fc","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":413,"context_line":"            # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":414,"context_line":"            # the image kernel and ramdisk (Or even require it)."},{"line_number":415,"context_line":"            _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":416,"context_line":"            try:"},{"line_number":417,"context_line":"                # this should have been stashed when the deploy was done"},{"line_number":418,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_200c3394","line":415,"updated":"2015-02-17 11:51:33.000000000","message":"Why not leave this part outside of if .. else ? It is called in both cases anyway. Is it meant to not to download kernel and ramdisk if config not created? If so, you can move it outside on line 434 and delete from here.","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b0dd20dd4e6550b4e61a6b1ca559bd7b8be08b17","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":413,"context_line":"            # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":414,"context_line":"            # the image kernel and ramdisk (Or even require it)."},{"line_number":415,"context_line":"            _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":416,"context_line":"            try:"},{"line_number":417,"context_line":"                # this should have been stashed when the deploy was done"},{"line_number":418,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_69d34ad5","line":415,"in_reply_to":"da86d52c_200c3394","updated":"2015-02-18 10:15:10.000000000","message":"+1, it\u0027s being called at L434 so no need to have it here","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"acdbb6e3069c9ea7dd38b0a23b67d3d15ee89978","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":413,"context_line":"            # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":414,"context_line":"            # the image kernel and ramdisk (Or even require it)."},{"line_number":415,"context_line":"            _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":416,"context_line":"            try:"},{"line_number":417,"context_line":"                # this should have been stashed when the deploy was done"},{"line_number":418,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_2a513730","line":415,"in_reply_to":"da86d52c_69d34ad5","updated":"2015-02-18 15:01:53.000000000","message":"Done","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"57809644951258e32aa59ba34c32e9841c6534dc","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":419,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":420,"context_line":"            except KeyError:"},{"line_number":421,"context_line":"                pass"},{"line_number":422,"context_line":"            else:"},{"line_number":423,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":424,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0c9f6e04","line":421,"updated":"2015-02-17 09:56:34.000000000","message":"Hmm, should pxe_utils.create_pxe_config be called here? If so, the _cache_ramdisk_kernel should maybe come after (and outside) the try\u0027s else.\n\nChris, Lucas, what do you think please?","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"acdbb6e3069c9ea7dd38b0a23b67d3d15ee89978","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":419,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":420,"context_line":"            except KeyError:"},{"line_number":421,"context_line":"                pass"},{"line_number":422,"context_line":"            else:"},{"line_number":423,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":424,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_8a3783fd","line":421,"in_reply_to":"da86d52c_0932ce0f","updated":"2015-02-18 15:01:53.000000000","message":"Done","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b0dd20dd4e6550b4e61a6b1ca559bd7b8be08b17","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":419,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":420,"context_line":"            except KeyError:"},{"line_number":421,"context_line":"                pass"},{"line_number":422,"context_line":"            else:"},{"line_number":423,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":424,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0932ce0f","line":421,"in_reply_to":"da86d52c_0c9f6e04","updated":"2015-02-18 10:15:10.000000000","message":"Yeah, I would think that in case of take_over() even if the node state is ACTIVE it may not have the config file generated on the conductor that just took the Node over, so It def should be generated.","commit_id":"56b9c5842c94534103a0f78df33daf0813eb60c6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c05b425b46885a219496e42bfcbc68e8c2d76ff5","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                    driver_utils.get_node_capability(task.node, \u0027boot_mode\u0027))"},{"line_number":428,"context_line":"        else:"},{"line_number":429,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":430,"context_line":"                                        pxe_config_template)"},{"line_number":431,"context_line":"        # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":432,"context_line":"        # the image kernel and ramdisk (Or even require it)."},{"line_number":433,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_21100f4e","line":430,"updated":"2015-02-20 13:12:36.000000000","message":"Maybe I misunderstand something, but switch_pxe_config only modifies an existing pxe config, which you have to create in case of taking over an active node, no?","commit_id":"5ddc24dd712711ce55fc44175752ca1ec9e30038"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"a798e70a6ca49e58d394834b696ecf80314599c9","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                    driver_utils.get_node_capability(task.node, \u0027boot_mode\u0027))"},{"line_number":428,"context_line":"        else:"},{"line_number":429,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":430,"context_line":"                                        pxe_config_template)"},{"line_number":431,"context_line":"        # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":432,"context_line":"        # the image kernel and ramdisk (Or even require it)."},{"line_number":433,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_21864fba","line":430,"in_reply_to":"ba7be1f8_21100f4e","updated":"2015-02-20 13:31:03.000000000","message":"The goal here is \"use an existing one if you can, otherwise create one\". Testing shows it\u0027s important NOT to create_pxe_config if root_uuid gives a KeyError, not 100% sure why.","commit_id":"5ddc24dd712711ce55fc44175752ca1ec9e30038"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2eff2bdbf19370e1acfffccaa6920386713eb1da","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                    driver_utils.get_node_capability(task.node, \u0027boot_mode\u0027))"},{"line_number":428,"context_line":"        else:"},{"line_number":429,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":430,"context_line":"                                        pxe_config_template)"},{"line_number":431,"context_line":"        # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":432,"context_line":"        # the image kernel and ramdisk (Or even require it)."},{"line_number":433,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_649055ed","line":430,"in_reply_to":"ba7be1f8_21864fba","updated":"2015-02-20 13:58:32.000000000","message":"I just don\u0027t understand where we have a \u0027create\u0027 step here. Could you point me? switch_pxe_config seems to expect pxe_config_path to exist.","commit_id":"5ddc24dd712711ce55fc44175752ca1ec9e30038"},{"author":{"_account_id":7133,"name":"Ryan Moore","email":"ryan.moore@hpe.com","username":"moory"},"change_message_id":"39725d5e6e431254138a5055e414a6bc7d324889","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                    driver_utils.get_node_capability(task.node, \u0027boot_mode\u0027))"},{"line_number":428,"context_line":"        else:"},{"line_number":429,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":430,"context_line":"                                        pxe_config_template)"},{"line_number":431,"context_line":"        # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":432,"context_line":"        # the image kernel and ramdisk (Or even require it)."},{"line_number":433,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_b541950d","line":430,"in_reply_to":"ba7be1f8_21864fba","updated":"2015-02-20 15:05:53.000000000","message":"If the node is already ACTIVE, then a config must already exist. We just want to switch it from \u0027deploy\u0027 mode to \u0027boot\u0027 mode.\n\nIf the node is already ACTIVE but somehow the root_uuid has gone missing, the deploy went wrong. Don\u0027t delete the config just in case the root_uuid is in there. Allow the operator to try to recover the instance.\n\nOtherwise, create a new config and attempt to deploy the instance.","commit_id":"5ddc24dd712711ce55fc44175752ca1ec9e30038"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"fdf4f5b2987f80cfd38372417a6c1f610d8d0261","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                    driver_utils.get_node_capability(task.node, \u0027boot_mode\u0027))"},{"line_number":428,"context_line":"        else:"},{"line_number":429,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options,"},{"line_number":430,"context_line":"                                        pxe_config_template)"},{"line_number":431,"context_line":"        # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":432,"context_line":"        # the image kernel and ramdisk (Or even require it)."},{"line_number":433,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_903c9f95","line":430,"in_reply_to":"ba7be1f8_b541950d","updated":"2015-02-20 15:07:04.000000000","message":"If the node is ACTIVE, but we took it over, there\u0027s no config","commit_id":"5ddc24dd712711ce55fc44175752ca1ec9e30038"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1e295aae181728d807e65dd778cd9521be88eb80","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        pxe_config_path \u003d pxe_utils.get_pxe_config_file_path(task.node.uuid)"},{"line_number":410,"context_line":"        if not os.path.exists(pxe_config_path):"},{"line_number":411,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options, pxe_config_template)"},{"line_number":412,"context_line":"        elif task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":413,"context_line":"            try:"},{"line_number":414,"context_line":"                # this should have been stashed when the deploy was done"},{"line_number":415,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_67dbf01b","line":412,"updated":"2015-02-20 16:35:56.000000000","message":"If I get it right, by using \u0027elif\u0027 you assume that either PXE file does not exist OR state is ACTIVE. During take over both can be true, so s/elif/if/","commit_id":"02a989084b45a7ba563021930c7e54f503e3bba9"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"f9495cb740228312b94cdd714ec0e13f5d74aabe","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        pxe_config_path \u003d pxe_utils.get_pxe_config_file_path(task.node.uuid)"},{"line_number":410,"context_line":"        if not os.path.exists(pxe_config_path):"},{"line_number":411,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options, pxe_config_template)"},{"line_number":412,"context_line":"        elif task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":413,"context_line":"            try:"},{"line_number":414,"context_line":"                # this should have been stashed when the deploy was done"},{"line_number":415,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_2a3a9fcd","line":412,"in_reply_to":"ba7be1f8_67dbf01b","updated":"2015-02-20 16:44:12.000000000","message":"Done","commit_id":"02a989084b45a7ba563021930c7e54f503e3bba9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b8915579f63bdacbd476cace3609596195b2c183","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        # NOTE(deva): prepare may be called from conductor._do_takeover"},{"line_number":417,"context_line":"        # in which case, it may need to regenerate the PXE config file for an"},{"line_number":418,"context_line":"        # already-active deployment."},{"line_number":419,"context_line":"        if task.node.provision_state \u003d\u003d states.ACTIVE:"},{"line_number":420,"context_line":"            try:"},{"line_number":421,"context_line":"                # this should have been stashed when the deploy was done"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_caa023f7","side":"PARENT","line":418,"updated":"2015-02-20 16:45:09.000000000","message":"Not sure this comment should be deleted","commit_id":"47048adf4d5784e89b3c375d4e8b49fac42d294b"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"51c8201aab9328a18b8822322087693b40453bfa","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        else:"},{"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_config_path \u003d pxe_utils.get_pxe_config_file_path(task.node.uuid)"},{"line_number":410,"context_line":"        if not os.path.exists(pxe_config_path):"},{"line_number":411,"context_line":"            pxe_utils.create_pxe_config(task, pxe_options, pxe_config_template)"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_516c0609","line":409,"updated":"2015-02-26 20:42:42.000000000","message":"If prepare() is called and this conductor already has the pxe config file for this node, shouldn\u0027t we rebuild it, rather than assume the pre-existing file is still valid?","commit_id":"c29a2c668025b3d81e5807a5077235cbc68f7d09"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"51c8201aab9328a18b8822322087693b40453bfa","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                    driver_utils.get_node_capability(task.node, \u0027boot_mode\u0027))"},{"line_number":430,"context_line":"        # FIXME(lucasagomes): If it\u0027s local boot we should not cache"},{"line_number":431,"context_line":"        # the image kernel and ramdisk (Or even require it)."},{"line_number":432,"context_line":"        _cache_ramdisk_kernel(task.context, task.node, pxe_info)"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    def clean_up(self, task):"},{"line_number":435,"context_line":"        \"\"\"Clean up the deployment environment for the task\u0027s node."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_71710ae0","line":432,"updated":"2015-02-26 20:42:42.000000000","message":"why are you moving this call down here?","commit_id":"c29a2c668025b3d81e5807a5077235cbc68f7d09"}],"ironic/tests/drivers/test_pxe.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"b36b76a8152470802b95fffec6c02613234b22fc","unresolved":false,"context_lines":[{"line_number":539,"context_line":"    @mock.patch.object(pxe, \u0027_get_image_info\u0027)"},{"line_number":540,"context_line":"    @mock.patch.object(pxe, \u0027_cache_ramdisk_kernel\u0027)"},{"line_number":541,"context_line":"    @mock.patch.object(pxe, \u0027_build_pxe_config_options\u0027)"},{"line_number":542,"context_line":"    @mock.patch.object(pxe_utils, \u0027create_pxe_config\u0027)"},{"line_number":543,"context_line":"    @mock.patch.object(pxe_utils, \u0027get_pxe_config_file_path\u0027)"},{"line_number":544,"context_line":"    @mock.patch.object(deploy_utils, \u0027switch_pxe_config\u0027)"},{"line_number":545,"context_line":"    @mock.patch.object(driver_utils, \u0027get_node_capability\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_bb177644","side":"PARENT","line":542,"updated":"2015-02-17 11:51:33.000000000","message":"I think its better not to remove this mock but assert that it was not called, as it is purpose of this patch.","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"acdbb6e3069c9ea7dd38b0a23b67d3d15ee89978","unresolved":false,"context_lines":[{"line_number":539,"context_line":"    @mock.patch.object(pxe, \u0027_get_image_info\u0027)"},{"line_number":540,"context_line":"    @mock.patch.object(pxe, \u0027_cache_ramdisk_kernel\u0027)"},{"line_number":541,"context_line":"    @mock.patch.object(pxe, \u0027_build_pxe_config_options\u0027)"},{"line_number":542,"context_line":"    @mock.patch.object(pxe_utils, \u0027create_pxe_config\u0027)"},{"line_number":543,"context_line":"    @mock.patch.object(pxe_utils, \u0027get_pxe_config_file_path\u0027)"},{"line_number":544,"context_line":"    @mock.patch.object(deploy_utils, \u0027switch_pxe_config\u0027)"},{"line_number":545,"context_line":"    @mock.patch.object(driver_utils, \u0027get_node_capability\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ca241bc8","side":"PARENT","line":542,"in_reply_to":"da86d52c_bb177644","updated":"2015-02-18 15:01:53.000000000","message":"Done","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"}]}
