)]}'
{"ironic/conductor/utils.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"da968f321c3f44fffd1513663c3335c02c61abb1","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    # We only ignore certain state changes. So if the desired new_state is not"},{"line_number":125,"context_line":"    # one of them, then we can return early and not do an un-needed"},{"line_number":126,"context_line":"    # get_power_state() call"},{"line_number":127,"context_line":"    if new_state not in (states.POWER_ON, states.POWER_OFF,"},{"line_number":128,"context_line":"                         states.SOFT_POWER_OFF):"},{"line_number":129,"context_line":"        return False"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f515b1d_2b4379b1","line":127,"updated":"2017-09-27 07:49:49.000000000","message":"Better to use REBOOT and SOFT_REBOOT states here obviously,\n if new_state in (states.REBOOT, states.SOFT_REBOOT):","commit_id":"31deac166f8649717c53fda05e4bed8bce9dda3c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"8e4ea8f83d44767a4e656dee5d0316d439abcdab","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    # We only ignore certain state changes. So if the desired new_state is not"},{"line_number":125,"context_line":"    # one of them, then we can return early and not do an un-needed"},{"line_number":126,"context_line":"    # get_power_state() call"},{"line_number":127,"context_line":"    if new_state not in (states.POWER_ON, states.POWER_OFF,"},{"line_number":128,"context_line":"                         states.SOFT_POWER_OFF):"},{"line_number":129,"context_line":"        return False"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f515b1d_334f646c","line":127,"in_reply_to":"7f515b1d_2b4379b1","updated":"2017-09-27 15:01:56.000000000","message":"I did it this way intentionally, because of L169 and L173.\n\nI wanted to have a match to what is checked in those lines, as those are what determine if any action is taken based on the current_state.","commit_id":"31deac166f8649717c53fda05e4bed8bce9dda3c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"980a239c355726ec4294a78162e212eb45e6b9e5","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    :returns: True if should ignore the requested power state change. False"},{"line_number":125,"context_line":"              otherwise"},{"line_number":126,"context_line":"    \"\"\""},{"line_number":127,"context_line":"    # We only ignore certain state changes. So if the desired new_state is not"},{"line_number":128,"context_line":"    # one of them, then we can return early and not do an un-needed"},{"line_number":129,"context_line":"    # get_power_state() call"},{"line_number":130,"context_line":"    if new_state not in (states.POWER_ON, states.POWER_OFF,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f515b1d_4ec45991","line":127,"updated":"2017-09-28 13:41:46.000000000","message":"wonder if this needs a NOTE(jlvillal). I can never figure that out...","commit_id":"8ceaad42ff363581efd2f43737456d479ea980d7"}],"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"a482cc287785df6f47da83f174245416352495ac","unresolved":false,"context_lines":[{"line_number":460,"context_line":"def _set_and_wait(task, power_action, driver_info, timeout\u003dNone):"},{"line_number":461,"context_line":"    \"\"\"Helper function for performing an IPMI power action"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    This method assumes the caller knows the current power state and does not"},{"line_number":464,"context_line":"    check it prior to changing the power state. Most BMCs should be fine, but"},{"line_number":465,"context_line":"    if a driver is concerned, the state should be checked prior to calling this"},{"line_number":466,"context_line":"    method."},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    :param power_action: the action Ironic will perform when changing the"},{"line_number":469,"context_line":"      power state of the node."}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_fc5c2a7f","line":466,"range":{"start_line":463,"start_character":4,"end_line":466,"end_character":11},"updated":"2017-09-26 13:18:27.000000000","message":"This isn\u0027t true any more.","commit_id":"9539ae4253558b48c6a728c3304523ede6b018c7"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"a482cc287785df6f47da83f174245416352495ac","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        LOG.warning(\"IPMI power action %(cmd)s failed for node %(node_id)s \""},{"line_number":501,"context_line":"                    \"with error: %(error)s.\","},{"line_number":502,"context_line":"                    {\u0027node_id\u0027: driver_info[\u0027uuid\u0027], \u0027cmd\u0027: cmd, \u0027error\u0027: e})"},{"line_number":503,"context_line":"    return cond_utils.node_wait_for_power_state(task, target_state,"},{"line_number":504,"context_line":"                                                timeout\u003dtimeout)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_0fa586b5","line":503,"updated":"2017-09-26 13:18:27.000000000","message":"I don\u0027t know if this is the correct solution. If I understand, the code was changed [1] to address NOT waiting for the power state if there are errors that would preclude the node from reaching that power state.\n\nI think the change here undoes (sp) what was done before.\n\nI have two thoughts:\n1. with this code change, what we want is to check the power state (we don\u0027t want to wait), so eg a. before L500, call .get_power_state() to check if the node, or in this call, change the time_out so it doesn\u0027t wait?\n2. As the docstring above (L463-466) mentions, there is an assumption. Maybe fix the place that calls this, to check the power state first? (I don\u0027t know how many places there might be...)\n\n[1] https://review.openstack.org/#/c/449454/","commit_id":"9539ae4253558b48c6a728c3304523ede6b018c7"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"328ffddecc25b578053f8b325bd06356e84e65ab","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        LOG.warning(\"IPMI power action %(cmd)s failed for node %(node_id)s \""},{"line_number":501,"context_line":"                    \"with error: %(error)s.\","},{"line_number":502,"context_line":"                    {\u0027node_id\u0027: driver_info[\u0027uuid\u0027], \u0027cmd\u0027: cmd, \u0027error\u0027: e})"},{"line_number":503,"context_line":"    return cond_utils.node_wait_for_power_state(task, target_state,"},{"line_number":504,"context_line":"                                                timeout\u003dtimeout)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_06cb281e","line":503,"in_reply_to":"7f515b1d_0fa586b5","updated":"2017-09-26 16:39:59.000000000","message":"\u003e I don\u0027t know if this is the correct solution. If I understand, the\n \u003e code was changed [1] to address NOT waiting for the power state if\n \u003e there are errors that would preclude the node from reaching that\n \u003e power state.\n \u003e \n \u003e I think the change here undoes (sp) what was done before.\n\nIt undoes some of what was done before. Since what was done before broke things.\n\n \u003e I have two thoughts:\n \u003e 1. with this code change, what we want is to check the power state\n \u003e (we don\u0027t want to wait), so eg a. before L500, call\n \u003e .get_power_state() to check if the node, or in this call, change\n \u003e the time_out so it doesn\u0027t wait?\n \u003e 2. As the docstring above (L463-466) mentions, there is an\n \u003e assumption. Maybe fix the place that calls this, to check the power\n \u003e state first? (I don\u0027t know how many places there might be...)\n\nOf those two options I would prefer #1. The only thing I don\u0027t like about it is that the caller to this function has already checked the current state, but we don\u0027t get that value. So we would need to do it again.\n\n#2 would require changing the function signature to accept a \u0027current_state\u0027 value so that we can pass it in. Since we still want to call reboot. We just want reboot to be smarter. Currently https://github.com/openstack/ironic/blob/master/ironic/conductor/utils.py#L104 is smart about power off and power on. But to make it smart about reboot we would need to pass current_state to the reboot functions of all the drivers, not just ipmitool","commit_id":"9539ae4253558b48c6a728c3304523ede6b018c7"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a59c7679ce24e475309c44cd30d8253d6ae5c8ad","unresolved":false,"context_lines":[{"line_number":831,"context_line":"          POWER_ON or the intermediate state of the node is not POWER_OFF."},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"        \"\"\""},{"line_number":834,"context_line":"        driver_info \u003d _parse_driver_info(task.node)"},{"line_number":835,"context_line":"        _power_off(task, driver_info, timeout\u003dtimeout)"},{"line_number":836,"context_line":"        driver_utils.ensure_next_boot_device(task, driver_info)"},{"line_number":837,"context_line":"        _power_on(task, driver_info, timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_264d049a","line":834,"updated":"2017-09-26 16:44:03.000000000","message":"I am going to update the logic here.","commit_id":"9539ae4253558b48c6a728c3304523ede6b018c7"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"6ae205372d73e01e254e43d758bb216181d220ff","unresolved":false,"context_lines":[{"line_number":834,"context_line":"        \"\"\""},{"line_number":835,"context_line":"        driver_info \u003d _parse_driver_info(task.node)"},{"line_number":836,"context_line":"        # NOTE(jlvillal): Some BMCs will error if setting power state to off if"},{"line_number":837,"context_line":"        # the node is already turned off."},{"line_number":838,"context_line":"        current_status \u003d _power_status(driver_info)"},{"line_number":839,"context_line":"        if current_status !\u003d states.POWER_OFF:"},{"line_number":840,"context_line":"            _power_off(task, driver_info, timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_9a3f6b24","line":837,"range":{"start_line":837,"start_character":22,"end_line":837,"end_character":29},"updated":"2017-09-26 18:43:54.000000000","message":"This will increase calls  to bmc, we always will try to get current power status. Might be do _power_off twice and check for power status if first call was failed?","commit_id":"fde851a443e8d479d18e47655700e503635381c1"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4a90ccd7150d2bdecf5ac3c9c667774e7f5dcc61","unresolved":false,"context_lines":[{"line_number":834,"context_line":"        \"\"\""},{"line_number":835,"context_line":"        driver_info \u003d _parse_driver_info(task.node)"},{"line_number":836,"context_line":"        # NOTE(jlvillal): Some BMCs will error if setting power state to off if"},{"line_number":837,"context_line":"        # the node is already turned off."},{"line_number":838,"context_line":"        current_status \u003d _power_status(driver_info)"},{"line_number":839,"context_line":"        if current_status !\u003d states.POWER_OFF:"},{"line_number":840,"context_line":"            _power_off(task, driver_info, timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_5d37aae4","line":837,"range":{"start_line":837,"start_character":22,"end_line":837,"end_character":29},"in_reply_to":"7f515b1d_6ac73a47","updated":"2017-09-26 20:25:30.000000000","message":"I have an idea to update ironic/conductor/utils.py node_power_change() so that if REBOOT is requested to not do the checking of the power state there. So we will end up with the same amount of checks of the power state.\n\nUnfortunately this has led to some yak-shaving so now I have another patch to reduce the complexity of that function so that I can make the change :(\n\nThe patch is:\nhttps://review.openstack.org/507668","commit_id":"fde851a443e8d479d18e47655700e503635381c1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7be6a20ca80987e9489ae8f0b01e38ece0792ee6","unresolved":false,"context_lines":[{"line_number":834,"context_line":"        \"\"\""},{"line_number":835,"context_line":"        driver_info \u003d _parse_driver_info(task.node)"},{"line_number":836,"context_line":"        # NOTE(jlvillal): Some BMCs will error if setting power state to off if"},{"line_number":837,"context_line":"        # the node is already turned off."},{"line_number":838,"context_line":"        current_status \u003d _power_status(driver_info)"},{"line_number":839,"context_line":"        if current_status !\u003d states.POWER_OFF:"},{"line_number":840,"context_line":"            _power_off(task, driver_info, timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_6ac73a47","line":837,"range":{"start_line":837,"start_character":22,"end_line":837,"end_character":29},"in_reply_to":"7f515b1d_9a3f6b24","updated":"2017-09-26 20:13:53.000000000","message":"Yes, I wondered how much of a difference another BMC call makes. If it can make a difference, then I think we may want to go with the \u0027more awkward\u0027 solution of passing the power state (or a flag saying whether to power off first) as an argument to this method. We can do a similar thing we did for the timeout parameter.\n\nThe alternative is to do as Vasyl suggests; after a failure, get the power status, but that would add 2 extra BMC calls...","commit_id":"fde851a443e8d479d18e47655700e503635381c1"},{"author":{"_account_id":12640,"name":"Arun S A G","email":"sagarun@gmail.com","username":"sagarun"},"change_message_id":"f011fe42c56672ba73c56d1f3e61b2cf6a25ab37","unresolved":false,"context_lines":[{"line_number":835,"context_line":"        driver_info \u003d _parse_driver_info(task.node)"},{"line_number":836,"context_line":"        # NOTE(jlvillal): Some BMCs will error if setting power state to off if"},{"line_number":837,"context_line":"        # the node is already turned off."},{"line_number":838,"context_line":"        current_status \u003d _power_status(driver_info)"},{"line_number":839,"context_line":"        if current_status !\u003d states.POWER_OFF:"},{"line_number":840,"context_line":"            _power_off(task, driver_info, timeout\u003dtimeout)"},{"line_number":841,"context_line":"        driver_utils.ensure_next_boot_device(task, driver_info)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_bacfc7ae","line":838,"range":{"start_line":838,"start_character":0,"end_line":838,"end_character":8},"updated":"2017-09-26 18:31:00.000000000","message":"This is most acceptable to me. Thanks for making the change","commit_id":"fde851a443e8d479d18e47655700e503635381c1"}],"ironic/tests/unit/drivers/modules/test_ipmitool.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"bbe7dac3decb676abafcc8cc95436488b62a1943","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    @mock.patch.object(ipmi, \u0027_power_off\u0027, spec_set\u003dtypes.FunctionType)"},{"line_number":1686,"context_line":"    @mock.patch.object(ipmi, \u0027_power_on\u0027, spec_set\u003dtypes.FunctionType)"},{"line_number":1687,"context_line":"    @mock.patch.object(ipmi, \u0027_power_status\u0027,"},{"line_number":1688,"context_line":"                       lambda driver_info: states.POWER_ON)"},{"line_number":1689,"context_line":"    def test_reboot_ok(self, mock_on, mock_off, mock_next_boot):"},{"line_number":1690,"context_line":"        manager \u003d mock.MagicMock()"},{"line_number":1691,"context_line":"        # NOTE(rloo): if autospec is True, then manager.mock_calls is empty"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_f41d5673","line":1688,"updated":"2017-09-26 17:59:17.000000000","message":"I don\u0027t really like this style, since it is diff (i.e.) not consistent with how the other two mocks above it are used. All three can be used similarly, right?\nDo we know whether ipmi._power_status() was invoked? It isn\u0027t in the list of expected (L1699) calls.","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"daa0ef3b62a5f2efe6edcffd1539eb7c98e7ca67","unresolved":false,"context_lines":[{"line_number":1685,"context_line":"    @mock.patch.object(ipmi, \u0027_power_off\u0027, spec_set\u003dtypes.FunctionType)"},{"line_number":1686,"context_line":"    @mock.patch.object(ipmi, \u0027_power_on\u0027, spec_set\u003dtypes.FunctionType)"},{"line_number":1687,"context_line":"    @mock.patch.object(ipmi, \u0027_power_status\u0027,"},{"line_number":1688,"context_line":"                       lambda driver_info: states.POWER_ON)"},{"line_number":1689,"context_line":"    def test_reboot_ok(self, mock_on, mock_off, mock_next_boot):"},{"line_number":1690,"context_line":"        manager \u003d mock.MagicMock()"},{"line_number":1691,"context_line":"        # NOTE(rloo): if autospec is True, then manager.mock_calls is empty"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_8f74cb69","line":1688,"in_reply_to":"7f515b1d_f41d5673","updated":"2017-09-26 18:13:13.000000000","message":"Since I\u0027m not checking if it is called or not, I find this method cleaner. With this method I don\u0027t need to add additional arguments into the the function signature. And don\u0027t need to add an additional mock_something.return_value \u003d states.POWER_ON","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"bbe7dac3decb676abafcc8cc95436488b62a1943","unresolved":false,"context_lines":[{"line_number":1722,"context_line":"            self.driver.power.reboot(task)"},{"line_number":1723,"context_line":"            mock_next_boot.assert_called_once_with(task, self.info)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        self.assertEqual(manager.mock_calls, expected)"},{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"    @mock.patch.object(driver_utils, \u0027ensure_next_boot_device\u0027, autospec\u003dTrue)"},{"line_number":1728,"context_line":"    @mock.patch.object(ipmi, \u0027_power_off\u0027, spec_set\u003dtypes.FunctionType)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_342ace8f","line":1725,"updated":"2017-09-26 17:59:17.000000000","message":"i guess it is a copy/paste; aren\u0027t we supposed to do .assertEqual(expected, actual)?","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"daa0ef3b62a5f2efe6edcffd1539eb7c98e7ca67","unresolved":false,"context_lines":[{"line_number":1722,"context_line":"            self.driver.power.reboot(task)"},{"line_number":1723,"context_line":"            mock_next_boot.assert_called_once_with(task, self.info)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        self.assertEqual(manager.mock_calls, expected)"},{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"    @mock.patch.object(driver_utils, \u0027ensure_next_boot_device\u0027, autospec\u003dTrue)"},{"line_number":1728,"context_line":"    @mock.patch.object(ipmi, \u0027_power_off\u0027, spec_set\u003dtypes.FunctionType)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_4fc0137c","line":1725,"in_reply_to":"7f515b1d_342ace8f","updated":"2017-09-26 18:13:13.000000000","message":"Done","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"}],"releasenotes/notes/do-not-fail-ipmitool-if-in-desired-state-1452256167d40009.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"a482cc287785df6f47da83f174245416352495ac","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fix a problem where ipmitool\u0027s error when trying to change the power state"},{"line_number":5,"context_line":"    to the power state that the node was already in would cause the deploy to"},{"line_number":6,"context_line":"    fail. Now the ipmitool failure is still logged but if the node reaches the"},{"line_number":7,"context_line":"    desired power state we do not fail.  See"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7f515b1d_5ca8de75","line":4,"updated":"2017-09-26 13:18:27.000000000","message":"nit, s/Fix/Fixes/ [1]\n\n[1] https://docs.openstack.org/ironic/latest/contributor/faq.html#create-a-new-release-note","commit_id":"9539ae4253558b48c6a728c3304523ede6b018c7"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"328ffddecc25b578053f8b325bd06356e84e65ab","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fix a problem where ipmitool\u0027s error when trying to change the power state"},{"line_number":5,"context_line":"    to the power state that the node was already in would cause the deploy to"},{"line_number":6,"context_line":"    fail. Now the ipmitool failure is still logged but if the node reaches the"},{"line_number":7,"context_line":"    desired power state we do not fail.  See"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"7f515b1d_86e27800","line":4,"in_reply_to":"7f515b1d_5ca8de75","updated":"2017-09-26 16:39:59.000000000","message":"Done","commit_id":"9539ae4253558b48c6a728c3304523ede6b018c7"}],"releasenotes/notes/reboot-do-not-power-off-if-already-1452256167d40009.yaml":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"bbe7dac3decb676abafcc8cc95436488b62a1943","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node. Now when"},{"line_number":5,"context_line":"    rebooting a node we check if the node is already off, if it is we don\u0027t"},{"line_number":6,"context_line":"    attempt to power off the node. This is because some BMCs will error if the"},{"line_number":7,"context_line":"    node is already off and attempt to power them off.  See"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_0f00db00","line":4,"updated":"2017-09-26 17:59:17.000000000","message":"would be good to know what the problem is -- the reboot (and hence deploy?) fails.","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"daa0ef3b62a5f2efe6edcffd1539eb7c98e7ca67","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node. Now when"},{"line_number":5,"context_line":"    rebooting a node we check if the node is already off, if it is we don\u0027t"},{"line_number":6,"context_line":"    attempt to power off the node. This is because some BMCs will error if the"},{"line_number":7,"context_line":"    node is already off and attempt to power them off.  See"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_0fa21baf","line":4,"in_reply_to":"7f515b1d_0f00db00","updated":"2017-09-26 18:13:13.000000000","message":"Done","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d68c823166e2d08eeb05c13d3e3416029e79e700","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node. Now when"},{"line_number":5,"context_line":"    rebooting a node we check if the node is already off, if it is we don\u0027t"},{"line_number":6,"context_line":"    attempt to power off the node. This is because some BMCs will error if the"},{"line_number":7,"context_line":"    node is already off and attempt to power them off.  See"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_afae6795","line":4,"in_reply_to":"7f515b1d_0f00db00","updated":"2017-09-26 18:09:41.000000000","message":"sorry, the problem reported was a deployment failure but in the general \u0027reboot\u0027 case, this will fail. so the problem is that rebooting a node fails when using ipmitool and the node was powered off, right?","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"bbe7dac3decb676abafcc8cc95436488b62a1943","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node. Now when"},{"line_number":5,"context_line":"    rebooting a node we check if the node is already off, if it is we don\u0027t"},{"line_number":6,"context_line":"    attempt to power off the node. This is because some BMCs will error if the"},{"line_number":7,"context_line":"    node is already off and attempt to power them off.  See"},{"line_number":8,"context_line":"    https://bugs.launchpad.net/ironic/+bug/1718794 for details."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_ef021f09","line":5,"updated":"2017-09-26 17:59:17.000000000","message":"maybe s/off/powered off/","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"bbe7dac3decb676abafcc8cc95436488b62a1943","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node. Now when"},{"line_number":5,"context_line":"    rebooting a node we check if the node is already off, if it is we don\u0027t"},{"line_number":6,"context_line":"    attempt to power off the node. This is because some BMCs will error if the"},{"line_number":7,"context_line":"    node is already off and attempt to power them off.  See"},{"line_number":8,"context_line":"    https://bugs.launchpad.net/ironic/+bug/1718794 for details."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_6f650fe1","line":7,"updated":"2017-09-26 17:59:17.000000000","message":"there\u0027s something missing here. Maybe \u0027if the node is already powered off and an ipmitool request is made to power them off.\u0027 Ugh.\n\nIs it the BMC that errors, or the ipmitool command that returns an error?","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"daa0ef3b62a5f2efe6edcffd1539eb7c98e7ca67","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node. Now when"},{"line_number":5,"context_line":"    rebooting a node we check if the node is already off, if it is we don\u0027t"},{"line_number":6,"context_line":"    attempt to power off the node. This is because some BMCs will error if the"},{"line_number":7,"context_line":"    node is already off and attempt to power them off.  See"},{"line_number":8,"context_line":"    https://bugs.launchpad.net/ironic/+bug/1718794 for details."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_cf0f63df","line":7,"in_reply_to":"7f515b1d_6f650fe1","updated":"2017-09-26 18:13:13.000000000","message":"The BMC errors and then ipmitool errors. So both.","commit_id":"6fd90e42102a616aa97054612404a11eba25e793"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"980a239c355726ec4294a78162e212eb45e6b9e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes a problem when using ipmitool and rebooting a node which would cause"},{"line_number":5,"context_line":"    a deploy to fail. Now when rebooting a node we check if the node is already"},{"line_number":6,"context_line":"    powered off, if it is we don\u0027t attempt to power off the node. This is"},{"line_number":7,"context_line":"    because some BMCs will error if the node is already powered off and an"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"7f515b1d_516bdc1c","line":4,"updated":"2017-09-28 13:41:46.000000000","message":"what do you think about \u0027Fixes a node rebooting failure when using ipmitool; this would cause deploys to fail.\u0027\n\nbecause the reboot could fail if a user just tries to reboot the node.","commit_id":"8ceaad42ff363581efd2f43737456d479ea980d7"}]}
