)]}'
{"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"def _get_token_file_path(node_uuid):"},{"line_number":218,"context_line":"    \"\"\"Generate the path for PKI token file.\"\"\""},{"line_number":219,"context_line":"    return os.path.join(CONF.pxe.tftp_root, \u0027token-\u0027 + node_uuid)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"@lockutils.synchronized(\u0027master_image\u0027, \u0027ironic-\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJoI%3D","line":219,"updated":"2013-12-01 18:50:55.000000000","message":"This should be in the same directory as the instance config, not the node. That way when we clean up the instance, we clean up the token.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"71ac84d11ec793e810e131991b3a9fe62ec22823","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"def _get_token_file_path(node_uuid):"},{"line_number":218,"context_line":"    \"\"\"Generate the path for PKI token file.\"\"\""},{"line_number":219,"context_line":"    return os.path.join(CONF.pxe.tftp_root, \u0027token-\u0027 + node_uuid)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"@lockutils.synchronized(\u0027master_image\u0027, \u0027ironic-\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BIIA%3D","line":219,"in_reply_to":"AAAATn%2F%2BJoI%3D","updated":"2013-12-02 11:58:26.000000000","message":"This file should be got from deploy ramdisk. If it should be in the same directory as the instance config, there is two ways:\n\n1) Pass extra parameter \u0027instance_uuid\u0027 to deploy ramdisk\n\nor\n\n2) Create a link (like for pxe config file). Unlink will be needed in instance cleanup.\n\nAnd I think token file should be removed earlier than instance cleanup.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        _create_pxe_config(task, node, pxe_info)"},{"line_number":487,"context_line":"        _cache_images(node, pxe_info)"},{"line_number":488,"context_line":"        # TODO(yuriyz): more secure way needed for pass auth token to"},{"line_number":489,"context_line":"        # deploy ramdisk"},{"line_number":490,"context_line":"        _create_token_file(task, node)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        return states.DEPLOYING"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJoE%3D","line":489,"updated":"2013-12-01 18:50:55.000000000","message":"Please open a bug about this and reference it.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"71ac84d11ec793e810e131991b3a9fe62ec22823","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        _create_pxe_config(task, node, pxe_info)"},{"line_number":487,"context_line":"        _cache_images(node, pxe_info)"},{"line_number":488,"context_line":"        # TODO(yuriyz): more secure way needed for pass auth token to"},{"line_number":489,"context_line":"        # deploy ramdisk"},{"line_number":490,"context_line":"        _create_token_file(task, node)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        return states.DEPLOYING"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BIK8%3D","line":489,"in_reply_to":"AAAATn%2F%2BJoE%3D","updated":"2013-12-02 11:58:26.000000000","message":"This patch not merged yet. I think it is necessary after merging.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":611,"context_line":"            LOG.info(_(\u0027deployment to node %s done\u0027) % node_id)"},{"line_number":612,"context_line":"            node[\u0027provision_state\u0027] \u003d states.DEPLOYDONE"},{"line_number":613,"context_line":"        finally:"},{"line_number":614,"context_line":"            node.save(ctx)"},{"line_number":615,"context_line":"            _destroy_token_file(node)"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def vendor_passthru(self, task, node, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJoA%3D","line":614,"updated":"2013-12-01 18:50:55.000000000","message":"Are you sure you want to move node.save to a finally: clause? That seems like an unrelated semantic change - so if you do, please do it in a separate patch.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"71ac84d11ec793e810e131991b3a9fe62ec22823","unresolved":false,"context_lines":[{"line_number":611,"context_line":"            LOG.info(_(\u0027deployment to node %s done\u0027) % node_id)"},{"line_number":612,"context_line":"            node[\u0027provision_state\u0027] \u003d states.DEPLOYDONE"},{"line_number":613,"context_line":"        finally:"},{"line_number":614,"context_line":"            node.save(ctx)"},{"line_number":615,"context_line":"            _destroy_token_file(node)"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def vendor_passthru(self, task, node, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BIL0%3D","line":614,"in_reply_to":"AAAATn%2F%2BJoA%3D","updated":"2013-12-02 11:58:26.000000000","message":"Done","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"606bad860317039014210ffdda38ae48ae3a9d9d","unresolved":false,"context_lines":[{"line_number":607,"context_line":"            LOG.error(_(\u0027deployment to node %s failed\u0027) % node_id)"},{"line_number":608,"context_line":"            node[\u0027provision_state\u0027] \u003d states.DEPLOYFAIL"},{"line_number":609,"context_line":"            node.save(ctx)"},{"line_number":610,"context_line":"            _destroy_token_file(node)"},{"line_number":611,"context_line":"            raise exception.InstanceDeployFailure(_("},{"line_number":612,"context_line":"                    \u0027Deploy error: \"%(error)s\" for node %(node_id)s\u0027) %"},{"line_number":613,"context_line":"                     {\u0027error\u0027: e.message, \u0027node_id\u0027: node_id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9%2FOo%3D","line":610,"updated":"2013-12-03 18:43:42.000000000","message":"This is redundant with line 588.\n\nYou only need to _destroy_token_file() once at the start of this method.","commit_id":"7ef6d354d931a321597c49d3adb543147945d99a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"fed5ac6021ec5f92d20dae1b882ebae49e661884","unresolved":false,"context_lines":[{"line_number":607,"context_line":"            LOG.error(_(\u0027deployment to node %s failed\u0027) % node_id)"},{"line_number":608,"context_line":"            node[\u0027provision_state\u0027] \u003d states.DEPLOYFAIL"},{"line_number":609,"context_line":"            node.save(ctx)"},{"line_number":610,"context_line":"            _destroy_token_file(node)"},{"line_number":611,"context_line":"            raise exception.InstanceDeployFailure(_("},{"line_number":612,"context_line":"                    \u0027Deploy error: \"%(error)s\" for node %(node_id)s\u0027) %"},{"line_number":613,"context_line":"                     {\u0027error\u0027: e.message, \u0027node_id\u0027: node_id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97is%3D","line":610,"in_reply_to":"AAAATn%2F9%2FOo%3D","updated":"2013-12-04 10:43:35.000000000","message":"Done","commit_id":"7ef6d354d931a321597c49d3adb543147945d99a"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a1d6333e50f46a5d827cd6baeefea024fd45889b","unresolved":false,"context_lines":[{"line_number":424,"context_line":"def _create_token_file(task, node):"},{"line_number":425,"context_line":"    \"\"\"Save PKI token to file.\"\"\""},{"line_number":426,"context_line":"    token_file_path \u003d _get_token_file_path(node[\u0027uuid\u0027])"},{"line_number":427,"context_line":"    utils.unlink_without_raise(token_file_path)"},{"line_number":428,"context_line":"    token \u003d task.context.auth_token"},{"line_number":429,"context_line":"    if token:"},{"line_number":430,"context_line":"        utils.write_to_file(token_file_path, token)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9668%3D","line":427,"updated":"2013-12-04 13:35:34.000000000","message":"Yuriy, if we have no permission to unlink/remove the existing token file, unlink_without_raise() method call just log a warn level message into log file, so will cause next step re-creating/writing file failed, and make user confusing here what is root caue.\n\nHow do you think if this unlink step is not required if no permission , and if we have permission, utils.write_to_file() call will rewrite the file directly, how do you think?","commit_id":"a4b475929f42d9d37b58884e736087cdf71feea5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ab6861e35c2617e67b314d1ba8d3620f741c1755","unresolved":false,"context_lines":[{"line_number":424,"context_line":"def _create_token_file(task, node):"},{"line_number":425,"context_line":"    \"\"\"Save PKI token to file.\"\"\""},{"line_number":426,"context_line":"    token_file_path \u003d _get_token_file_path(node[\u0027uuid\u0027])"},{"line_number":427,"context_line":"    utils.unlink_without_raise(token_file_path)"},{"line_number":428,"context_line":"    token \u003d task.context.auth_token"},{"line_number":429,"context_line":"    if token:"},{"line_number":430,"context_line":"        utils.write_to_file(token_file_path, token)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F96p0%3D","line":427,"in_reply_to":"AAAATn%2F9668%3D","updated":"2013-12-04 14:49:05.000000000","message":"Agree, this not required if we have a new token.","commit_id":"a4b475929f42d9d37b58884e736087cdf71feea5"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a1d6333e50f46a5d827cd6baeefea024fd45889b","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    utils.unlink_without_raise(token_file_path)"},{"line_number":428,"context_line":"    token \u003d task.context.auth_token"},{"line_number":429,"context_line":"    if token:"},{"line_number":430,"context_line":"        utils.write_to_file(token_file_path, token)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"def _destroy_token_file(node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9664%3D","line":430,"updated":"2013-12-04 13:35:34.000000000","message":"Yuriy, it is better we catch the IO exception and log to file if no permission to write token file with current user of ironic process.","commit_id":"a4b475929f42d9d37b58884e736087cdf71feea5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ab6861e35c2617e67b314d1ba8d3620f741c1755","unresolved":false,"context_lines":[{"line_number":427,"context_line":"    utils.unlink_without_raise(token_file_path)"},{"line_number":428,"context_line":"    token \u003d task.context.auth_token"},{"line_number":429,"context_line":"    if token:"},{"line_number":430,"context_line":"        utils.write_to_file(token_file_path, token)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"def _destroy_token_file(node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F96os%3D","line":430,"in_reply_to":"AAAATn%2F9664%3D","updated":"2013-12-04 14:49:05.000000000","message":"We already have \u0027last_error\u0027 field for this:\n\nhttps://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L303","commit_id":"a4b475929f42d9d37b58884e736087cdf71feea5"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a1d6333e50f46a5d827cd6baeefea024fd45889b","unresolved":false,"context_lines":[{"line_number":433,"context_line":"def _destroy_token_file(node):"},{"line_number":434,"context_line":"    \"\"\"Delete PKI token file.\"\"\""},{"line_number":435,"context_line":"    token_file_path \u003d _get_token_file_path(node[\u0027uuid\u0027])"},{"line_number":436,"context_line":"    utils.unlink_without_raise(token_file_path)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"def _create_pxe_config(task, node, pxe_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F966c%3D","line":436,"updated":"2013-12-04 13:35:34.000000000","message":"Yuriy, can we add logic to double check if the file is actually removed already?","commit_id":"a4b475929f42d9d37b58884e736087cdf71feea5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ab6861e35c2617e67b314d1ba8d3620f741c1755","unresolved":false,"context_lines":[{"line_number":433,"context_line":"def _destroy_token_file(node):"},{"line_number":434,"context_line":"    \"\"\"Delete PKI token file.\"\"\""},{"line_number":435,"context_line":"    token_file_path \u003d _get_token_file_path(node[\u0027uuid\u0027])"},{"line_number":436,"context_line":"    utils.unlink_without_raise(token_file_path)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"def _create_pxe_config(task, node, pxe_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F96nU%3D","line":436,"in_reply_to":"AAAATn%2F966c%3D","updated":"2013-12-04 14:49:05.000000000","message":"Not sure that this needed because unlink_without_raise ignores ENOENT.","commit_id":"a4b475929f42d9d37b58884e736087cdf71feea5"}],"ironic/tests/drivers/test_pxe.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    def test_get_token_file_path(self):"},{"line_number":307,"context_line":"        node_uuid \u003d self.node[\u0027uuid\u0027]"},{"line_number":308,"context_line":"        self.assertEqual(pxe._get_token_file_path(node_uuid),"},{"line_number":309,"context_line":"                         \u0027/tftpboot/token-\u0027 + node_uuid)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def test__cache_tftp_images_master_path(self):"},{"line_number":312,"context_line":"        temp_dir \u003d tempfile.mkdtemp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJn8%3D","line":309,"updated":"2013-12-01 18:50:55.000000000","message":"This will need changing.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"71ac84d11ec793e810e131991b3a9fe62ec22823","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    def test_get_token_file_path(self):"},{"line_number":307,"context_line":"        node_uuid \u003d self.node[\u0027uuid\u0027]"},{"line_number":308,"context_line":"        self.assertEqual(pxe._get_token_file_path(node_uuid),"},{"line_number":309,"context_line":"                         \u0027/tftpboot/token-\u0027 + node_uuid)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def test__cache_tftp_images_master_path(self):"},{"line_number":312,"context_line":"        temp_dir \u003d tempfile.mkdtemp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BHsU%3D","line":309,"in_reply_to":"AAAATn%2F%2BJn8%3D","updated":"2013-12-02 11:58:26.000000000","message":"Please see my comment in pxe.py l219.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        CONF.set_default(\u0027tftp_root\u0027, temp_dir, group\u003d\u0027pxe\u0027)"},{"line_number":448,"context_line":"        token_path \u003d pxe._get_token_file_path(self.node[\u0027uuid\u0027])"},{"line_number":449,"context_line":"        open(token_path, \u0027w\u0027).close()"},{"line_number":450,"context_line":"        return token_path"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def test_validate_good(self):"},{"line_number":453,"context_line":"        with task_manager.acquire(self.context, [self.node[\u0027uuid\u0027]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJn4%3D","line":450,"updated":"2013-12-01 18:50:55.000000000","message":"This function, if needed, should be a Fixture and obtained via useFixture - that will schedule cleanup automatically.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"71ac84d11ec793e810e131991b3a9fe62ec22823","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        CONF.set_default(\u0027tftp_root\u0027, temp_dir, group\u003d\u0027pxe\u0027)"},{"line_number":448,"context_line":"        token_path \u003d pxe._get_token_file_path(self.node[\u0027uuid\u0027])"},{"line_number":449,"context_line":"        open(token_path, \u0027w\u0027).close()"},{"line_number":450,"context_line":"        return token_path"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def test_validate_good(self):"},{"line_number":453,"context_line":"        with task_manager.acquire(self.context, [self.node[\u0027uuid\u0027]],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BHok%3D","line":450,"in_reply_to":"AAAATn%2F%2BJn4%3D","updated":"2013-12-02 11:58:26.000000000","message":"lifeless, this code already uses a fixture, see \nhttps://github.com/openstack/ironic/blob/master/ironic/tests/base.py#L147","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":538,"context_line":"                        self.assertEqual(self.context.auth_token, token)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    def test_continue_deploy_good(self):"},{"line_number":541,"context_line":"        token_path \u003d self._create_token_file()"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        def fake_deploy(**kwargs):"},{"line_number":544,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJn0%3D","line":541,"updated":"2013-12-01 18:50:55.000000000","message":"Should mock.","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"65a54614bb7cab3073bc4fd418deeb139d4a9db0","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        self.assertFalse(os.path.exists(token_path))"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    def test_continue_deploy_fail(self):"},{"line_number":557,"context_line":"        token_path \u003d self._create_token_file()"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        def fake_deploy(**kwargs):"},{"line_number":560,"context_line":"            raise exception.InstanceDeployFailure()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BJnw%3D","line":557,"updated":"2013-12-01 18:50:55.000000000","message":"Should mock","commit_id":"4cfe05a527bbfa556f6e0367e25f4b45584a9a2a"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"606bad860317039014210ffdda38ae48ae3a9d9d","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        self.node \u003d self.dbapi.create_node(n)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def _create_token_file(self):"},{"line_number":446,"context_line":"        temp_dir \u003d tempfile.mkdtemp()"},{"line_number":447,"context_line":"        CONF.set_default(\u0027tftp_root\u0027, temp_dir, group\u003d\u0027pxe\u0027)"},{"line_number":448,"context_line":"        token_path \u003d pxe._get_token_file_path(self.node[\u0027uuid\u0027])"},{"line_number":449,"context_line":"        open(token_path, \u0027w\u0027).close()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9%2FJg%3D","line":446,"updated":"2013-12-03 18:43:42.000000000","message":"You are creating a temp_dir and overriding the tftp_root CONF option in three unit tests, but it\u0027s only obvious in one. Setting the override in a private method like this is not consistent with the remainder of this test class, and also, this override is shared by many test cases at this point. So, I would like to see\n\n  temp_dir \u003d ...\n  CONF.set_default(...)\n\nmoved into setUp().","commit_id":"7ef6d354d931a321597c49d3adb543147945d99a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"fed5ac6021ec5f92d20dae1b882ebae49e661884","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        self.node \u003d self.dbapi.create_node(n)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def _create_token_file(self):"},{"line_number":446,"context_line":"        temp_dir \u003d tempfile.mkdtemp()"},{"line_number":447,"context_line":"        CONF.set_default(\u0027tftp_root\u0027, temp_dir, group\u003d\u0027pxe\u0027)"},{"line_number":448,"context_line":"        token_path \u003d pxe._get_token_file_path(self.node[\u0027uuid\u0027])"},{"line_number":449,"context_line":"        open(token_path, \u0027w\u0027).close()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F97ic%3D","line":446,"in_reply_to":"AAAATn%2F9%2FJg%3D","updated":"2013-12-04 10:43:35.000000000","message":"Done","commit_id":"7ef6d354d931a321597c49d3adb543147945d99a"}]}
