)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e9e95bb8f3c658b9008cc42991dc7ba818fad302","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lucas Alvares Gomes \u003clucasagomes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-06 12:26:05 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Config to stop powering off nodes on failure"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds two config options:"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"fa69d971_8198531d","line":7,"updated":"2016-01-06 17:52:10.000000000","message":"The \u0027after cleaning\u0027 option affects both failure and success, right? This makes me feel like it should be two separate commits for these...","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c30be993dc6a7ae419e407b78e4d79dbe91208cb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lucas Alvares Gomes \u003clucasagomes@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-01-06 12:26:05 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Config to stop powering off nodes on failure"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds two config options:"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da6ed579_d96351b0","line":7,"in_reply_to":"fa69d971_8198531d","updated":"2016-01-12 17:03:55.000000000","message":"Oh that\u0027s correct (according to the code)","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"}],"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7ab3acc11a2da8989ba96bd16bfc00744716e66e","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"# Temporary working directory, default is Python temp dir."},{"line_number":140,"context_line":"# (string value)"},{"line_number":141,"context_line":"#tempdir\u003d/var/folders/mn/6f6xhyrn3x52xdtx39w97rprkmsrvp/T"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"#"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"fa69d971_d31b937f","line":141,"updated":"2016-01-06 12:24:14.000000000","message":"odd, it should default to /tmp ...\n\nI generated a sample file from a fresh install venv and this option didn\u0027t change.","commit_id":"b5e906b6cb247910868f940deebb3cb0afb597ab"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c728365e9c83cc3b2be468d0868fcbffd512cba6","unresolved":false,"context_lines":[{"line_number":920,"context_line":"#erase_devices_iterations\u003d1"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"# Whether to power off a node after deploy failure. Defaults"},{"line_number":923,"context_line":"# to True. (boolean value)"},{"line_number":924,"context_line":"#power_off_after_deploy_failure\u003dtrue"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":9,"id":"fa0719c6_03402d33","line":923,"updated":"2016-03-23 17:11:22.000000000","message":"Do you think we should have a note here similar to what we have in the release note about Nova?","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"68da1b353726f30efac2d027698437c80d7fb308","unresolved":false,"context_lines":[{"line_number":920,"context_line":"#erase_devices_iterations\u003d1"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"# Whether to power off a node after deploy failure. Defaults"},{"line_number":923,"context_line":"# to True. (boolean value)"},{"line_number":924,"context_line":"#power_off_after_deploy_failure\u003dtrue"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":9,"id":"fa0719c6_630129af","line":923,"in_reply_to":"fa0719c6_03402d33","updated":"2016-03-23 17:13:46.000000000","message":"10:12:35 \u003cJayF\u003e lucasagomes: No, because there\u0027s no way that gets updated when we patch Nova.\n10:12:37 \u003cJayF\u003e lucasagomes: heh :)\n10:12:55 \u003cJayF\u003e lucasagomes: it\u0027s in release notes, which I think is sufficient\n10:13:01 \u003clucasagomes\u003e JayF, yeah :-/ fair enough","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1a7320020faf47130ecd6f246f2b279197100376","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    cfg.BoolOpt(\u0027power_off_after_cleaning\u0027,"},{"line_number":80,"context_line":"                default\u003dTrue,"},{"line_number":81,"context_line":"                help\u003d_(\u0027Whether the node should be powered down when cleaning \u0027"},{"line_number":82,"context_line":"                       \u0027is complete or not.\u0027))"},{"line_number":83,"context_line":"]"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_3d91069a","line":82,"range":{"start_line":82,"start_character":39,"end_line":82,"end_character":42},"updated":"2015-12-17 18:53:51.000000000","message":"Defaults to True.","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ab032a4d7af224501a9e15f9d112a2fe011038e8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    cfg.BoolOpt(\u0027power_off_after_cleaning\u0027,"},{"line_number":80,"context_line":"                default\u003dTrue,"},{"line_number":81,"context_line":"                help\u003d_(\u0027Whether the node should be powered down when cleaning \u0027"},{"line_number":82,"context_line":"                       \u0027is complete or not.\u0027))"},{"line_number":83,"context_line":"]"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_baf66bf7","line":82,"range":{"start_line":82,"start_character":39,"end_line":82,"end_character":42},"in_reply_to":"3a7e1126_3d91069a","updated":"2016-01-04 00:32:43.000000000","message":"Done","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"32a89d76f3b780e0b66d0d0e5726851a1a519ce1","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        :raises NodeCleaningFailure: if the cleaning ports cannot be"},{"line_number":349,"context_line":"            removed"},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        if CONF.agent.power_off_after_cleaning:"},{"line_number":352,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        deploy_utils.tear_down_inband_cleaning("}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_a32dc547","line":351,"range":{"start_line":351,"start_character":22,"end_line":351,"end_character":46},"updated":"2015-12-18 04:03:17.000000000","message":"Why do we need this check here? Its redundant.\n\nThe same check has been added in deploy_utils.tear_down_inband_cleaning().","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ab032a4d7af224501a9e15f9d112a2fe011038e8","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        :raises NodeCleaningFailure: if the cleaning ports cannot be"},{"line_number":349,"context_line":"            removed"},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        if CONF.agent.power_off_after_cleaning:"},{"line_number":352,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        deploy_utils.tear_down_inband_cleaning("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_5ade4f6e","line":351,"range":{"start_line":351,"start_character":22,"end_line":351,"end_character":46},"in_reply_to":"3a7e1126_a32dc547","updated":"2016-01-04 00:32:43.000000000","message":"Done","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e9e95bb8f3c658b9008cc42991dc7ba818fad302","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                       \u0027to the disk. Unless the disk where the image will be \u0027"},{"line_number":77,"context_line":"                       \u0027copied to is really slow, this option should be set \u0027"},{"line_number":78,"context_line":"                       \u0027to True. Defaults to True.\u0027)),"},{"line_number":79,"context_line":"    cfg.BoolOpt(\u0027power_off_after_cleaning\u0027,"},{"line_number":80,"context_line":"                default\u003dTrue,"},{"line_number":81,"context_line":"                help\u003d_(\u0027Whether the node should be powered down when cleaning \u0027"},{"line_number":82,"context_line":"                       \u0027is complete. Defaults to True.\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_2153a76c","line":79,"updated":"2016-01-06 17:52:10.000000000","message":"Why is this an agent option when it affects every driver?","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e9e95bb8f3c658b9008cc42991dc7ba818fad302","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                       \u0027to True. Defaults to True.\u0027)),"},{"line_number":79,"context_line":"    cfg.BoolOpt(\u0027power_off_after_cleaning\u0027,"},{"line_number":80,"context_line":"                default\u003dTrue,"},{"line_number":81,"context_line":"                help\u003d_(\u0027Whether the node should be powered down when cleaning \u0027"},{"line_number":82,"context_line":"                       \u0027is complete. Defaults to True.\u0027))"},{"line_number":83,"context_line":"]"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_e1482fb5","line":81,"updated":"2016-01-06 17:52:10.000000000","message":"nit: s/down/off/ for consistency with the other option","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"51bfc6912f89c195acec3ce2a79afdfdf5d4ea4c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               help\u003d_(\u0027Number of iterations to be run for erasing devices.\u0027)),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027power_off_after_failure\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"},{"line_number":75,"context_line":"                help\u003d_(\u0027If true, powers off a node after a failure.\u0027)),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":"CONF \u003d cfg.CONF"},{"line_number":78,"context_line":"CONF.register_opts(deploy_opts, group\u003d\u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a7e1126_9f5a7582","line":75,"updated":"2015-12-17 17:30:21.000000000","message":"This option seems out of scope for this patch","commit_id":"db73ac4aad1bc9c29e46cca30347336a8da74b0c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1a7320020faf47130ecd6f246f2b279197100376","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               help\u003d_(\u0027Number of iterations to be run for erasing devices.\u0027)),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027power_off_after_failure\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"},{"line_number":75,"context_line":"                help\u003d_(\u0027If true, powers off a node after a failure.\u0027)),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":"CONF \u003d cfg.CONF"},{"line_number":78,"context_line":"CONF.register_opts(deploy_opts, group\u003d\u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_3dbfc6fc","line":75,"updated":"2015-12-17 18:53:51.000000000","message":"This is only for deployment right (since set_failed_state is about setting failed state for a the deployment). Maybe we should indicate that in the name of the configuration option, what about:\n\npower_off_after_deploy_failure ? \n\n\"Whether the node should be powered off after a deployment failure or not. Defaults to True.\"","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"32a89d76f3b780e0b66d0d0e5726851a1a519ce1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               help\u003d_(\u0027Number of iterations to be run for erasing devices.\u0027)),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027power_off_after_failure\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"},{"line_number":75,"context_line":"                help\u003d_(\u0027If true, powers off a node after a failure.\u0027)),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":"CONF \u003d cfg.CONF"},{"line_number":78,"context_line":"CONF.register_opts(deploy_opts, group\u003d\u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_e31bcd19","line":75,"in_reply_to":"3a7e1126_3dbfc6fc","updated":"2015-12-18 04:03:17.000000000","message":"++","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ab032a4d7af224501a9e15f9d112a2fe011038e8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               help\u003d_(\u0027Number of iterations to be run for erasing devices.\u0027)),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027power_off_after_failure\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"},{"line_number":75,"context_line":"                help\u003d_(\u0027If true, powers off a node after a failure.\u0027)),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":"CONF \u003d cfg.CONF"},{"line_number":78,"context_line":"CONF.register_opts(deploy_opts, group\u003d\u0027deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_7a47931d","line":75,"in_reply_to":"3a7e1126_e31bcd19","updated":"2016-01-04 00:32:43.000000000","message":"Done","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a0ec270ee2151c746576e25b3ca0058eff0b3408","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               help\u003d_(\u0027Number of iterations to be run for erasing devices.\u0027)),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027power_off_after_deploy_failure\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"},{"line_number":75,"context_line":"                help\u003d_(\u0027Whether to powers off a node after deploy failure. \u0027"},{"line_number":76,"context_line":"                       \u0027Defaults to True.\u0027)),"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_a71c0f14","line":75,"range":{"start_line":75,"start_character":35,"end_line":75,"end_character":41},"updated":"2016-01-04 03:34:11.000000000","message":"s/ powers/ power","commit_id":"938cb512233d5c595783ed6c4d0fb1733c7adf8e"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b21b2b9d99e1ad6e87a456ed8db003c4e16b23a8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               help\u003d_(\u0027Number of iterations to be run for erasing devices.\u0027)),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027power_off_after_deploy_failure\u0027,"},{"line_number":74,"context_line":"                default\u003dTrue,"},{"line_number":75,"context_line":"                help\u003d_(\u0027Whether to powers off a node after deploy failure. \u0027"},{"line_number":76,"context_line":"                       \u0027Defaults to True.\u0027)),"},{"line_number":77,"context_line":"]"},{"line_number":78,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_d0ed22f0","line":75,"range":{"start_line":75,"start_character":35,"end_line":75,"end_character":41},"in_reply_to":"fa69d971_a71c0f14","updated":"2016-01-04 17:12:49.000000000","message":"Done","commit_id":"938cb512233d5c595783ed6c4d0fb1733c7adf8e"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e9e95bb8f3c658b9008cc42991dc7ba818fad302","unresolved":false,"context_lines":[{"line_number":1045,"context_line":"    if CONF.agent.power_off_after_cleaning:"},{"line_number":1046,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":1047,"context_line":"    if manage_boot:"},{"line_number":1048,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    tear_down_cleaning_ports(task)"},{"line_number":1051,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_a1c237e7","line":1048,"updated":"2016-01-06 17:52:10.000000000","message":"Do we want to do this if we\u0027re not powering off? If not, when do we clean this up? At next deploy? At next power off?","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e9e95bb8f3c658b9008cc42991dc7ba818fad302","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"    if manage_boot:"},{"line_number":1048,"context_line":"        task.driver.boot.clean_up_ramdisk(task)"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    tear_down_cleaning_ports(task)"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":""},{"line_number":1053,"context_line":"def get_image_instance_info(node):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_018d43d5","line":1050,"updated":"2016-01-06 17:52:10.000000000","message":"Ditto","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"7e2179aa7e01a7e83a695681c3e62668463ae756","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                % {\u0027node\u0027: node.uuid, \u0027state\u0027: node.provision_state})"},{"line_number":497,"context_line":"        LOG.exception(msg2)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    if CONF.deploy.power_off_after_deploy_failure:"},{"line_number":500,"context_line":"        try:"},{"line_number":501,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":502,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_5c1aea17","line":499,"range":{"start_line":499,"start_character":12,"end_line":499,"end_character":49},"updated":"2016-03-24 08:17:45.000000000","message":"do we need to make an explicit log noting the node is not powered off after deploy failure if this option set to False?","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9a4a24815990fc34b731ff9c151d23f28d4394eb","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                % {\u0027node\u0027: node.uuid, \u0027state\u0027: node.provision_state})"},{"line_number":497,"context_line":"        LOG.exception(msg2)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    if CONF.deploy.power_off_after_deploy_failure:"},{"line_number":500,"context_line":"        try:"},{"line_number":501,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":502,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_48a3079f","line":499,"range":{"start_line":499,"start_character":12,"end_line":499,"end_character":49},"in_reply_to":"fa0719c6_5c1aea17","updated":"2016-03-24 18:43:40.000000000","message":"I don\u0027t think so, given it\u0027s a global option. An operator reading the log would know that\u0027s what\u0027s going on.","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"327e96f5a473ee02c6fc23ebb0337ae282bb0f51","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            LOG.exception(msg2)"},{"line_number":508,"context_line":"    # NOTE(deva): node_power_action() erases node.last_error"},{"line_number":509,"context_line":"    #             so we need to set it here."},{"line_number":510,"context_line":"    node.last_error \u003d msg"},{"line_number":511,"context_line":"    node.save()"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"def get_single_nic_with_vif_port_id(task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_99bf7460","line":511,"range":{"start_line":510,"start_character":0,"end_line":511,"end_character":15},"updated":"2016-03-24 07:47:38.000000000","message":"If we didn\u0027t power off the node, then we don\u0027t have to save the error meg again, I think.","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b5c9b952db2d4915a4f0ecbdc08c3f49c9b3a281","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            LOG.exception(msg2)"},{"line_number":508,"context_line":"    # NOTE(deva): node_power_action() erases node.last_error"},{"line_number":509,"context_line":"    #             so we need to set it here."},{"line_number":510,"context_line":"    node.last_error \u003d msg"},{"line_number":511,"context_line":"    node.save()"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"def get_single_nic_with_vif_port_id(task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_7e887e71","line":511,"range":{"start_line":510,"start_character":0,"end_line":511,"end_character":15},"in_reply_to":"fa0719c6_7c7a4e89","updated":"2016-03-24 10:00:27.000000000","message":"+1, if that note is correct (worth testing) I agree with it.","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ee0d3fe960c26af7d23282580268e980b3e4b6b2","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            LOG.exception(msg2)"},{"line_number":508,"context_line":"    # NOTE(deva): node_power_action() erases node.last_error"},{"line_number":509,"context_line":"    #             so we need to set it here."},{"line_number":510,"context_line":"    node.last_error \u003d msg"},{"line_number":511,"context_line":"    node.save()"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"def get_single_nic_with_vif_port_id(task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_beb216e3","line":511,"range":{"start_line":510,"start_character":0,"end_line":511,"end_character":15},"in_reply_to":"fa0719c6_7e887e71","updated":"2016-03-24 10:09:28.000000000","message":"Actually, I think we misinterpreted that note. I don\u0027t think we should assume that last_error is populated in the node before set_failed_state() is called.\n\nThe note just talks about the order that things should be called inside this method, and we should populate last_error after calling node_power_action() because otherwise it will set it to None (see that we pass the same task object to that function).\n\nI believe the code here is correct.","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"7e2179aa7e01a7e83a695681c3e62668463ae756","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            LOG.exception(msg2)"},{"line_number":508,"context_line":"    # NOTE(deva): node_power_action() erases node.last_error"},{"line_number":509,"context_line":"    #             so we need to set it here."},{"line_number":510,"context_line":"    node.last_error \u003d msg"},{"line_number":511,"context_line":"    node.save()"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"def get_single_nic_with_vif_port_id(task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_7c7a4e89","line":511,"range":{"start_line":510,"start_character":0,"end_line":511,"end_character":15},"in_reply_to":"fa0719c6_99bf7460","updated":"2016-03-24 08:17:45.000000000","message":"agree with Tan, if no power action triggered, the node.last_error will not be erased.","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"9a4a24815990fc34b731ff9c151d23f28d4394eb","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            LOG.exception(msg2)"},{"line_number":508,"context_line":"    # NOTE(deva): node_power_action() erases node.last_error"},{"line_number":509,"context_line":"    #             so we need to set it here."},{"line_number":510,"context_line":"    node.last_error \u003d msg"},{"line_number":511,"context_line":"    node.save()"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"def get_single_nic_with_vif_port_id(task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_68736b4e","line":511,"range":{"start_line":510,"start_character":0,"end_line":511,"end_character":15},"in_reply_to":"fa0719c6_beb216e3","updated":"2016-03-24 18:43:40.000000000","message":"I can confirm here the code is correct, as this is a direct backport of something we\u0027ve been running at Rackspace for almost a year.","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"}],"ironic/tests/unit/drivers/modules/test_deploy_utils.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1a7320020faf47130ecd6f246f2b279197100376","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"        self._test_set_failed_state(event_value\u003diter([exc_state] * len(calls)),"},{"line_number":1246,"context_line":"                                    power_value\u003diter([exc_param] * len(calls)),"},{"line_number":1247,"context_line":"                                    log_calls\u003dcalls)"},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    def test_get_boot_option(self):"},{"line_number":1250,"context_line":"        self.node.instance_info \u003d {\u0027capabilities\u0027: \u0027{\"boot_option\": \"local\"}\u0027}"},{"line_number":1251,"context_line":"        result \u003d utils.get_boot_option(self.node)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_bdddf643","line":1248,"updated":"2015-12-17 18:53:51.000000000","message":"We should create a test with power_off_after_failure set to False here","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ab032a4d7af224501a9e15f9d112a2fe011038e8","unresolved":false,"context_lines":[{"line_number":1245,"context_line":"        self._test_set_failed_state(event_value\u003diter([exc_state] * len(calls)),"},{"line_number":1246,"context_line":"                                    power_value\u003diter([exc_param] * len(calls)),"},{"line_number":1247,"context_line":"                                    log_calls\u003dcalls)"},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    def test_get_boot_option(self):"},{"line_number":1250,"context_line":"        self.node.instance_info \u003d {\u0027capabilities\u0027: \u0027{\"boot_option\": \"local\"}\u0027}"},{"line_number":1251,"context_line":"        result \u003d utils.get_boot_option(self.node)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_1a5697d2","line":1248,"in_reply_to":"3a7e1126_bdddf643","updated":"2016-01-04 00:32:43.000000000","message":"Done","commit_id":"588c4f9778dfb7be2c1d45e99e25a1cf5a113804"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"97e46866790c27214c189985c732cab558edc36f","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"                       autospec\u003dTrue)"},{"line_number":1253,"context_line":"    def _test_set_failed_state(self, mock_event, mock_power, mock_log,"},{"line_number":1254,"context_line":"                               event_value\u003dNone, power_value\u003dNone,"},{"line_number":1255,"context_line":"                               log_calls\u003dNone, poweroff\u003dTrue):"},{"line_number":1256,"context_line":"        err_msg \u003d \u0027some failure\u0027"},{"line_number":1257,"context_line":"        mock_event.side_effect \u003d event_value"},{"line_number":1258,"context_line":"        mock_power.side_effect \u003d power_value"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_513e0fb9","line":1255,"updated":"2016-03-24 21:23:43.000000000","message":"Seems like poweroff could just be derived.\n\n poweroff \u003d cfg.CONF.deploy.power_off_after_deploy_failure","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"c615744ff221f0867d527b0c950c1fc719f113ef","unresolved":false,"context_lines":[{"line_number":1252,"context_line":"                       autospec\u003dTrue)"},{"line_number":1253,"context_line":"    def _test_set_failed_state(self, mock_event, mock_power, mock_log,"},{"line_number":1254,"context_line":"                               event_value\u003dNone, power_value\u003dNone,"},{"line_number":1255,"context_line":"                               log_calls\u003dNone, poweroff\u003dTrue):"},{"line_number":1256,"context_line":"        err_msg \u003d \u0027some failure\u0027"},{"line_number":1257,"context_line":"        mock_event.side_effect \u003d event_value"},{"line_number":1258,"context_line":"        mock_power.side_effect \u003d power_value"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_c7353df8","line":1255,"in_reply_to":"da0c15f0_513e0fb9","updated":"2016-03-24 22:46:57.000000000","message":"I prefer being more explicit to ensure both ways get tested even if config were broken somehow :)","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"}],"releasenotes/notes/add-support-for-no-poweroff-on-failure-86e43b3e39043990.yaml":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"e9e95bb8f3c658b9008cc42991dc7ba818fad302","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    Nova will still attempt to delete a node after a failed"},{"line_number":9,"context_line":"    deployment, so deploy.power_off_after_deploy_failure"},{"line_number":10,"context_line":"    may not be very effective in non-standalone"},{"line_number":11,"context_line":"    deployments."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"fa69d971_017b03c2","line":11,"updated":"2016-01-06 17:52:10.000000000","message":"Yeah, this really feels like two separate features to me.","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c30be993dc6a7ae419e407b78e4d79dbe91208cb","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    Nova will still attempt to delete a node after a failed"},{"line_number":9,"context_line":"    deployment, so deploy.power_off_after_deploy_failure"},{"line_number":10,"context_line":"    may not be very effective in non-standalone"},{"line_number":11,"context_line":"    deployments."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"da6ed579_196a4981","line":11,"in_reply_to":"fa69d971_017b03c2","updated":"2016-01-12 17:03:55.000000000","message":"++","commit_id":"1a01ffe429a198924a1111f1eeecfbedf5f50ddc"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"97e46866790c27214c189985c732cab558edc36f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Operators can now set"},{"line_number":4,"context_line":"    deploy.power_off_after_deploy_failure to leave nodes"},{"line_number":5,"context_line":"    powered on when a deployment fails. This is useful"},{"line_number":6,"context_line":"    for troubleshooting deployment issues. As a note,"},{"line_number":7,"context_line":"    Nova will still attempt to delete a node after a failed"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"da0c15f0_b62fa1a0","line":4,"updated":"2016-03-24 21:23:43.000000000","message":"nit:\n\n deploy.power_off_after_deploy_failure to False to leave nodes","commit_id":"6c96257142c18adb9f070617022a6d6c1414ae1f"}]}
