)]}'
{"doc/source/index.rst":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"921e746e7f1cee0ec90fd6a2e202d7bebe7cea3c","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Custom HardwareManagers and Cleaning"},{"line_number":164,"context_line":"------------------------------------"},{"line_number":165,"context_line":"One of the reasons to build a custom hardware manager is to expose extra steps"},{"line_number":166,"context_line":"in `Ironic Cleaning`[4]_. A node will perform a list of cleaning steps any"},{"line_number":167,"context_line":"time the node is deleted by a tenant or moved from MANAGEABLE state to"},{"line_number":168,"context_line":"AVAILABLE state. If the node is using a *_agent driver, Ironic will query"},{"line_number":169,"context_line":"IPA for a list of clean steps that should be executed on the node. IPA"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_e6f9f64e","line":166,"updated":"2015-07-20 12:50:31.000000000","message":"formatting issue: likely needs space before [4] or you can make `Ironic Cleaning`_ a link","commit_id":"ad1199b1ae83fb03a0ded973f3ef870b93b4e554"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"dcd64cb5177a000829e67fb85fd396905f4afc9e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Custom HardwareManagers and Cleaning"},{"line_number":164,"context_line":"------------------------------------"},{"line_number":165,"context_line":"One of the reasons to build a custom hardware manager is to expose extra steps"},{"line_number":166,"context_line":"in `Ironic Cleaning`[4]_. A node will perform a list of cleaning steps any"},{"line_number":167,"context_line":"time the node is deleted by a tenant or moved from MANAGEABLE state to"},{"line_number":168,"context_line":"AVAILABLE state. If the node is using a *_agent driver, Ironic will query"},{"line_number":169,"context_line":"IPA for a list of clean steps that should be executed on the node. IPA"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_e73a60e7","line":166,"in_reply_to":"3a50d1a3_e6f9f64e","updated":"2015-08-03 21:26:30.000000000","message":"Done","commit_id":"ad1199b1ae83fb03a0ded973f3ef870b93b4e554"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"921e746e7f1cee0ec90fd6a2e202d7bebe7cea3c","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            raise errors.IncompatibleHardwareMethodError()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Note: If two managers return steps with the same `step` key, the priority will"},{"line_number":210,"context_line":"be set to whichever manager has a higher hardware support level and then"},{"line_number":211,"context_line":"use the higher priority in the case of a tie."},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a50d1a3_869592e5","line":209,"updated":"2015-07-20 12:50:31.000000000","message":"nit: you can use\n\n .. note::\n     blah-blah","commit_id":"ad1199b1ae83fb03a0ded973f3ef870b93b4e554"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"dcd64cb5177a000829e67fb85fd396905f4afc9e","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            raise errors.IncompatibleHardwareMethodError()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Note: If two managers return steps with the same `step` key, the priority will"},{"line_number":210,"context_line":"be set to whichever manager has a higher hardware support level and then"},{"line_number":211,"context_line":"use the higher priority in the case of a tie."},{"line_number":212,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a4dcd0f_4736b404","line":209,"in_reply_to":"3a50d1a3_869592e5","updated":"2015-08-03 21:26:30.000000000","message":"Done","commit_id":"ad1199b1ae83fb03a0ded973f3ef870b93b4e554"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e79b7ca733c443c86108da5f90666247459f01ca","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Custom HardwareManagers and Cleaning"},{"line_number":164,"context_line":"------------------------------------"},{"line_number":165,"context_line":"One of the reasons to build a custom hardware manager is to expose extra steps"},{"line_number":166,"context_line":"in Ironic Cleaning [4]_. A node will perform a list of cleaning steps any"},{"line_number":167,"context_line":"time the node is deleted by a tenant or moved from MANAGEABLE state to"},{"line_number":168,"context_line":"AVAILABLE state. If the node is using a \\*_agent driver, Ironic will query"},{"line_number":169,"context_line":"IPA for a list of clean steps that should be executed on the node. IPA"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a4dcd0f_850c46ee","line":166,"updated":"2015-08-05 14:55:35.000000000","message":"s/list/set/ maybe? Sounds weird in my head. Might be fine.","commit_id":"4e62990d7e0f381cf6baef1f059ddf57069c7848"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"a49b53dcecc526bcb8ed1e71c8f0dcdcd26c0410","unresolved":false,"context_lines":[{"line_number":163,"context_line":"Custom HardwareManagers and Cleaning"},{"line_number":164,"context_line":"------------------------------------"},{"line_number":165,"context_line":"One of the reasons to build a custom hardware manager is to expose extra steps"},{"line_number":166,"context_line":"in Ironic Cleaning [4]_. A node will perform a list of cleaning steps any"},{"line_number":167,"context_line":"time the node is deleted by a tenant or moved from MANAGEABLE state to"},{"line_number":168,"context_line":"AVAILABLE state. If the node is using a \\*_agent driver, Ironic will query"},{"line_number":169,"context_line":"IPA for a list of clean steps that should be executed on the node. IPA"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a4dcd0f_8cb4f881","line":166,"in_reply_to":"1a4dcd0f_850c46ee","updated":"2015-08-07 16:53:00.000000000","message":"Done","commit_id":"4e62990d7e0f381cf6baef1f059ddf57069c7848"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e79b7ca733c443c86108da5f90666247459f01ca","unresolved":false,"context_lines":[{"line_number":165,"context_line":"One of the reasons to build a custom hardware manager is to expose extra steps"},{"line_number":166,"context_line":"in Ironic Cleaning [4]_. A node will perform a list of cleaning steps any"},{"line_number":167,"context_line":"time the node is deleted by a tenant or moved from MANAGEABLE state to"},{"line_number":168,"context_line":"AVAILABLE state. If the node is using a \\*_agent driver, Ironic will query"},{"line_number":169,"context_line":"IPA for a list of clean steps that should be executed on the node. IPA"},{"line_number":170,"context_line":"will dispatch a call to `get_clean_steps()` on all available hardware managers"},{"line_number":171,"context_line":"and then return the combined list to Ironic."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a4dcd0f_85c1a656","line":168,"updated":"2015-08-05 14:55:35.000000000","message":"s/*_agent/agent_*","commit_id":"4e62990d7e0f381cf6baef1f059ddf57069c7848"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"a49b53dcecc526bcb8ed1e71c8f0dcdcd26c0410","unresolved":false,"context_lines":[{"line_number":165,"context_line":"One of the reasons to build a custom hardware manager is to expose extra steps"},{"line_number":166,"context_line":"in Ironic Cleaning [4]_. A node will perform a list of cleaning steps any"},{"line_number":167,"context_line":"time the node is deleted by a tenant or moved from MANAGEABLE state to"},{"line_number":168,"context_line":"AVAILABLE state. If the node is using a \\*_agent driver, Ironic will query"},{"line_number":169,"context_line":"IPA for a list of clean steps that should be executed on the node. IPA"},{"line_number":170,"context_line":"will dispatch a call to `get_clean_steps()` on all available hardware managers"},{"line_number":171,"context_line":"and then return the combined list to Ironic."}],"source_content_type":"text/x-rst","patch_set":3,"id":"1a4dcd0f_acb77483","line":168,"in_reply_to":"1a4dcd0f_85c1a656","updated":"2015-08-07 16:53:00.000000000","message":"Done","commit_id":"4e62990d7e0f381cf6baef1f059ddf57069c7848"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8cdf840860b08ccc92a15cb1b65ffe7ee661403e","unresolved":false,"context_lines":[{"line_number":196,"context_line":"`hardware.dispatch_to_managers()`. For each hardware manager, if the manager"},{"line_number":197,"context_line":"has a function matching the `step` key, it will be executed. If the function"},{"line_number":198,"context_line":"returns a value, that value is returned to Ironic and no further managers"},{"line_number":199,"context_line":"are called. If the manager raises `IncompatibleHardwareMethodError`,"},{"line_number":200,"context_line":"the next manager will be called. An example step::"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def upgrade_firmware(self, node, ports):"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a4dcd0f_b8983b76","line":199,"updated":"2015-08-12 20:51:35.000000000","message":"s/manager/function/","commit_id":"7ee151ba4d426c1897497505d5451f4465a44dcf"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"fe0a80779c544fafd1309d74bb399091d267612f","unresolved":false,"context_lines":[{"line_number":196,"context_line":"`hardware.dispatch_to_managers()`. For each hardware manager, if the manager"},{"line_number":197,"context_line":"has a function matching the `step` key, it will be executed. If the function"},{"line_number":198,"context_line":"returns a value, that value is returned to Ironic and no further managers"},{"line_number":199,"context_line":"are called. If the manager raises `IncompatibleHardwareMethodError`,"},{"line_number":200,"context_line":"the next manager will be called. An example step::"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def upgrade_firmware(self, node, ports):"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a4dcd0f_db974146","line":199,"in_reply_to":"1a4dcd0f_b8983b76","updated":"2015-08-13 17:59:34.000000000","message":"Done","commit_id":"7ee151ba4d426c1897497505d5451f4465a44dcf"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8cdf840860b08ccc92a15cb1b65ffe7ee661403e","unresolved":false,"context_lines":[{"line_number":197,"context_line":"has a function matching the `step` key, it will be executed. If the function"},{"line_number":198,"context_line":"returns a value, that value is returned to Ironic and no further managers"},{"line_number":199,"context_line":"are called. If the manager raises `IncompatibleHardwareMethodError`,"},{"line_number":200,"context_line":"the next manager will be called. An example step::"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def upgrade_firmware(self, node, ports):"},{"line_number":203,"context_line":"        if self._device_exists():"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a4dcd0f_38b18be0","line":200,"updated":"2015-08-12 20:51:35.000000000","message":"To be clear, all the step functions should return a string (I\u0027m guessing here, or can they return any type of info?), or raise IncompatibleHardwareMethodError? (Is it OK to raise other types of exceptions, and if so, what happens?)","commit_id":"7ee151ba4d426c1897497505d5451f4465a44dcf"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"fe0a80779c544fafd1309d74bb399091d267612f","unresolved":false,"context_lines":[{"line_number":197,"context_line":"has a function matching the `step` key, it will be executed. If the function"},{"line_number":198,"context_line":"returns a value, that value is returned to Ironic and no further managers"},{"line_number":199,"context_line":"are called. If the manager raises `IncompatibleHardwareMethodError`,"},{"line_number":200,"context_line":"the next manager will be called. An example step::"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def upgrade_firmware(self, node, ports):"},{"line_number":203,"context_line":"        if self._device_exists():"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a4dcd0f_5bd57119","line":200,"in_reply_to":"1a4dcd0f_38b18be0","updated":"2015-08-13 17:59:34.000000000","message":"It should return a string, but you could reasonably return anything that can be cast as a string. If another exception is raised, the command will consider to be failed. I\u0027ll add that bit.","commit_id":"7ee151ba4d426c1897497505d5451f4465a44dcf"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"8cdf840860b08ccc92a15cb1b65ffe7ee661403e","unresolved":false,"context_lines":[{"line_number":234,"context_line":"well it supports a given piece of hardware. At load time, IPA executes"},{"line_number":235,"context_line":"`evaluate_hardware_support()` on each hardware manager. This method should"},{"line_number":236,"context_line":"return an int representing hardware manager priority, based on what it detects"},{"line_number":237,"context_line":"about the platform its running on. Suggested values are included in the"},{"line_number":238,"context_line":"`HardwareSupport` class. Returning a value of 0 aka `HardwareSupport.NONE`,"},{"line_number":239,"context_line":"will prevent the hardware manager from being used. IPA will never ship a"},{"line_number":240,"context_line":"hardware manager with a priority higher than 3, aka"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a4dcd0f_380d0b8f","line":237,"updated":"2015-08-12 20:51:35.000000000","message":"s/its/it\u0027s/. I think...","commit_id":"7ee151ba4d426c1897497505d5451f4465a44dcf"},{"author":{"_account_id":10380,"name":"Josh Gachnang","email":"josh@pcsforeducation.com","username":"JoshNang"},"change_message_id":"fe0a80779c544fafd1309d74bb399091d267612f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"well it supports a given piece of hardware. At load time, IPA executes"},{"line_number":235,"context_line":"`evaluate_hardware_support()` on each hardware manager. This method should"},{"line_number":236,"context_line":"return an int representing hardware manager priority, based on what it detects"},{"line_number":237,"context_line":"about the platform its running on. Suggested values are included in the"},{"line_number":238,"context_line":"`HardwareSupport` class. Returning a value of 0 aka `HardwareSupport.NONE`,"},{"line_number":239,"context_line":"will prevent the hardware manager from being used. IPA will never ship a"},{"line_number":240,"context_line":"hardware manager with a priority higher than 3, aka"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a4dcd0f_fbe47d0d","line":237,"in_reply_to":"1a4dcd0f_380d0b8f","updated":"2015-08-13 17:59:34.000000000","message":"Gah, I always get that one wrong. Silly English language..","commit_id":"7ee151ba4d426c1897497505d5451f4465a44dcf"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"18092deb2452e90db1c3164e69bb3e1cf4391f3e","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    def upgrade_firmware(self, node, ports):"},{"line_number":206,"context_line":"        if self._device_exists():"},{"line_number":207,"context_line":"            # Do the upgrade"},{"line_number":208,"context_line":"            return \u0027upgraded firmware\u0027"},{"line_number":209,"context_line":"        else:"},{"line_number":210,"context_line":"            raise errors.IncompatibleHardwareMethodError()"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa1b9901_9638f9f0","line":208,"updated":"2015-08-19 19:47:55.000000000","message":"I might also add an example of \"any other exception\", but this could be a follow up patch.","commit_id":"0bc303a8ae61955f5dc7d6d1ea43066fac9e1beb"}]}
