)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Implements: blueprint soft-reboot-poweroff"},{"line_number":15,"context_line":"Co-Authored-By: Tang Chen \u003cchen.tang@easystack.cn\u003e"},{"line_number":16,"context_line":"Co-Authored-By: xiexs \u003cxiexs@cn.fujitsu.com\u003e"},{"line_number":17,"context_line":"Depends-On: Icd2859784f3df85c08162c14464bce58067aab1d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da4df55a_32012a6b","line":17,"updated":"2016-12-27 20:48:22.000000000","message":"This is the wrong dependency for the nova change really. This nova change is going to require a global-requirements change in the openstack/requirements repo which bumps the minimum required version of python-ironicclient which contains https://review.openstack.org/#/c/247904/ and then this nova change is going to want to bump the same minimum version of ironicclient in nova\u0027s requirements.txt.","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"}],"doc/api_samples/versions/v21-version-get-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a8cc400b6133c7d86f345c4d7eafd73b158b14f5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"            }"},{"line_number":20,"context_line":"        ],"},{"line_number":21,"context_line":"        \"status\": \"CURRENT\","},{"line_number":22,"context_line":"        \"version\": \"2.40\","},{"line_number":23,"context_line":"        \"min_version\": \"2.1\","},{"line_number":24,"context_line":"        \"updated\": \"2013-07-23T11:33:21Z\""},{"line_number":25,"context_line":"    }"}],"source_content_type":"application/json","patch_set":1,"id":"3a71b18c_ddaedf80","line":22,"updated":"2016-12-07 13:16:11.000000000","message":"I didn\u0027t expect to bump the microveresion for a feature parity change in a virt driver. API changes require a spec, so this would have to go through spec review, but again I didn\u0027t plan on updating microversions for this.","commit_id":"1b0d0c2c5cf1926957dc4e8004a800726d1fe15a"}],"nova/cells/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a8cc400b6133c7d86f345c4d7eafd73b158b14f5","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        self.msg_runner.start_instance(ctxt, instance)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def stop_instance(self, ctxt, instance, do_cast\u003dTrue,"},{"line_number":471,"context_line":"                      clean_shutdown\u003dTrue, ironic_soft\u003dFalse):"},{"line_number":472,"context_line":"        \"\"\"Stop an instance in its cell.\"\"\""},{"line_number":473,"context_line":"        response \u003d self.msg_runner.stop_instance(ctxt, instance,"},{"line_number":474,"context_line":"                                                 do_cast\u003ddo_cast,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_dde5ffdc","line":471,"updated":"2016-12-07 13:16:11.000000000","message":"We don\u0027t want to be changing any of the cells v1 code or adding new support to it.","commit_id":"1b0d0c2c5cf1926957dc4e8004a800726d1fe15a"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a8cc400b6133c7d86f345c4d7eafd73b158b14f5","unresolved":false,"context_lines":[{"line_number":2175,"context_line":"             ironic_soft\u003dFalse):"},{"line_number":2176,"context_line":"        \"\"\"Stop an instance.\"\"\""},{"line_number":2177,"context_line":"        self.force_stop(context, instance, do_cast, clean_shutdown,"},{"line_number":2178,"context_line":"                        ironic_soft\u003dironic_soft)"},{"line_number":2179,"context_line":""},{"line_number":2180,"context_line":"    @check_instance_lock"},{"line_number":2181,"context_line":"    @check_instance_host"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_1df7778d","line":2178,"range":{"start_line":2178,"start_character":24,"end_line":2178,"end_character":35},"updated":"2016-12-07 13:16:11.000000000","message":"We shouldn\u0027t have to leak any virt-specific things into the API. What makes Ironic soft power off different from the libvirt soft power off?","commit_id":"1b0d0c2c5cf1926957dc4e8004a800726d1fe15a"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1431,"context_line":"        mock_looping.return_value \u003d fake_looping_call"},{"line_number":1432,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.ctx,"},{"line_number":1433,"context_line":"                                                   node\u003dself.instance_uuid)"},{"line_number":1434,"context_line":"        self.driver.power_off(instance, timeout, 0)"},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver,"},{"line_number":1437,"context_line":"                       \u0027_validate_instance_and_node\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_be0e2e32","line":1434,"updated":"2017-01-19 21:51:37.000000000","message":"I\u0027m not crazy about this. It seems to me that you could either\n1. get rid of _test_power_on_off() and have a helper eg _test_power_off(..timeout)\nor 2. update _test_power_on_off to include this functionality. I think you can pass timeout to that method and if method_name \u003d\u003d \u0027power_off\u0027, make this call?\n\nAlso, the way it is now, the test_power_off() is separate from your new tests, and it\u0027d make things easier if they were together, since they are testing the same method.","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1431,"context_line":"        mock_looping.return_value \u003d fake_looping_call"},{"line_number":1432,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.ctx,"},{"line_number":1433,"context_line":"                                                   node\u003dself.instance_uuid)"},{"line_number":1434,"context_line":"        self.driver.power_off(instance, timeout, 0)"},{"line_number":1435,"context_line":""},{"line_number":1436,"context_line":"    @mock.patch.object(ironic_driver.IronicDriver,"},{"line_number":1437,"context_line":"                       \u0027_validate_instance_and_node\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_a7c9b17a","line":1434,"in_reply_to":"5a3905b3_be0e2e32","updated":"2017-01-20 06:10:09.000000000","message":"I chose a former way.","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"}],"nova/virt/ironic/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a8cc400b6133c7d86f345c4d7eafd73b158b14f5","unresolved":false,"context_lines":[{"line_number":977,"context_line":"            this driver."},{"line_number":978,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":979,"context_line":"            for it to shutdown. Ignored by this driver."},{"line_number":980,"context_line":"        :param ironic_soft: True to allow ironic to do soft power off."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":"        LOG.debug(\u0027Power off called for instance\u0027, instance\u003dinstance)"},{"line_number":983,"context_line":"        node \u003d self._validate_instance_and_node(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_9d5e2778","line":980,"updated":"2016-12-07 13:16:11.000000000","message":"I believe the other virt drivers, at least libvirt, attempt a soft poweroff, there might be config options for it. But I\u0027d think as long as Ironic is at a high enough microversion to support soft poweroff, and I thought there was a microversion going into the Ironic API for that - then we\u0027d attempt soft automatically and then if that fails, we hard poweroff the system. But I really don\u0027t think we need to pass flags all the way down from the REST API to get here to tell the driver to do this. For example, if I have Ocata nova code but Newton Ironic code, the microversion passed in could tell the driver to do soft power off but Ironic wouldn\u0027t know how to do that yet - we really need to just be checking the Ironic microversion for this capability I think.","commit_id":"1b0d0c2c5cf1926957dc4e8004a800726d1fe15a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1013,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1014,"context_line":"                    LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1015,"context_line":"                                 node.uuid, instance\u003dinstance)"},{"line_number":1016,"context_line":"                    return"},{"line_number":1017,"context_line":"                LOG.warning(_LW(\"Error soft power off for instance: \""},{"line_number":1018,"context_line":"                                \"%(instance)s on baremetal node %(node)s: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_52a5ce9f","line":1015,"updated":"2016-12-27 20:48:22.000000000","message":"nit: align these args with _LI above.","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":1014,"context_line":"                    LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1015,"context_line":"                                 node.uuid, instance\u003dinstance)"},{"line_number":1016,"context_line":"                    return"},{"line_number":1017,"context_line":"                LOG.warning(_LW(\"Error soft power off for instance: \""},{"line_number":1018,"context_line":"                                \"%(instance)s on baremetal node %(node)s: \""},{"line_number":1019,"context_line":"                                \"%(reason)s\"),"},{"line_number":1020,"context_line":"                                {\u0027instance\u0027: instance.uuid,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_b2bfdaa8","line":1017,"updated":"2016-12-27 20:48:22.000000000","message":"We should reword this a bit. Maybe something like:\n\n\"Failed to soft power-off instance %(instance)s on baremetal node %(node)s within the required timeout %(timeout)s. Attempting hard power off.\"","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"                    return"},{"line_number":1017,"context_line":"                LOG.warning(_LW(\"Error soft power off for instance: \""},{"line_number":1018,"context_line":"                                \"%(instance)s on baremetal node %(node)s: \""},{"line_number":1019,"context_line":"                                \"%(reason)s\"),"},{"line_number":1020,"context_line":"                                {\u0027instance\u0027: instance.uuid,"},{"line_number":1021,"context_line":"                                 \u0027node\u0027: node.uuid})"},{"line_number":1022,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_72c9f258","line":1019,"range":{"start_line":1019,"start_character":35,"end_line":1019,"end_character":41},"updated":"2016-12-27 20:48:22.000000000","message":"You don\u0027t have a replacement variable for this reason kwarg.","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"                LOG.warning(_LW(\"Error soft power off for instance: \""},{"line_number":1018,"context_line":"                                \"%(instance)s on baremetal node %(node)s: \""},{"line_number":1019,"context_line":"                                \"%(reason)s\"),"},{"line_number":1020,"context_line":"                                {\u0027instance\u0027: instance.uuid,"},{"line_number":1021,"context_line":"                                 \u0027node\u0027: node.uuid})"},{"line_number":1022,"context_line":"            except Exception as e:"},{"line_number":1023,"context_line":"                # NOTE: When an error occurred, do hard power off. It includes"},{"line_number":1024,"context_line":"                #       a case ironic has not been upgraded to support soft"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_72a2d29a","line":1021,"range":{"start_line":1020,"start_character":32,"end_line":1021,"end_character":51},"updated":"2016-12-27 20:48:22.000000000","message":"nit: align these with _LW above.","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"                # NOTE: When an error occurred, do hard power off. It includes"},{"line_number":1024,"context_line":"                #       a case ironic has not been upgraded to support soft"},{"line_number":1025,"context_line":"                #       power off."},{"line_number":1026,"context_line":"                LOG.warning(_LW(\"Error soft power off for instance: \""},{"line_number":1027,"context_line":"                              \"%(instance)s on baremetal node %(node)s: \""},{"line_number":1028,"context_line":"                              \"%(reason)s\"),"},{"line_number":1029,"context_line":"                            {\u0027instance\u0027: instance.uuid,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_d2de1e10","line":1026,"updated":"2016-12-27 20:48:22.000000000","message":"Similar comment on the wording of this, except in this case I\u0027d replace the timeout part of the message with the error (which has the reason kwarg).","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":990,"context_line":"        :param instance: The instance object."},{"line_number":991,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":992,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":993,"context_line":"            for it to shutdown. Ignored by this driver."},{"line_number":994,"context_line":"        \"\"\""},{"line_number":995,"context_line":"        LOG.debug(\u0027Power off called for instance\u0027, instance\u003dinstance)"},{"line_number":996,"context_line":"        node \u003d self._validate_instance_and_node(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_8ba692bf","line":993,"updated":"2017-01-19 21:51:37.000000000","message":"I want to make sure you didn\u0027t forget to use this, vs ignoring it. (I\u0027m not sure what it is for.)","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":990,"context_line":"        :param instance: The instance object."},{"line_number":991,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":992,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":993,"context_line":"            for it to shutdown. Ignored by this driver."},{"line_number":994,"context_line":"        \"\"\""},{"line_number":995,"context_line":"        LOG.debug(\u0027Power off called for instance\u0027, instance\u003dinstance)"},{"line_number":996,"context_line":"        node \u003d self._validate_instance_and_node(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_91507760","line":993,"in_reply_to":"5a3905b3_8ba692bf","updated":"2017-01-20 06:10:09.000000000","message":"I added description.","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1006,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1007,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1008,"context_line":"                    LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1009,"context_line":"                             node.uuid, instance\u003dinstance)"},{"line_number":1010,"context_line":"                    return"},{"line_number":1011,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_cb5c1a28","line":1008,"updated":"2017-01-19 21:51:37.000000000","message":"nit: do you want to mention that it was a soft power off?","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1006,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1007,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1008,"context_line":"                    LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1009,"context_line":"                             node.uuid, instance\u003dinstance)"},{"line_number":1010,"context_line":"                    return"},{"line_number":1011,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_91223700","line":1008,"in_reply_to":"5a3905b3_cb5c1a28","updated":"2017-01-20 06:10:09.000000000","message":"Done","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"                    LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1009,"context_line":"                             node.uuid, instance\u003dinstance)"},{"line_number":1010,"context_line":"                    return"},{"line_number":1011,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1012,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1013,"context_line":"                                \"within the required timeout %(timeout)s. \""},{"line_number":1014,"context_line":"                                \"Attempting hard power off.\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_eb3ab6cc","line":1011,"updated":"2017-01-19 21:51:37.000000000","message":"for reboot, it was LOG.info. Should this also be LOG.info? (I don\u0027t really know, just asking.)","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"                    LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1009,"context_line":"                             node.uuid, instance\u003dinstance)"},{"line_number":1010,"context_line":"                    return"},{"line_number":1011,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1012,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1013,"context_line":"                                \"within the required timeout %(timeout)s. \""},{"line_number":1014,"context_line":"                                \"Attempting hard power off.\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_f15e1be8","line":1011,"in_reply_to":"5a3905b3_eb3ab6cc","updated":"2017-01-20 06:10:09.000000000","message":"I changed it to LOG.info because libvirt driver uses LOG.info when timeout is expired[1].\n\n[1] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L2478","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                    return"},{"line_number":1011,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1012,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1013,"context_line":"                                \"within the required timeout %(timeout)s. \""},{"line_number":1014,"context_line":"                                \"Attempting hard power off.\"),"},{"line_number":1015,"context_line":"                            {\u0027instance\u0027: instance.uuid,"},{"line_number":1016,"context_line":"                             \u0027timeout\u0027: timeout,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_0b6622ed","line":1013,"updated":"2017-01-19 21:51:37.000000000","message":"would it be useful to mention the unit for the timeout value (seconds, right?)","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                    return"},{"line_number":1011,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1012,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1013,"context_line":"                                \"within the required timeout %(timeout)s. \""},{"line_number":1014,"context_line":"                                \"Attempting hard power off.\"),"},{"line_number":1015,"context_line":"                            {\u0027instance\u0027: instance.uuid,"},{"line_number":1016,"context_line":"                             \u0027timeout\u0027: timeout,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_71730b81","line":1013,"in_reply_to":"5a3905b3_0b6622ed","updated":"2017-01-20 06:10:09.000000000","message":"Done","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"                            {\u0027instance\u0027: instance.uuid,"},{"line_number":1016,"context_line":"                             \u0027timeout\u0027: timeout,"},{"line_number":1017,"context_line":"                             \u0027node\u0027: node.uuid})"},{"line_number":1018,"context_line":"            except Exception as e:"},{"line_number":1019,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1020,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1021,"context_line":"                                \"due to error: %(reason)s. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_6be9661a","line":1018,"updated":"2017-01-19 21:51:37.000000000","message":"are we (well nova) ok with this as opposed to explicit ironic.exc. exceptions?","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"                            {\u0027instance\u0027: instance.uuid,"},{"line_number":1016,"context_line":"                             \u0027timeout\u0027: timeout,"},{"line_number":1017,"context_line":"                             \u0027node\u0027: node.uuid})"},{"line_number":1018,"context_line":"            except Exception as e:"},{"line_number":1019,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1020,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1021,"context_line":"                                \"due to error: %(reason)s. \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_91d797be","line":1018,"in_reply_to":"5a3905b3_6be9661a","updated":"2017-01-20 06:10:09.000000000","message":"Catching only ironic.exc seems better.","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"                             \u0027timeout\u0027: timeout,"},{"line_number":1017,"context_line":"                             \u0027node\u0027: node.uuid})"},{"line_number":1018,"context_line":"            except Exception as e:"},{"line_number":1019,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1020,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1021,"context_line":"                                \"due to error: %(reason)s. \""},{"line_number":1022,"context_line":"                                \"Attempting hard power off.\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_abab4e88","line":1019,"updated":"2017-01-19 21:51:37.000000000","message":"ditto about .warning instead of .info","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"                             \u0027timeout\u0027: timeout,"},{"line_number":1017,"context_line":"                             \u0027node\u0027: node.uuid})"},{"line_number":1018,"context_line":"            except Exception as e:"},{"line_number":1019,"context_line":"                LOG.warning(_LW(\"Failed to soft power off instance \""},{"line_number":1020,"context_line":"                                \"%(instance)s on baremetal node %(node)s \""},{"line_number":1021,"context_line":"                                \"due to error: %(reason)s. \""},{"line_number":1022,"context_line":"                                \"Attempting hard power off.\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_b121f3fd","line":1019,"in_reply_to":"5a3905b3_abab4e88","updated":"2017-01-20 06:10:09.000000000","message":"Done","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1029,"context_line":"                    self._wait_for_power_state, instance, \u0027power off\u0027)"},{"line_number":1030,"context_line":"        timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1031,"context_line":"        LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1032,"context_line":"                 node.uuid, instance\u003dinstance)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"    def power_on(self, context, instance, network_info,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_4b9d8a64","line":1031,"updated":"2017-01-19 21:51:37.000000000","message":"don\u0027t know if you want to mention that it was a hard power off.","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1029,"context_line":"                    self._wait_for_power_state, instance, \u0027power off\u0027)"},{"line_number":1030,"context_line":"        timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1031,"context_line":"        LOG.info(_LI(\u0027Successfully powered off Ironic node %s\u0027),"},{"line_number":1032,"context_line":"                 node.uuid, instance\u003dinstance)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"    def power_on(self, context, instance, network_info,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_b1e653b2","line":1031,"in_reply_to":"5a3905b3_4b9d8a64","updated":"2017-01-20 06:10:09.000000000","message":"Done","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a30e8be4b1fbd859468db906a26e8db2bbac69f7","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"              and recreate the instance; it preserves local state."},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        :param instance: The instance object."},{"line_number":1045,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":1046,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":1047,"context_line":"            for it to shutdown. Ignored by this driver. Retrying depends on"},{"line_number":1048,"context_line":"            Ironic hardware driver."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_e94963b8","line":1045,"updated":"2017-01-23 13:59:14.000000000","message":"Maybe we should add something here that timeout implies a soft shutdown?","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"5c4bacda159a725ebc267518bedc13170a975fd3","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"              and recreate the instance; it preserves local state."},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        :param instance: The instance object."},{"line_number":1045,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":1046,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":1047,"context_line":"            for it to shutdown. Ignored by this driver. Retrying depends on"},{"line_number":1048,"context_line":"            Ironic hardware driver."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_4dafb57c","line":1045,"in_reply_to":"5a3905b3_28718e76","updated":"2017-01-24 10:10:10.000000000","message":"Done","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"073e71054d3f86eecfd7f16ccb6e88aa1d2f6c4f","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"              and recreate the instance; it preserves local state."},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"        :param instance: The instance object."},{"line_number":1045,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":1046,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":1047,"context_line":"            for it to shutdown. Ignored by this driver. Retrying depends on"},{"line_number":1048,"context_line":"            Ironic hardware driver."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_28718e76","line":1045,"in_reply_to":"5a3905b3_e94963b8","updated":"2017-01-23 23:33:23.000000000","message":"+1","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"073e71054d3f86eecfd7f16ccb6e88aa1d2f6c4f","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":1046,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":1047,"context_line":"            for it to shutdown. Ignored by this driver. Retrying depends on"},{"line_number":1048,"context_line":"            Ironic hardware driver."},{"line_number":1049,"context_line":"        \"\"\""},{"line_number":1050,"context_line":"        LOG.debug(\u0027Power off called for instance\u0027, instance\u003dinstance)"},{"line_number":1051,"context_line":"        node \u003d self._validate_instance_and_node(instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_a8ef3e1c","line":1048,"updated":"2017-01-23 23:33:23.000000000","message":"would it be useful to pass this value down to the hardware driver then? Something to add in the future?","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"5c4bacda159a725ebc267518bedc13170a975fd3","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"        :param timeout: time to wait for node to shutdown."},{"line_number":1046,"context_line":"        :param retry_interval: How often to signal node while waiting"},{"line_number":1047,"context_line":"            for it to shutdown. Ignored by this driver. Retrying depends on"},{"line_number":1048,"context_line":"            Ironic hardware driver."},{"line_number":1049,"context_line":"        \"\"\""},{"line_number":1050,"context_line":"        LOG.debug(\u0027Power off called for instance\u0027, instance\u003dinstance)"},{"line_number":1051,"context_line":"        node \u003d self._validate_instance_and_node(instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_081bdb81","line":1048,"in_reply_to":"5a3905b3_a8ef3e1c","updated":"2017-01-24 10:10:10.000000000","message":"I don\u0027t think it\u0027s quite important because just a constant value is passed[1].\n\n[1] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L496","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"073e71054d3f86eecfd7f16ccb6e88aa1d2f6c4f","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"                LOG.info(_LI(\"Failed to soft power off instance \""},{"line_number":1068,"context_line":"                             \"%(instance)s on baremetal node %(node)s \""},{"line_number":1069,"context_line":"                             \"within the required timeout %(timeout)d \""},{"line_number":1070,"context_line":"                             \"seconds. Attempting hard power off.\"),"},{"line_number":1071,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1072,"context_line":"                          \u0027timeout\u0027: timeout,"},{"line_number":1073,"context_line":"                          \u0027node\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_06eda2b6","line":1070,"updated":"2017-01-23 23:33:23.000000000","message":"How do you know that the soft power-off failed due to the timeout, as opposed to failing for some other reason? And if it failed for some other reason, do we still want to try a hard power-off?","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"5c4bacda159a725ebc267518bedc13170a975fd3","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"                LOG.info(_LI(\"Failed to soft power off instance \""},{"line_number":1068,"context_line":"                             \"%(instance)s on baremetal node %(node)s \""},{"line_number":1069,"context_line":"                             \"within the required timeout %(timeout)d \""},{"line_number":1070,"context_line":"                             \"seconds. Attempting hard power off.\"),"},{"line_number":1071,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1072,"context_line":"                          \u0027timeout\u0027: timeout,"},{"line_number":1073,"context_line":"                          \u0027node\u0027: node.uuid})"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_8d051d47","line":1070,"in_reply_to":"5a3905b3_06eda2b6","updated":"2017-01-24 10:10:10.000000000","message":"Other errors can happen. It would be OK to try hard power off after these errors. I added log for node.last_error for detail.","commit_id":"88aa948add443a6e01f15e1cd1c58ed01ea589e1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e39d190b7f1398f766eb3129082e46b4c830ab1e","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"                                       \u0027off\u0027, soft\u003dTrue, timeout\u003dtimeout)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"                timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1060,"context_line":"                    self._wait_for_power_state, instance, \u0027soft power off\u0027)"},{"line_number":1061,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1062,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1063,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_daa98291","line":1060,"range":{"start_line":1060,"start_character":59,"end_line":1060,"end_character":73},"updated":"2017-01-24 17:28:18.000000000","message":"Is this ever translated on the Ironic API side? Or is it just a hard-coded status value?","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"db9a227223f82a0d76f5c5428902d044051e9957","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"                                       \u0027off\u0027, soft\u003dTrue, timeout\u003dtimeout)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"                timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1060,"context_line":"                    self._wait_for_power_state, instance, \u0027soft power off\u0027)"},{"line_number":1061,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1062,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1063,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_50a9f223","line":1060,"range":{"start_line":1060,"start_character":59,"end_line":1060,"end_character":73},"in_reply_to":"5a3905b3_daa98291","updated":"2017-01-24 17:55:03.000000000","message":"How to answer... the actual state string is hardcoded and it is \u0027soft power off\u0027. However, in ._wait_for_power_state(), this string is only used when doing a LOG.debug (L440, 113 above).","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e39d190b7f1398f766eb3129082e46b4c830ab1e","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"                timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1060,"context_line":"                    self._wait_for_power_state, instance, \u0027soft power off\u0027)"},{"line_number":1061,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1062,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1063,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1064,"context_line":"                    LOG.info(_LI(\u0027Successfully soft powered off Ironic node \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_7a708e40","line":1061,"range":{"start_line":1061,"start_character":37,"end_line":1061,"end_character":67},"updated":"2017-01-24 17:28:18.000000000","message":"I\u0027m not sure why we wouldn\u0027t use the \u0027retry_interval\u0027 argument here if we\u0027re specifying a retry interval on the nova side anyway. I realize this isn\u0027t the retry for power off, but it\u0027s a retry interval for waiting on the power state change.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ffb306f43130aac7c1376e8f15064176b168bc8b","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"                timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1060,"context_line":"                    self._wait_for_power_state, instance, \u0027soft power off\u0027)"},{"line_number":1061,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1062,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1063,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1064,"context_line":"                    LOG.info(_LI(\u0027Successfully soft powered off Ironic node \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_e05ae84f","line":1061,"range":{"start_line":1061,"start_character":37,"end_line":1061,"end_character":67},"in_reply_to":"5a3905b3_2a7146e1","updated":"2017-01-25 10:19:19.000000000","message":"Hmm, it feels correct to me that the retrying of the reboot is dealt with by ironic, at least in the first version. As its hammering a REST API, the regular retry interval seems good for polling the instance state.\n\nWe should follow up around the retry logic, but I would rather we add that here because its needed, rather than for consistency.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"db9a227223f82a0d76f5c5428902d044051e9957","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"                timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1060,"context_line":"                    self._wait_for_power_state, instance, \u0027soft power off\u0027)"},{"line_number":1061,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1062,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1063,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1064,"context_line":"                    LOG.info(_LI(\u0027Successfully soft powered off Ironic node \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_b36140ab","line":1061,"range":{"start_line":1061,"start_character":37,"end_line":1061,"end_character":67},"in_reply_to":"5a3905b3_7a708e40","updated":"2017-01-24 17:55:03.000000000","message":"I wondered, but the description for the retry_interval is \u0027how often to signal the node while waiting...\u0027. Does \u0027signal\u0027 mean resending the power off command, or ??","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e95fc37346b6767fb66153226bd6f38c15004df4","unresolved":false,"context_lines":[{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"                timer \u003d loopingcall.FixedIntervalLoopingCall("},{"line_number":1060,"context_line":"                    self._wait_for_power_state, instance, \u0027soft power off\u0027)"},{"line_number":1061,"context_line":"                timer.start(interval\u003dCONF.ironic.api_retry_interval).wait()"},{"line_number":1062,"context_line":"                node \u003d self._validate_instance_and_node(instance)"},{"line_number":1063,"context_line":"                if node.power_state \u003d\u003d ironic_states.POWER_OFF:"},{"line_number":1064,"context_line":"                    LOG.info(_LI(\u0027Successfully soft powered off Ironic node \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_2a7146e1","line":1061,"range":{"start_line":1061,"start_character":37,"end_line":1061,"end_character":67},"in_reply_to":"5a3905b3_b36140ab","updated":"2017-01-24 21:43:40.000000000","message":"Yeah it really means, how many times should the driver try to shutdown the guest in case a previous request wasn\u0027t processed. At least that\u0027s how it\u0027s implemented in the libvirt driver which is what started with the graceful shutdown functionality. So I\u0027m not sure if that makes sense for Ironic or not. If we made the request and it was processed successfully, then we should be OK until the node is shutdown or we timeout. I don\u0027t know how re-sending the soft power off request would be handled on the Ironic side, maybe we\u0027d get 409s back or something.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a3b10091c3f8edb1c2a5c9f36e6a071912220aa8","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1074,"context_line":"                          \u0027timeout\u0027: timeout,"},{"line_number":1075,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1076,"context_line":"                          \u0027reason\u0027: node.last_error})"},{"line_number":1077,"context_line":"            except ironic.exc.ClientException as e:"},{"line_number":1078,"context_line":"                LOG.info(_LI(\"Failed to soft power off instance \""},{"line_number":1079,"context_line":"                             \"%(instance)s on baremetal node %(node)s \""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_6ef8b0c5","line":1076,"updated":"2017-01-25 07:08:26.000000000","message":"No, this should use the instance\u003dinstance syntax on the log message.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"7da192eff7f49e1213d5505fb8e0697345fe3155","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1074,"context_line":"                          \u0027timeout\u0027: timeout,"},{"line_number":1075,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1076,"context_line":"                          \u0027reason\u0027: node.last_error})"},{"line_number":1077,"context_line":"            except ironic.exc.ClientException as e:"},{"line_number":1078,"context_line":"                LOG.info(_LI(\"Failed to soft power off instance \""},{"line_number":1079,"context_line":"                             \"%(instance)s on baremetal node %(node)s \""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_342a7ae8","line":1076,"in_reply_to":"5a3905b3_6ef8b0c5","updated":"2017-01-25 08:53:11.000000000","message":"Done","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6f50e4849ffe84e36100d5dcdd40e940c359a1e0","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                             \"Attempting hard power off.\"),"},{"line_number":1082,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1083,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1084,"context_line":"                          \u0027reason\u0027: e})"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        self.ironicclient.call(\"node.set_power_state\", node.uuid, \u0027off\u0027)"},{"line_number":1087,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_9048c8cd","line":1084,"updated":"2017-01-24 14:17:08.000000000","message":"nit: I don\u0027t think it is a big deal, but this LOG string is very similar to the one at L1068. Wondering if it makes sense to just have that string once (I\u0027m not sure whether nova cares or not.)","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ffb306f43130aac7c1376e8f15064176b168bc8b","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                             \"Attempting hard power off.\"),"},{"line_number":1082,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1083,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1084,"context_line":"                          \u0027reason\u0027: e})"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        self.ironicclient.call(\"node.set_power_state\", node.uuid, \u0027off\u0027)"},{"line_number":1087,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_a0b460d1","line":1084,"in_reply_to":"5a3905b3_7434024a","updated":"2017-01-25 10:19:19.000000000","message":"But its not being passed as an argument here, but I think it should be passed as an argument, along with the formatting info I guess.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e39d190b7f1398f766eb3129082e46b4c830ab1e","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                             \"Attempting hard power off.\"),"},{"line_number":1082,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1083,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1084,"context_line":"                          \u0027reason\u0027: e})"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        self.ironicclient.call(\"node.set_power_state\", node.uuid, \u0027off\u0027)"},{"line_number":1087,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_95c98d28","line":1084,"in_reply_to":"5a3905b3_9048c8cd","updated":"2017-01-24 17:28:18.000000000","message":"One is a timeout case, the other is just a failure, so I\u0027m fine with separate messages.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"a3b10091c3f8edb1c2a5c9f36e6a071912220aa8","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                             \"Attempting hard power off.\"),"},{"line_number":1082,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1083,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1084,"context_line":"                          \u0027reason\u0027: e})"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        self.ironicclient.call(\"node.set_power_state\", node.uuid, \u0027off\u0027)"},{"line_number":1087,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_ceffe4a8","line":1084,"in_reply_to":"5a3905b3_95c98d28","updated":"2017-01-25 07:08:26.000000000","message":"This should use the instance\u003dinstance syntax.","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"7da192eff7f49e1213d5505fb8e0697345fe3155","unresolved":false,"context_lines":[{"line_number":1081,"context_line":"                             \"Attempting hard power off.\"),"},{"line_number":1082,"context_line":"                         {\u0027instance\u0027: instance.uuid,"},{"line_number":1083,"context_line":"                          \u0027node\u0027: node.uuid,"},{"line_number":1084,"context_line":"                          \u0027reason\u0027: e})"},{"line_number":1085,"context_line":""},{"line_number":1086,"context_line":"        self.ironicclient.call(\"node.set_power_state\", node.uuid, \u0027off\u0027)"},{"line_number":1087,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall("}],"source_content_type":"text/x-python","patch_set":8,"id":"5a3905b3_7434024a","line":1084,"in_reply_to":"5a3905b3_ceffe4a8","updated":"2017-01-25 08:53:11.000000000","message":"Done","commit_id":"8b0cc4d4c3a21bb3bbff00cd37a942baeeeab396"}],"releasenotes/notes/bp-soft-reboot-poweroff-6215d216a6aedafa.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e192a245c2870b03f966ccb6feb413743d0ac77","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds soft power off support to ironic virt driver."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"da4df55a_f2e322d7","line":3,"range":{"start_line":3,"start_character":35,"end_line":3,"end_character":41},"updated":"2016-12-27 20:48:22.000000000","message":"s/ironic/Ironic/\n\nAlso, we should note the required minimum microversion of Ironic to make this work.","commit_id":"dd69cf5458c14696b5f1908927d5e58439e54815"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5dce3516563754379bb43429ccc64a5d05677e99","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds soft power off support to Ironic virt driver. This feature requires"},{"line_number":4,"context_line":"    the Ironic service to support API version 1.27 or later. It also requires"},{"line_number":5,"context_line":"    python-ironicclient \u003e\u003d 1.10.0"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5a3905b3_28fda43a","line":5,"updated":"2017-01-19 21:51:37.000000000","message":"nit: should end in a period.","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"c7991cdd46f9e3a69d35d87108daaf0659260c3d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds soft power off support to Ironic virt driver. This feature requires"},{"line_number":4,"context_line":"    the Ironic service to support API version 1.27 or later. It also requires"},{"line_number":5,"context_line":"    python-ironicclient \u003e\u003d 1.10.0"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"5a3905b3_8e08522f","line":5,"in_reply_to":"5a3905b3_28fda43a","updated":"2017-01-20 06:10:09.000000000","message":"Done","commit_id":"5cc25830791aff773a1aaa34b196368a72aa2272"}]}
