)]}'
{"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1bd19b8e2d9d4ade1dcd47bc03adaa6b7c7c6496","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":423,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":424,"context_line":"            except KeyError:"},{"line_number":425,"context_line":"                pass"},{"line_number":426,"context_line":"            else:"},{"line_number":427,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":428,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_59577dca","line":425,"updated":"2015-02-16 18:25:42.000000000","message":"nit: Perhaps a log? It may cause the node to not boot on the user image if we can\u0027t switch the PXE config file","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a4d3bd26eaacffd6200373775558ef9147683036","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":423,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":424,"context_line":"            except KeyError:"},{"line_number":425,"context_line":"                pass"},{"line_number":426,"context_line":"            else:"},{"line_number":427,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":428,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_af1494e9","line":425,"in_reply_to":"da86d52c_59577dca","updated":"2015-02-17 10:13:06.000000000","message":"+1 for at least a WARNING here","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"d02b49c42fb4c4990eab5a1bc411e53522e8dfd1","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":423,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":424,"context_line":"            except KeyError:"},{"line_number":425,"context_line":"                pass"},{"line_number":426,"context_line":"            else:"},{"line_number":427,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":428,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_7d1a48c7","line":425,"in_reply_to":"da86d52c_af1494e9","updated":"2015-02-17 23:23:58.000000000","message":"Done","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1bd19b8e2d9d4ade1dcd47bc03adaa6b7c7c6496","unresolved":false,"context_lines":[{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        _destroy_token_file(node)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        root_uuid \u003d iscsi_deploy.continue_deploy(task, **kwargs)"},{"line_number":513,"context_line":"        # save the node\u0027s root disk UUID so that another conductor"},{"line_number":514,"context_line":"        # could rebuild the PXE config file"},{"line_number":515,"context_line":"        task.node.driver_internal_info[\u0027root_uuid\u0027] \u003d root_uuid"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_d960cdd1","line":512,"updated":"2015-02-16 18:25:42.000000000","message":"nit: Wondering if we should save it as part of the iscsi_deploy.continue_deploy() here to avoid code duplication.  I\u0027m using this same method for the VendorInterface for the IPA ramdisk.","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"cd2435a0c96c1877d9369b1ba46aa1f769091599","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":423,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":424,"context_line":"            except KeyError:"},{"line_number":425,"context_line":"                LOG.warn(\"The UUID for the root partition can\u0027t be found, \""},{"line_number":426,"context_line":"                         \"unable to switch the pxe config from deployment \""},{"line_number":427,"context_line":"                         \"mode to service (boot) mode for node %(node)s\","},{"line_number":428,"context_line":"                         {\"node\": task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_effe5137","line":425,"updated":"2015-02-18 14:41:12.000000000","message":"One more nit - _LW","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bd1caf102b34ce587082451de25ac17495c6be9e","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":423,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":424,"context_line":"            except KeyError:"},{"line_number":425,"context_line":"                LOG.warn(\"The UUID for the root partition can\u0027t be found, \""},{"line_number":426,"context_line":"                         \"unable to switch the pxe config from deployment \""},{"line_number":427,"context_line":"                         \"mode to service (boot) mode for node %(node)s\","},{"line_number":428,"context_line":"                         {\"node\": task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_aaffe764","line":425,"in_reply_to":"da86d52c_effe5137","updated":"2015-02-18 15:01:02.000000000","message":"Done","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5af7fb8c3496aeae1f866c6bfef45fb2f996f77d","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                # but let\u0027s guard, just in case it\u0027s missing"},{"line_number":423,"context_line":"                root_uuid \u003d task.node.driver_internal_info[\u0027root_uuid\u0027]"},{"line_number":424,"context_line":"            except KeyError:"},{"line_number":425,"context_line":"                LOG.warn(\"The UUID for the root partition can\u0027t be found, \""},{"line_number":426,"context_line":"                         \"unable to switch the pxe config from deployment \""},{"line_number":427,"context_line":"                         \"mode to service (boot) mode for node %(node)s\","},{"line_number":428,"context_line":"                         {\"node\": task.node.uuid})"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_2fff8903","line":425,"in_reply_to":"da86d52c_effe5137","updated":"2015-02-18 14:43:50.000000000","message":"oh good catch","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19ade179d624e7656f38b1cf55f16f9ae3a7ba42","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                         \"unable to switch the pxe config from deployment \""},{"line_number":427,"context_line":"                         \"mode to service (boot) mode for node %(node)s\","},{"line_number":428,"context_line":"                         {\"node\": task.node.uuid})"},{"line_number":429,"context_line":"                pass"},{"line_number":430,"context_line":"            else:"},{"line_number":431,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":432,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_e9ebbaa1","line":429,"updated":"2015-02-18 10:07:18.000000000","message":"nit: pass not needed","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bd1caf102b34ce587082451de25ac17495c6be9e","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                         \"unable to switch the pxe config from deployment \""},{"line_number":427,"context_line":"                         \"mode to service (boot) mode for node %(node)s\","},{"line_number":428,"context_line":"                         {\"node\": task.node.uuid})"},{"line_number":429,"context_line":"                pass"},{"line_number":430,"context_line":"            else:"},{"line_number":431,"context_line":"                pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":432,"context_line":"                    task.node.uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_caf7bb8a","line":429,"in_reply_to":"da86d52c_e9ebbaa1","updated":"2015-02-18 15:01:02.000000000","message":"Done","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eab1fa586e65bda842986f8062f7ced6d6fa4df1","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        # could rebuild the PXE config file"},{"line_number":519,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":520,"context_line":"        driver_internal_info[\u0027root_uuid\u0027] \u003d root_uuid"},{"line_number":521,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":522,"context_line":"        node.save()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if not root_uuid:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_a93702e2","line":521,"updated":"2015-02-18 09:52:05.000000000","message":"nit: the driver_internal_info local looks really unnecessary. I agree with using node instead of repeatedly derefing task.node though.","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"08acf5facc6bbebf0a65930a1fe0f0d55727bc68","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        # could rebuild the PXE config file"},{"line_number":519,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":520,"context_line":"        driver_internal_info[\u0027root_uuid\u0027] \u003d root_uuid"},{"line_number":521,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":522,"context_line":"        node.save()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if not root_uuid:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_29379200","line":521,"in_reply_to":"da86d52c_290a328a","updated":"2015-02-18 10:14:00.000000000","message":"Wow, that is really stinky. Thanks Lucas.","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19ade179d624e7656f38b1cf55f16f9ae3a7ba42","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        # could rebuild the PXE config file"},{"line_number":519,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":520,"context_line":"        driver_internal_info[\u0027root_uuid\u0027] \u003d root_uuid"},{"line_number":521,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":522,"context_line":"        node.save()"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if not root_uuid:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_290a328a","line":521,"in_reply_to":"da86d52c_a93702e2","updated":"2015-02-18 10:07:18.000000000","message":"I believe this is due the nature of RPC objects. When we save() it calculates a delta of what have changed in the object, and it knows something was changed when an attribute is set like above in the object. \n\nIf we do:\n\nnode.driver_internal_info[\u0027foo\u0027] \u003d \u0027bar\u0027\n\nThe object doesn\u0027t detect that change IIRC. This need to be fixed in the objects code.","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f954c8f46fd2dcbd55ceb35bf9364874bd8e8225","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        node.save()"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        if not root_uuid:"},{"line_number":526,"context_line":"            return"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        try:"},{"line_number":529,"context_line":"            if iscsi_deploy.get_boot_option(node) \u003d\u003d \"local\":"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_9c7f9016","line":526,"updated":"2015-02-19 21:18:44.000000000","message":"Might be better to save root_uuid after this. I guess it doesn\u0027t matter much. Hmm, except the code that uses it assumes it is a valid uuid I think.","commit_id":"213048a45a9b405bcd0cfc9057d0b7525b7c8eb5"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"7d116c038f277776f062efdc5e762718466238eb","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        node.save()"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        if not root_uuid:"},{"line_number":526,"context_line":"            return"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        try:"},{"line_number":529,"context_line":"            if iscsi_deploy.get_boot_option(node) \u003d\u003d \"local\":"}],"source_content_type":"text/x-python","patch_set":7,"id":"da86d52c_3f2cd692","line":526,"in_reply_to":"da86d52c_9c7f9016","updated":"2015-02-19 21:29:20.000000000","message":"Done","commit_id":"213048a45a9b405bcd0cfc9057d0b7525b7c8eb5"}],"ironic/tests/drivers/test_pxe.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1bd19b8e2d9d4ade1dcd47bc03adaa6b7c7c6496","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        mock_build_pxe.return_value \u003d None"},{"line_number":522,"context_line":"        mock_img_info.return_value \u003d None"},{"line_number":523,"context_line":"        mock_pxe_config.return_value \u003d None"},{"line_number":524,"context_line":"        mock_cache_r_k.return_value \u003d None"},{"line_number":525,"context_line":"        self.node.provision_state \u003d states.ACTIVE"},{"line_number":526,"context_line":"        self.node.save()"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_194c2576","line":524,"updated":"2015-02-16 18:25:42.000000000","message":"Is all this return_value\u0027s needed?\n\nIf it\u0027s just to make it work with assert_called_once_with() and you don\u0027t care about the return value we can just use mock.ANY\n\n(same comment on the other tests)","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1bd19b8e2d9d4ade1dcd47bc03adaa6b7c7c6496","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        self.node.refresh()"},{"line_number":726,"context_line":"        self.assertEqual(states.ACTIVE, self.node.provision_state)"},{"line_number":727,"context_line":"        self.assertEqual(states.NOSTATE, self.node.target_provision_state)"},{"line_number":728,"context_line":"        self.assertEqual(states.POWER_ON, self.node.power_state)"},{"line_number":729,"context_line":"        self.assertIsNone(self.node.last_error)"},{"line_number":730,"context_line":"        self.assertFalse(os.path.exists(token_path))"},{"line_number":731,"context_line":"        mock_image_cache.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_59405d07","line":728,"updated":"2015-02-16 18:25:42.000000000","message":"self.assertIn(\u0027root_uuid\u0027, self.node.driver_internal_info)","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"d02b49c42fb4c4990eab5a1bc411e53522e8dfd1","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        self.node.refresh()"},{"line_number":726,"context_line":"        self.assertEqual(states.ACTIVE, self.node.provision_state)"},{"line_number":727,"context_line":"        self.assertEqual(states.NOSTATE, self.node.target_provision_state)"},{"line_number":728,"context_line":"        self.assertEqual(states.POWER_ON, self.node.power_state)"},{"line_number":729,"context_line":"        self.assertIsNone(self.node.last_error)"},{"line_number":730,"context_line":"        self.assertFalse(os.path.exists(token_path))"},{"line_number":731,"context_line":"        mock_image_cache.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_d6ff85ff","line":728,"in_reply_to":"da86d52c_59405d07","updated":"2015-02-17 23:23:58.000000000","message":"Done","commit_id":"77a3dff6b2cafc2a7658e534e9954c8d12480990"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19ade179d624e7656f38b1cf55f16f9ae3a7ba42","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        mock_build_pxe.return_value \u003d None"},{"line_number":522,"context_line":"        mock_img_info.return_value \u003d None"},{"line_number":523,"context_line":"        mock_pxe_config.return_value \u003d None"},{"line_number":524,"context_line":"        mock_cache_r_k.return_value \u003d None"},{"line_number":525,"context_line":"        self.node.provision_state \u003d states.ACTIVE"},{"line_number":526,"context_line":"        self.node.save()"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_49092683","line":524,"updated":"2015-02-18 10:07:18.000000000","message":"nit: the setting the mock return_value to None is not needed (unless you expect it to be None)\n\nIf you don\u0027t care about the retuned value, you can use mock.ANY on the assertion methods","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bd1caf102b34ce587082451de25ac17495c6be9e","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        mock_build_pxe.return_value \u003d None"},{"line_number":522,"context_line":"        mock_img_info.return_value \u003d None"},{"line_number":523,"context_line":"        mock_pxe_config.return_value \u003d None"},{"line_number":524,"context_line":"        mock_cache_r_k.return_value \u003d None"},{"line_number":525,"context_line":"        self.node.provision_state \u003d states.ACTIVE"},{"line_number":526,"context_line":"        self.node.save()"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_6a4faf92","line":524,"in_reply_to":"da86d52c_49092683","updated":"2015-02-18 15:01:02.000000000","message":"Done","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19ade179d624e7656f38b1cf55f16f9ae3a7ba42","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        mock_build_pxe.return_value \u003d None"},{"line_number":555,"context_line":"        mock_img_info.return_value \u003d None"},{"line_number":556,"context_line":"        mock_pxe_config.return_value \u003d None"},{"line_number":557,"context_line":"        mock_cache_r_k.return_value \u003d None"},{"line_number":558,"context_line":"        mock_pxe_get_cfg.return_value \u003d \u0027/path\u0027"},{"line_number":559,"context_line":"        mock_get_cap.return_value \u003d None"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_297f92e1","line":557,"updated":"2015-02-18 10:07:18.000000000","message":"ditto re None","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"bd1caf102b34ce587082451de25ac17495c6be9e","unresolved":false,"context_lines":[{"line_number":554,"context_line":"        mock_build_pxe.return_value \u003d None"},{"line_number":555,"context_line":"        mock_img_info.return_value \u003d None"},{"line_number":556,"context_line":"        mock_pxe_config.return_value \u003d None"},{"line_number":557,"context_line":"        mock_cache_r_k.return_value \u003d None"},{"line_number":558,"context_line":"        mock_pxe_get_cfg.return_value \u003d \u0027/path\u0027"},{"line_number":559,"context_line":"        mock_get_cap.return_value \u003d None"},{"line_number":560,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_8a406360","line":557,"in_reply_to":"da86d52c_297f92e1","updated":"2015-02-18 15:01:02.000000000","message":"Done","commit_id":"6563397226c190b640f5c523e504457babb5c4c0"}]}
