)]}'
{"ironic/drivers/modules/redfish/bios.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32abe2114b54e6df0d23584d219771500c0b7516","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a6e11d00","line":2,"updated":"2018-07-12 20:01:20.000000000","message":"Is this correct?","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76ec1e9309ad08b78422bb2087f0eb84209dfbea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7d20fd4b","line":2,"in_reply_to":"5f7c97a3_2d9d8fba","updated":"2018-07-18 14:17:51.000000000","message":"Officially, copyright attribution is tracked via the commit histories in GIT. Which is also why it is important to tag co-authors and all. Top of file copyright headers don\u0027t really matter as they are largely void in the case of openstack as there is a rights assignment to the foundation as well. Most projects just kind of roll with whatever people put, but I\u0027v also noticed it in a past because some organizations have very explicit policies about it.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_2d9d8fba","line":2,"in_reply_to":"5f7c97a3_3f8f5023","updated":"2018-07-17 16:05:20.000000000","message":"If ever get blocked by this, the other option might be to either drop line #1 or lines #1 and #2. Looking though other ironic modules, some do not have explicit copyright.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a8928467fbe655cbf5e4cd34ee295795e0b28695","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_5e671beb","line":2,"in_reply_to":"5f7c97a3_7d20fd4b","updated":"2018-07-19 15:13:14.000000000","message":"That makes sense. Thanks for the detail.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"277671b7dc276ac91607364a764880fe204267b3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Red Hat, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3f8f5023","line":2,"in_reply_to":"5f7c97a3_a6e11d00","updated":"2018-07-12 22:20:58.000000000","message":"Ah, good point. I bet it isn\u0027t right. I just copied this header from another module.\n\nI assume the License stuff below is OK. And the Copyright above should be whatever the Redfish Forum folks want it to be.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"74fd1ba3446df47030268cfb1b69155740769edc","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        super(RedfishBIOS, self).__init__()"},{"line_number":34,"context_line":"        LOG.debug(\u0027RedfishBIOS.__init__: __name__ \u003d {}\u0027.format(__name__))"},{"line_number":35,"context_line":"        if sushy is None:"},{"line_number":36,"context_line":"            raise exception.DriverLoadError("},{"line_number":37,"context_line":"                driver\u003dself.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_e8f86ec2","line":34,"updated":"2018-07-23 09:57:31.000000000","message":"please remove in the final version","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"7ec65dcda74ad98309fdd5cd6a53a11e5c52b942","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        super(RedfishBIOS, self).__init__()"},{"line_number":34,"context_line":"        LOG.debug(\u0027RedfishBIOS.__init__: __name__ \u003d {}\u0027.format(__name__))"},{"line_number":35,"context_line":"        if sushy is None:"},{"line_number":36,"context_line":"            raise exception.DriverLoadError("},{"line_number":37,"context_line":"                driver\u003dself.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_34b9857b","line":34,"in_reply_to":"5f7c97a3_e8f86ec2","updated":"2018-07-26 13:46:36.000000000","message":"Yes, I\u0027ll clean the log statements up before the final version. I put them in just to help me understand what was going on while I was debugging.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        LOG.debug(\u0027RedfishBIOS.__init__: __name__ \u003d {}\u0027.format(__name__))"},{"line_number":35,"context_line":"        if sushy is None:"},{"line_number":36,"context_line":"            raise exception.DriverLoadError("},{"line_number":37,"context_line":"                driver\u003dself.__class__.__name__,"},{"line_number":38,"context_line":"                reason\u003d_(\"Unable to import the sushy library\"))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def cache_bios_settings(self, task):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_6dbf07ca","line":37,"range":{"start_line":37,"start_character":23,"end_line":37,"end_character":47},"updated":"2018-07-17 16:05:20.000000000","message":"Should this be just `redfish`?","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a7fd8c07ef9e377ddb48a30e61b4b1ee1c591c7b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        LOG.debug(\u0027RedfishBIOS.__init__: __name__ \u003d {}\u0027.format(__name__))"},{"line_number":35,"context_line":"        if sushy is None:"},{"line_number":36,"context_line":"            raise exception.DriverLoadError("},{"line_number":37,"context_line":"                driver\u003dself.__class__.__name__,"},{"line_number":38,"context_line":"                reason\u003d_(\"Unable to import the sushy library\"))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def cache_bios_settings(self, task):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_0849a18c","line":37,"range":{"start_line":37,"start_character":23,"end_line":37,"end_character":47},"in_reply_to":"5f7c97a3_6dbf07ca","updated":"2018-07-17 23:34:05.000000000","message":"Yes, that makes sense. Will change.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":41,"context_line":"        # TODO(bdodd): try/catch as needed"},{"line_number":42,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: task \u003d {}\u0027.format(task))"},{"line_number":43,"context_line":"        node_id \u003d task.node.id"},{"line_number":44,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: mode_id \u003d {}\u0027"},{"line_number":45,"context_line":"                  .format(node_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_6da2a799","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":76},"updated":"2018-07-17 16:05:20.000000000","message":"Better do this:\n\n  LOG.debug(\u0027RedfishBIOS.cache_bios_settings: task \u003d %r\u0027, task)\n\nto save on string interpolation.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"74fd1ba3446df47030268cfb1b69155740769edc","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":41,"context_line":"        # TODO(bdodd): try/catch as needed"},{"line_number":42,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: task \u003d {}\u0027.format(task))"},{"line_number":43,"context_line":"        node_id \u003d task.node.id"},{"line_number":44,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: mode_id \u003d {}\u0027"},{"line_number":45,"context_line":"                  .format(node_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_88277a67","line":42,"updated":"2018-07-23 09:57:31.000000000","message":"Well, the final version should not have most of these log statements anyway. Just the most important ones (e.g. one indicating the BIOS setting were changed)","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a7fd8c07ef9e377ddb48a30e61b4b1ee1c591c7b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":41,"context_line":"        # TODO(bdodd): try/catch as needed"},{"line_number":42,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: task \u003d {}\u0027.format(task))"},{"line_number":43,"context_line":"        node_id \u003d task.node.id"},{"line_number":44,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: mode_id \u003d {}\u0027"},{"line_number":45,"context_line":"                  .format(node_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_49af957b","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":76},"in_reply_to":"5f7c97a3_6da2a799","updated":"2018-07-17 23:34:05.000000000","message":"Good catch. Will do.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"7ec65dcda74ad98309fdd5cd6a53a11e5c52b942","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":41,"context_line":"        # TODO(bdodd): try/catch as needed"},{"line_number":42,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: task \u003d {}\u0027.format(task))"},{"line_number":43,"context_line":"        node_id \u003d task.node.id"},{"line_number":44,"context_line":"        LOG.debug(\u0027RedfishBIOS.cache_bios_settings: mode_id \u003d {}\u0027"},{"line_number":45,"context_line":"                  .format(node_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_345e6551","line":42,"in_reply_to":"5f7c97a3_88277a67","updated":"2018-07-26 13:46:36.000000000","message":"Ditto.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            objects.BIOSSettingList.sync_node_setting("},{"line_number":58,"context_line":"                task.context, node_id, settings))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if len(create_list) \u003e 0:"},{"line_number":61,"context_line":"            objects.BIOSSettingList.create("},{"line_number":62,"context_line":"                task.context, node_id, create_list)"},{"line_number":63,"context_line":"        if len(update_list) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8d24e30f","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":32},"updated":"2018-07-17 16:05:20.000000000","message":"My Pythonista soul seeks for `if create_list:` statement...","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a7fd8c07ef9e377ddb48a30e61b4b1ee1c591c7b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            objects.BIOSSettingList.sync_node_setting("},{"line_number":58,"context_line":"                task.context, node_id, settings))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        if len(create_list) \u003e 0:"},{"line_number":61,"context_line":"            objects.BIOSSettingList.create("},{"line_number":62,"context_line":"                task.context, node_id, create_list)"},{"line_number":63,"context_line":"        if len(update_list) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_69029174","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":32},"in_reply_to":"5f7c97a3_8d24e30f","updated":"2018-07-17 23:34:05.000000000","message":"Yes, I\u0027ll change those.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            objects.BIOSSettingList.save("},{"line_number":65,"context_line":"                task.context, node_id, update_list)"},{"line_number":66,"context_line":"        if len(delete_list) \u003e 0:"},{"line_number":67,"context_line":"            delete_names \u003d []"},{"line_number":68,"context_line":"            for setting in delete_list:"},{"line_number":69,"context_line":"                delete_names.append(setting.get(\u0027name\u0027))"},{"line_number":70,"context_line":"            objects.BIOSSettingList.delete("},{"line_number":71,"context_line":"                task.context, node_id, delete_names)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_2d082f8f","line":69,"range":{"start_line":67,"start_character":12,"end_line":69,"end_character":55},"updated":"2018-07-17 16:05:20.000000000","message":"Can this be converted into a list comprehension?","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if len(delete_list) \u003e 0:"},{"line_number":67,"context_line":"            delete_names \u003d []"},{"line_number":68,"context_line":"            for setting in delete_list:"},{"line_number":69,"context_line":"                delete_names.append(setting.get(\u0027name\u0027))"},{"line_number":70,"context_line":"            objects.BIOSSettingList.delete("},{"line_number":71,"context_line":"                task.context, node_id, delete_names)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_4dec8bbb","line":69,"range":{"start_line":69,"start_character":44,"end_line":69,"end_character":47},"updated":"2018-07-17 16:05:20.000000000","message":"Using `get()` hints that the key may be missing...? Should we skip such entries then?","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a7fd8c07ef9e377ddb48a30e61b4b1ee1c591c7b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            objects.BIOSSettingList.save("},{"line_number":65,"context_line":"                task.context, node_id, update_list)"},{"line_number":66,"context_line":"        if len(delete_list) \u003e 0:"},{"line_number":67,"context_line":"            delete_names \u003d []"},{"line_number":68,"context_line":"            for setting in delete_list:"},{"line_number":69,"context_line":"                delete_names.append(setting.get(\u0027name\u0027))"},{"line_number":70,"context_line":"            objects.BIOSSettingList.delete("},{"line_number":71,"context_line":"                task.context, node_id, delete_names)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a9d2e9fc","line":69,"range":{"start_line":67,"start_character":12,"end_line":69,"end_character":55},"in_reply_to":"5f7c97a3_2d082f8f","updated":"2018-07-17 23:34:05.000000000","message":"Absolutely.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a7fd8c07ef9e377ddb48a30e61b4b1ee1c591c7b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if len(delete_list) \u003e 0:"},{"line_number":67,"context_line":"            delete_names \u003d []"},{"line_number":68,"context_line":"            for setting in delete_list:"},{"line_number":69,"context_line":"                delete_names.append(setting.get(\u0027name\u0027))"},{"line_number":70,"context_line":"            objects.BIOSSettingList.delete("},{"line_number":71,"context_line":"                task.context, node_id, delete_names)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a91989d2","line":69,"range":{"start_line":69,"start_character":44,"end_line":69,"end_character":47},"in_reply_to":"5f7c97a3_4dec8bbb","updated":"2018-07-17 23:34:05.000000000","message":"I don\u0027t think there is any need to use get(). \u0027name\u0027 key should never be missing.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32abe2114b54e6df0d23584d219771500c0b7516","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        bios \u003d system.bios()"},{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c6c77965","line":102,"updated":"2018-07-12 20:01:20.000000000","message":"is it required? I guess we wold set the cleaning reboot flag (there are some instances in the code base with cleaning steps, I can dig one up if you need it) and then request a reboot. I\u0027m fairly sure we have a helper for that with cleaning to do both.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"277671b7dc276ac91607364a764880fe204267b3","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        bios \u003d system.bios()"},{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_bfc36039","line":102,"in_reply_to":"5f7c97a3_c6c77965","updated":"2018-07-12 22:20:58.000000000","message":"I\u0027ll look into the cleaning reboot flag. May ping the IRC channel if I get stuck.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32abe2114b54e6df0d23584d219771500c0b7516","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"},{"line_number":106,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_e6a5d5b5","line":103,"updated":"2018-07-12 20:01:20.000000000","message":"? It feels like just a pass-through in a sense, so as long as sushy is not asserting a schema... maybe? Or are you thinking something else.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76ec1e9309ad08b78422bb2087f0eb84209dfbea","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"},{"line_number":106,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_3d912554","line":103,"in_reply_to":"5f7c97a3_0876810d","updated":"2018-07-18 14:17:51.000000000","message":"It might make sense to put something like \"post_configuration_write_action\" method on this driver that would be a pass, but vendors could put things like reboots in theirs and just use the rest of the code as provided here if that works?","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a8928467fbe655cbf5e4cd34ee295795e0b28695","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"},{"line_number":106,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_1eb2034b","line":103,"in_reply_to":"5f7c97a3_3d912554","updated":"2018-07-19 15:13:14.000000000","message":"Sounds promising. I\u0027ll try that out.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"a7fd8c07ef9e377ddb48a30e61b4b1ee1c591c7b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"},{"line_number":106,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_0876810d","line":103,"in_reply_to":"5f7c97a3_4d8b2bc0","updated":"2018-07-17 23:34:05.000000000","message":"Agreed. No intention to pollute the generic driver. I was just trying to consider if there was a pattern or best practice that could be applied here that would make it easier or more natural for vendors to extend the method. But if not, the vendor can simply override, which would not be burdensome.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"975462fe114f11a046ba4bccb2834cab76b41dcf","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"},{"line_number":106,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_4d8b2bc0","line":103,"in_reply_to":"5f7c97a3_7feb88a3","updated":"2018-07-17 16:05:20.000000000","message":"My instinct would be to ask those vendors to either support standard Redfish schema or supply their own driver for ironic (possibly based on this class). I\u0027d not pollute generic Redfish driver with vendor-specific stuff.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"277671b7dc276ac91607364a764880fe204267b3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        LOG.debug(\u0027RedfishBIOS.apply_configuration: bios \u003d {}\u0027.format(bios))"},{"line_number":101,"context_line":"        bios.set_attributes(settings)"},{"line_number":102,"context_line":"        # TODO(bdodd): issue restart here to apply updates? If so, how?"},{"line_number":103,"context_line":"        # TODO(bdodd): how can this can be extended to do custom apply action?"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_properties(self):"},{"line_number":106,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7feb88a3","line":103,"in_reply_to":"5f7c97a3_e6a5d5b5","updated":"2018-07-12 22:20:58.000000000","message":"So the issue is that for many Redfish implementations, applying the pending BIOS settings just requires a reboot. But there are some implementations that require a special vendor-specific action to be taken (like a POST to a particular action URL).\n\nJust wondering if there is a pattern or precedence for handling that kind of situation.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ea99985461bb149aa2326b6b094d2e342c9d4a99","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        node_id \u003d task.node.id"},{"line_number":49,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":50,"context_line":"        attributes \u003d system.bios.attributes"},{"line_number":51,"context_line":"        settings \u003d []"},{"line_number":52,"context_line":"        # Convert Redfish BIOS attributes to Ironic BIOS settings"},{"line_number":53,"context_line":"        if attributes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0f067a1d","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":43},"updated":"2018-08-13 06:02:52.000000000","message":"This will retrieve the current bios settings and not the one being applied. Upon server reset the values in node database and on bare metal will go out of sync. \nI do not see we are rebooting the server after changing settings using apply_configuration()/factory_reset(). The new settings would come into effect only after server reset. Should we use \u0027system.bios.pending_attributes\u0027 ?\nhttps://github.com/openstack/sushy/blob/master/sushy/resources/system/bios.py#L62-L75","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        node_id \u003d task.node.id"},{"line_number":49,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":50,"context_line":"        attributes \u003d system.bios.attributes"},{"line_number":51,"context_line":"        settings \u003d []"},{"line_number":52,"context_line":"        # Convert Redfish BIOS attributes to Ironic BIOS settings"},{"line_number":53,"context_line":"        if attributes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_12da7916","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":43},"in_reply_to":"3f79a3b5_0f067a1d","updated":"2018-08-20 21:36:39.000000000","message":"I will be making an update to do a reboot in apply_configuration(), so I don\u0027t think we need to (or should) use pending_attributes here. The pending attributes may or may not be successfully applied on system reboot. I think we should only cache the attributes actually read from the system in the Ironic DB.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1605cd2ce3413f2ca50859c14d702ba283b5bc3b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        node_id \u003d task.node.id"},{"line_number":49,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":50,"context_line":"        attributes \u003d system.bios.attributes"},{"line_number":51,"context_line":"        settings \u003d []"},{"line_number":52,"context_line":"        # Convert Redfish BIOS attributes to Ironic BIOS settings"},{"line_number":53,"context_line":"        if attributes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ba9cac6a","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":43},"in_reply_to":"3f79a3b5_12da7916","updated":"2018-08-31 17:58:23.000000000","message":"+1 to only caching what is read, which is part of the design of the specification.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"becb8ed38a6ac2e7e5daf4b6d52b8ad82d2cc840","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        node_id \u003d task.node.id"},{"line_number":49,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":50,"context_line":"        attributes \u003d system.bios.attributes"},{"line_number":51,"context_line":"        settings \u003d []"},{"line_number":52,"context_line":"        # Convert Redfish BIOS attributes to Ironic BIOS settings"},{"line_number":53,"context_line":"        if attributes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f9576100","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":43},"in_reply_to":"3f79a3b5_ba9cac6a","updated":"2018-09-04 16:46:25.000000000","message":"Thanks for the confirmation, Julia.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4f035b05a20a2d1df5cb833d9627c1c8bb28c22e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        if attributes:"},{"line_number":54,"context_line":"            settings \u003d [{\u0027name\u0027: k, \u0027value\u0027: v} for k, v in attributes.items()]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        LOG.info(\u0027Cache BIOS settings for node %(node_uuid)s\u0027,"},{"line_number":57,"context_line":"                 {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        create_list, update_list, delete_list, nochange_list \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c70cf342","line":56,"updated":"2018-08-11 15:34:03.000000000","message":"nit: s/info/debug/, as it\u0027s not overly useful","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        if attributes:"},{"line_number":54,"context_line":"            settings \u003d [{\u0027name\u0027: k, \u0027value\u0027: v} for k, v in attributes.items()]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        LOG.info(\u0027Cache BIOS settings for node %(node_uuid)s\u0027,"},{"line_number":57,"context_line":"                 {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        create_list, update_list, delete_list, nochange_list \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_32d535e6","line":56,"in_reply_to":"3f79a3b5_c70cf342","updated":"2018-08-20 21:36:39.000000000","message":"Will change to debug.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4f035b05a20a2d1df5cb833d9627c1c8bb28c22e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                           \u0027%(node)s. Error: %(error)s\u0027) %"},{"line_number":91,"context_line":"                         {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"},{"line_number":92,"context_line":"            LOG.error(error_msg)"},{"line_number":93,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":96,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6705df13","line":93,"updated":"2018-08-11 15:34:03.000000000","message":"I think this should call post_configuration\n\nalso, shouldn\u0027t we call cache_bios_settings here?","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                           \u0027%(node)s. Error: %(error)s\u0027) %"},{"line_number":91,"context_line":"                         {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"},{"line_number":92,"context_line":"            LOG.error(error_msg)"},{"line_number":93,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":96,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f2c9fd24","line":93,"in_reply_to":"3f79a3b5_6705df13","updated":"2018-08-20 21:36:39.000000000","message":"Based on Shivanand\u0027s comment below, I don\u0027t think we need to call cache_bios_settings here.\n\nFor post_configuration(), I don\u0027t think it is expected that vendors will have special OEM actions required for factory reset beyond the spec-defined action that will be called in the sushy reset_bios(). But good that you brought it up because I\u0027m not certain. I will check with some other Redfish experts.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ea99985461bb149aa2326b6b094d2e342c9d4a99","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                           \u0027%(node)s. Error: %(error)s\u0027) %"},{"line_number":91,"context_line":"                         {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"},{"line_number":92,"context_line":"            LOG.error(error_msg)"},{"line_number":93,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":96,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_fd04174c","line":93,"in_reply_to":"3f79a3b5_6705df13","updated":"2018-08-13 06:02:52.000000000","message":"It is not required, It would get automatically called. We decorate factory_reset() and apply_configuration() with cache_bios_settings()\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/base.py#L1031-L1051","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                           \u0027%(node)s. Error: %(error)s\u0027) %"},{"line_number":91,"context_line":"                         {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"},{"line_number":92,"context_line":"            LOG.error(error_msg)"},{"line_number":93,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":96,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b2d385d5","line":93,"in_reply_to":"3f79a3b5_fd04174c","updated":"2018-08-20 21:36:39.000000000","message":"Thanks for the clarification.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"4a359364802c802fe08894a848f82800015e8df0","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                                  \u0027settings\u0027: settings})"},{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            bios.set_attributes(attributes)"},{"line_number":120,"context_line":"        except sushy.exceptions.SushyError as e:"},{"line_number":121,"context_line":"            error_msg \u003d (_(\u0027Redfish BIOS apply configuration failed for node \u0027"},{"line_number":122,"context_line":"                           \u0027%(node)s. Error: %(error)s\u0027) %"},{"line_number":123,"context_line":"                         {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_888cc080","line":120,"range":{"start_line":120,"start_character":0,"end_line":120,"end_character":48},"updated":"2018-09-05 14:37:19.000000000","message":"IIRC, only HTTP error codes \u003c\u003d400 are considered hard failures. Other codes may show up on partially successful update.\n\nIf we are not going to distinguish these two cases here (or in sushy), may be a comment would be helpful...?","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4f035b05a20a2d1df5cb833d9627c1c8bb28c22e","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            LOG.error(error_msg)"},{"line_number":125,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.post_configuration_write_action(task, settings)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def post_configuration_write_action(self, task, settings):"},{"line_number":130,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_87027b0a","line":127,"updated":"2018-08-11 15:34:03.000000000","message":"ditto, shouldn\u0027t we call cache_bios_settings?","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            LOG.error(error_msg)"},{"line_number":125,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.post_configuration_write_action(task, settings)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def post_configuration_write_action(self, task, settings):"},{"line_number":130,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_52031143","line":127,"in_reply_to":"3f79a3b5_87027b0a","updated":"2018-08-20 21:36:39.000000000","message":"Based on Shivanand\u0027s comment, I assume we don\u0027t need to call it.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ea99985461bb149aa2326b6b094d2e342c9d4a99","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            LOG.error(error_msg)"},{"line_number":125,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.post_configuration_write_action(task, settings)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def post_configuration_write_action(self, task, settings):"},{"line_number":130,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8f192a7b","line":127,"in_reply_to":"3f79a3b5_87027b0a","updated":"2018-08-13 06:02:52.000000000","message":"It is not required, It would get automatically called. We decorate factory_reset() and apply_configuration() with cache_bios_settings()\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/base.py#L1031-L1051","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4f035b05a20a2d1df5cb833d9627c1c8bb28c22e","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.post_configuration_write_action(task, settings)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def post_configuration_write_action(self, task, settings):"},{"line_number":130,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        Extension point to allow vendor implementations to extend this class"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_22011506","line":129,"updated":"2018-08-11 15:34:03.000000000","message":"nit: s/_write_action// (seems unnecessary)","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.post_configuration_write_action(task, settings)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def post_configuration_write_action(self, task, settings):"},{"line_number":130,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        Extension point to allow vendor implementations to extend this class"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_32f8d547","line":129,"in_reply_to":"3f79a3b5_22011506","updated":"2018-08-20 21:36:39.000000000","message":"It is a bit verbose. Just post_configuration() sounds fine to me. Will update.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4f035b05a20a2d1df5cb833d9627c1c8bb28c22e","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":137,"context_line":"        :param settings: a list of BIOS settings to be updated."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_properties(self):"},{"line_number":142,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4206911f","line":139,"updated":"2018-08-11 15:34:03.000000000","message":"I suggest we do a reboot here by default. While maybe not required by all implementations, it\u0027s a safer bet. If a vendor-specific descedant does not need it, they can override it with just \"pass\".\n\nor we can have a top-level reboot_required flag on the interface class, defaulting to True.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":137,"context_line":"        :param settings: a list of BIOS settings to be updated."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_properties(self):"},{"line_number":142,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_926c4909","line":139,"in_reply_to":"3f79a3b5_4206911f","updated":"2018-08-20 21:36:39.000000000","message":"Thanks, Dmitry. Yes, based on your comment and the exchange in IRC it sounds like the consensus is that I need to do a reboot by default. And doing it here makes sense.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1605cd2ce3413f2ca50859c14d702ba283b5bc3b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":137,"context_line":"        :param settings: a list of BIOS settings to be updated."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_properties(self):"},{"line_number":142,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_fa7b0426","line":139,"in_reply_to":"3f79a3b5_926c4909","updated":"2018-08-31 17:58:23.000000000","message":"I think it actually makes sense in almost all cases, because many settings impact the fundamental behavior of major system components.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"becb8ed38a6ac2e7e5daf4b6d52b8ad82d2cc840","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":137,"context_line":"        :param settings: a list of BIOS settings to be updated."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_properties(self):"},{"line_number":142,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_79b11144","line":139,"in_reply_to":"3f79a3b5_fa7b0426","updated":"2018-09-04 16:46:25.000000000","message":"Agreed.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"4a359364802c802fe08894a848f82800015e8df0","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":137,"context_line":"        :param settings: a list of BIOS settings to be updated."},{"line_number":138,"context_line":"        \"\"\""},{"line_number":139,"context_line":"        pass"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_properties(self):"},{"line_number":142,"context_line":"        \"\"\"Return the properties of the interface."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_65514d0e","line":139,"in_reply_to":"3f79a3b5_fa7b0426","updated":"2018-09-05 14:37:19.000000000","message":"I wonder, will we be able to read BIOS configuration (by calling `cache_bios_settings()` right after system reboot has been initiated...?\n\nIf BMC stays responsive to BIOS-related queries while the system goes through the reboot cycle, I am not certain what set of attributes BMC would return -- original or updated...","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":145,"context_line":"            return states.CLEANWAIT"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":148,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":149,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":150,"context_line":"            LOG.info(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":151,"context_line":"                     \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":152,"context_line":"                                   \u0027attrs\u0027: requested_attrs})"},{"line_number":153,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":154,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def post_configuration(self, task, settings):"},{"line_number":157,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f548992b","line":154,"range":{"start_line":147,"start_character":0,"end_line":154,"end_character":72},"updated":"2018-10-25 18:35:44.000000000","message":"It looks like we have nothing that tests if a reboot was requested and validates that this portion of the code was called. The possibility doesn\u0027t exist that I just didn\u0027t see it, but I think it is fairly important that we at least validate that we check and then exit out as we expect (or not)","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"8bd71626f49de2ba3d301c7554f6eb9cd9d7f69c","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":145,"context_line":"            return states.CLEANWAIT"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":148,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":149,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":150,"context_line":"            LOG.info(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":151,"context_line":"                     \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":152,"context_line":"                                   \u0027attrs\u0027: requested_attrs})"},{"line_number":153,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":154,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def post_configuration(self, task, settings):"},{"line_number":157,"context_line":"        \"\"\"Perform post configuration action to store BIOS settings."}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_55af0d2c","line":154,"range":{"start_line":147,"start_character":0,"end_line":154,"end_character":72},"in_reply_to":"3f79a3b5_f548992b","updated":"2018-10-25 19:17:53.000000000","message":"Thanks for the reminder. I will update the unit tests to get back to 100% coverage.","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                attrs_not_updated[attr] \u003d requested_attrs[attr]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if attrs_not_updated:"},{"line_number":198,"context_line":"            LOG.info(\u0027BIOS settings %(attrs)s for node %(node_uuid)s\u0027"},{"line_number":199,"context_line":"                     \u0027 not updated\u0027, {\u0027attrs\u0027: attrs_not_updated,"},{"line_number":200,"context_line":"                                      \u0027node_uuid\u0027: task.node.uuid})"},{"line_number":201,"context_line":"            self._set_clean_failed(task, attrs_not_updated)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_1593d5a5","line":198,"updated":"2018-10-25 18:35:44.000000000","message":"note, we tend to try and put the excess space on the line before.","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if attrs_not_updated:"},{"line_number":198,"context_line":"            LOG.info(\u0027BIOS settings %(attrs)s for node %(node_uuid)s\u0027"},{"line_number":199,"context_line":"                     \u0027 not updated\u0027, {\u0027attrs\u0027: attrs_not_updated,"},{"line_number":200,"context_line":"                                      \u0027node_uuid\u0027: task.node.uuid})"},{"line_number":201,"context_line":"            self._set_clean_failed(task, attrs_not_updated)"},{"line_number":202,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b5e9c119","line":199,"range":{"start_line":199,"start_character":34,"end_line":199,"end_character":35},"updated":"2018-10-25 18:35:44.000000000","message":"Looks like another sentence :)","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            self._set_clean_failed(task, attrs_not_updated)"},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            LOG.info(\u0027Verification of BIOS settings for node %(node_uuid)s\u0027"},{"line_number":204,"context_line":"                     \u0027 successful\u0027, {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":207,"context_line":"    def _reboot(self, task):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_5575cd84","line":204,"range":{"start_line":204,"start_character":33,"end_line":204,"end_character":34},"updated":"2018-10-25 18:35:44.000000000","message":"nit: Sentence without a period. :)","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"8bd71626f49de2ba3d301c7554f6eb9cd9d7f69c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            self._set_clean_failed(task, attrs_not_updated)"},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            LOG.info(\u0027Verification of BIOS settings for node %(node_uuid)s\u0027"},{"line_number":204,"context_line":"                     \u0027 successful\u0027, {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":207,"context_line":"    def _reboot(self, task):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_300b7f22","line":204,"range":{"start_line":204,"start_character":33,"end_line":204,"end_character":34},"in_reply_to":"3f79a3b5_5575cd84","updated":"2018-10-25 19:17:53.000000000","message":"Will fix all these LOG.info() formatting comments. Thanks.","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        info[\u0027requested_bios_attrs\u0027] \u003d attributes"},{"line_number":245,"context_line":"        info[\u0027skip_current_clean_step\u0027] \u003d False"},{"line_number":246,"context_line":"        task.node.driver_internal_info \u003d info"},{"line_number":247,"context_line":"        task.node.save()"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _clear_reboot_requested(self, task):"},{"line_number":250,"context_line":"        \"\"\"Clear driver_internal_info flags after cleaning reboot."}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b54d4172","line":247,"updated":"2018-10-25 18:35:44.000000000","message":"\\o/","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":266,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        message \u003d \u0027Redfish BIOS apply_configuration step failed for node \u0027\\"},{"line_number":269,"context_line":"                  \u0027{node}. Attributes {attrs} not updated.\u0027\\"},{"line_number":270,"context_line":"                  .format(node\u003dtask.node.uuid, attrs\u003dattrs_not_updated)"},{"line_number":271,"context_line":"        LOG.error(message)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_356291da","line":268,"range":{"start_line":268,"start_character":74,"end_line":268,"end_character":75},"updated":"2018-10-25 18:35:44.000000000","message":"Not needed, python does the right thing as long as the string character is in the same position on the next line.","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76e49689bf50b393acf7f602f9186ca496d855f8","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        message \u003d \u0027Redfish BIOS apply_configuration step failed for node \u0027\\"},{"line_number":269,"context_line":"                  \u0027{node}. Attributes {attrs} not updated.\u0027\\"},{"line_number":270,"context_line":"                  .format(node\u003dtask.node.uuid, attrs\u003dattrs_not_updated)"},{"line_number":271,"context_line":"        LOG.error(message)"},{"line_number":272,"context_line":"        task.node.last_error \u003d message"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_35a7f10b","line":269,"range":{"start_line":269,"start_character":59,"end_line":269,"end_character":60},"updated":"2018-10-25 18:35:44.000000000","message":"ditto. For the formatting below, It might just be better to let the string have a single character on that line or put .format on this line, and the arguments indented by ?4? spaces (I think that would be write pep8/flake8 testing wise)","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"8bd71626f49de2ba3d301c7554f6eb9cd9d7f69c","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        message \u003d \u0027Redfish BIOS apply_configuration step failed for node \u0027\\"},{"line_number":269,"context_line":"                  \u0027{node}. Attributes {attrs} not updated.\u0027\\"},{"line_number":270,"context_line":"                  .format(node\u003dtask.node.uuid, attrs\u003dattrs_not_updated)"},{"line_number":271,"context_line":"        LOG.error(message)"},{"line_number":272,"context_line":"        task.node.last_error \u003d message"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_70a1f7f5","line":269,"range":{"start_line":269,"start_character":59,"end_line":269,"end_character":60},"in_reply_to":"3f79a3b5_35a7f10b","updated":"2018-10-25 19:17:53.000000000","message":"I\u0027ll clean these up.","commit_id":"2b5ab8914c874f14410c669a2c27ba4cdf965f26"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"734d09b1f054cfd3ba330c3c19afedd2247d3dbd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                raise exception.RedfishError(error\u003derror_msg)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_b659922a","line":145,"updated":"2018-11-28 14:16:11.000000000","message":"_set_reboot_requested sets the appropriate flags for the clean step to be called a second time.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"da212f518aef8c067411304ee3c998bf135d5f12","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                raise exception.RedfishError(error\u003derror_msg)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_a96cd433","line":145,"in_reply_to":"3f79a3b5_b659922a","updated":"2018-11-28 17:13:47.000000000","message":"Yes, exactly.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"5dc373677b09331f10424dec8502179c302b20ce","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_a13155bd","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"updated":"2018-11-28 09:46:11.000000000","message":"When will this get path executed? The driver_internal_info[\u0027post_config_reboot_requested\u0027] is set when this method gets invoked at L145 and is cleared in _clear_reboot_requested() which gets called in this block at L154. The cleaning will not re-enter this method after executing setting of attributes. I think you will need some kind of periodic task to know the reboot is complete and perform this code block into that method.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"da212f518aef8c067411304ee3c998bf135d5f12","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_e982cca5","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"in_reply_to":"3f79a3b5_16a40604","updated":"2018-11-28 17:13:47.000000000","message":"OK, good. I did test that this flow works per our discussion back in October.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"734d09b1f054cfd3ba330c3c19afedd2247d3dbd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_16a40604","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"in_reply_to":"3f79a3b5_4be97b15","updated":"2018-11-28 14:16:11.000000000","message":"Okay, it is slightly confusing with the various anchor points for vendors to have basic overrides, but post_config_reboot_requested does get set when _set_reboot_requested is called, so I think this is fine.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2dc2cbf1ed836c783ba2ed2170af4e07d20699d1","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_4be97b15","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"in_reply_to":"3f79a3b5_a13155bd","updated":"2018-11-28 13:31:22.000000000","message":"Hmm... something does not seem right here.. the variable that I see being used doesn\u0027t match the variable that would enable it to be re-entered after reboot/agent startup.\nLooking.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"da212f518aef8c067411304ee3c998bf135d5f12","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_69731c1d","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"in_reply_to":"3f79a3b5_a13155bd","updated":"2018-11-28 17:13:47.000000000","message":"Shivanand - In _set_reboot_requested() (called above at L145) it sets \u0027skip_current_clean_step\u0027 to False. This is what causes this same step to be called a second time. And then the value of \u0027post_config_reboot_requested\u0027 is used to determine whether we are in the \"Step 1\" case or the \"Step 2\" case. This was the approach that Julia recommended to me.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"d62a2959cbd9a55e748fc9d3f837e1606f80d8ec","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_7ab99179","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"in_reply_to":"3f79a3b5_e982cca5","updated":"2018-11-29 03:52:14.000000000","message":"Thank you. I completely missed that part. This looks fine.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f4d4d0bda66c7fb0ba5f7ae6d9afef8898ad0da9","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.post_configuration(task, settings)"},{"line_number":145,"context_line":"            self._set_reboot_requested(task, attributes)"},{"line_number":146,"context_line":"            return states.CLEANWAIT"},{"line_number":147,"context_line":"        else:"},{"line_number":148,"context_line":"            # Step 2: Verify requested BIOS settings applied"},{"line_number":149,"context_line":"            requested_attrs \u003d info.get(\u0027requested_bios_attrs\u0027)"},{"line_number":150,"context_line":"            current_attrs \u003d bios.attributes"},{"line_number":151,"context_line":"            LOG.debug(\u0027Verify BIOS configuration for node %(node_uuid)s: \u0027"},{"line_number":152,"context_line":"                      \u0027%(attrs)r\u0027, {\u0027node_uuid\u0027: task.node.uuid,"},{"line_number":153,"context_line":"                                    \u0027attrs\u0027: requested_attrs})"},{"line_number":154,"context_line":"            self._clear_reboot_requested(task)"},{"line_number":155,"context_line":"            self._check_bios_attrs(task, current_attrs, requested_attrs)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def post_reset(self, task):"},{"line_number":158,"context_line":"        \"\"\"Perform post reset action to apply the BIOS factory reset."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_ff54ba24","line":155,"range":{"start_line":147,"start_character":8,"end_line":155,"end_character":72},"in_reply_to":"3f79a3b5_e982cca5","updated":"2018-11-28 18:32:23.000000000","message":"\\o/","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"5dc373677b09331f10424dec8502179c302b20ce","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        :raises: RedfishError on an error from the Sushy library"},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":229,"context_line":"        current_power_state \u003d redfish_power.GET_POWER_STATE_MAP\\"},{"line_number":230,"context_line":"            .get(system.power_state)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if current_power_state \u003d\u003d states.POWER_ON:"},{"line_number":234,"context_line":"                set_state \u003d redfish_power.SET_POWER_STATE_MAP\\"},{"line_number":235,"context_line":"                    .get(states.REBOOT)"},{"line_number":236,"context_line":"            else:"},{"line_number":237,"context_line":"                set_state \u003d redfish_power.SET_POWER_STATE_MAP\\"},{"line_number":238,"context_line":"                    .get(states.POWER_ON)"},{"line_number":239,"context_line":"            LOG.debug(\u0027Sending %(state)s to reboot node %(node_uuid)s\u0027,"},{"line_number":240,"context_line":"                      {\u0027state\u0027: set_state, \u0027node_uuid\u0027: task.node.uuid})"},{"line_number":241,"context_line":"            system.reset_system(set_state)"},{"line_number":242,"context_line":"        except sushy.exceptions.SushyError as e:"},{"line_number":243,"context_line":"            error_msg \u003d (_(\u0027Redfish reboot failed for node %(node)s. \u0027"},{"line_number":244,"context_line":"                           \u0027Error: %(error)s\u0027) % {\u0027node\u0027: task.node.uuid,"},{"line_number":245,"context_line":"                                                  \u0027error\u0027: e})"},{"line_number":246,"context_line":"            LOG.error(error_msg)"},{"line_number":247,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _set_cleaning_reboot(self, task):"},{"line_number":250,"context_line":"        \"\"\"Set driver_internal_info flags for cleaning reboot."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_41a40105","line":247,"range":{"start_line":228,"start_character":1,"end_line":247,"end_character":57},"updated":"2018-11-28 09:46:11.000000000","message":"All these conditions would get handled if you use manager_utils.node_power_action(task, states.REBOOT) from [1].\n[1] https://github.com/openstack/ironic/blob/master/ironic/conductor/utils.py#L260-L343","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"da212f518aef8c067411304ee3c998bf135d5f12","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        :raises: RedfishError on an error from the Sushy library"},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":229,"context_line":"        current_power_state \u003d redfish_power.GET_POWER_STATE_MAP\\"},{"line_number":230,"context_line":"            .get(system.power_state)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if current_power_state \u003d\u003d states.POWER_ON:"},{"line_number":234,"context_line":"                set_state \u003d redfish_power.SET_POWER_STATE_MAP\\"},{"line_number":235,"context_line":"                    .get(states.REBOOT)"},{"line_number":236,"context_line":"            else:"},{"line_number":237,"context_line":"                set_state \u003d redfish_power.SET_POWER_STATE_MAP\\"},{"line_number":238,"context_line":"                    .get(states.POWER_ON)"},{"line_number":239,"context_line":"            LOG.debug(\u0027Sending %(state)s to reboot node %(node_uuid)s\u0027,"},{"line_number":240,"context_line":"                      {\u0027state\u0027: set_state, \u0027node_uuid\u0027: task.node.uuid})"},{"line_number":241,"context_line":"            system.reset_system(set_state)"},{"line_number":242,"context_line":"        except sushy.exceptions.SushyError as e:"},{"line_number":243,"context_line":"            error_msg \u003d (_(\u0027Redfish reboot failed for node %(node)s. \u0027"},{"line_number":244,"context_line":"                           \u0027Error: %(error)s\u0027) % {\u0027node\u0027: task.node.uuid,"},{"line_number":245,"context_line":"                                                  \u0027error\u0027: e})"},{"line_number":246,"context_line":"            LOG.error(error_msg)"},{"line_number":247,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _set_cleaning_reboot(self, task):"},{"line_number":250,"context_line":"        \"\"\"Set driver_internal_info flags for cleaning reboot."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_49666029","line":247,"range":{"start_line":228,"start_character":1,"end_line":247,"end_character":57},"in_reply_to":"3f79a3b5_2b8d1f7c","updated":"2018-11-28 17:13:47.000000000","message":"I like that. I will test that out and if it works well I\u0027ll update. Thanks!","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2dc2cbf1ed836c783ba2ed2170af4e07d20699d1","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        :raises: RedfishError on an error from the Sushy library"},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        system \u003d redfish_utils.get_system(task.node)"},{"line_number":229,"context_line":"        current_power_state \u003d redfish_power.GET_POWER_STATE_MAP\\"},{"line_number":230,"context_line":"            .get(system.power_state)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        try:"},{"line_number":233,"context_line":"            if current_power_state \u003d\u003d states.POWER_ON:"},{"line_number":234,"context_line":"                set_state \u003d redfish_power.SET_POWER_STATE_MAP\\"},{"line_number":235,"context_line":"                    .get(states.REBOOT)"},{"line_number":236,"context_line":"            else:"},{"line_number":237,"context_line":"                set_state \u003d redfish_power.SET_POWER_STATE_MAP\\"},{"line_number":238,"context_line":"                    .get(states.POWER_ON)"},{"line_number":239,"context_line":"            LOG.debug(\u0027Sending %(state)s to reboot node %(node_uuid)s\u0027,"},{"line_number":240,"context_line":"                      {\u0027state\u0027: set_state, \u0027node_uuid\u0027: task.node.uuid})"},{"line_number":241,"context_line":"            system.reset_system(set_state)"},{"line_number":242,"context_line":"        except sushy.exceptions.SushyError as e:"},{"line_number":243,"context_line":"            error_msg \u003d (_(\u0027Redfish reboot failed for node %(node)s. \u0027"},{"line_number":244,"context_line":"                           \u0027Error: %(error)s\u0027) % {\u0027node\u0027: task.node.uuid,"},{"line_number":245,"context_line":"                                                  \u0027error\u0027: e})"},{"line_number":246,"context_line":"            LOG.error(error_msg)"},{"line_number":247,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def _set_cleaning_reboot(self, task):"},{"line_number":250,"context_line":"        \"\"\"Set driver_internal_info flags for cleaning reboot."}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_2b8d1f7c","line":247,"range":{"start_line":228,"start_character":1,"end_line":247,"end_character":57},"in_reply_to":"3f79a3b5_41a40105","updated":"2018-11-28 13:31:22.000000000","message":"This seems follow-up worthy if the canned manager_utils.node_power_action can work.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"5dc373677b09331f10424dec8502179c302b20ce","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        error_msg \u003d (_(\u0027Redfish BIOS apply_configuration step failed for node \u0027"},{"line_number":293,"context_line":"                       \u0027%(node)s. Attributes %(attrs)s not updated.\u0027) %"},{"line_number":294,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027attrs\u0027: attrs_not_updated})"},{"line_number":295,"context_line":"        LOG.error(error_msg)"},{"line_number":296,"context_line":"        task.node.last_error \u003d error_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_a1b2b5e6","line":293,"range":{"start_line":293,"start_character":24,"end_line":293,"end_character":32},"updated":"2018-11-28 09:46:11.000000000","message":"We don\u0027t put the node id to the message that is being saved to node.last_error. may be you will have to create append the node_id before logging it as LOG.error().","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"5dc373677b09331f10424dec8502179c302b20ce","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        error_msg \u003d (_(\u0027Redfish BIOS apply_configuration step failed for node \u0027"},{"line_number":293,"context_line":"                       \u0027%(node)s. Attributes %(attrs)s not updated.\u0027) %"},{"line_number":294,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027attrs\u0027: attrs_not_updated})"},{"line_number":295,"context_line":"        LOG.error(error_msg)"},{"line_number":296,"context_line":"        task.node.last_error \u003d error_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_2178e529","line":293,"range":{"start_line":293,"start_character":55,"end_line":293,"end_character":58},"updated":"2018-11-28 09:46:11.000000000","message":"nit: s/ not / are not /","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"da212f518aef8c067411304ee3c998bf135d5f12","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        error_msg \u003d (_(\u0027Redfish BIOS apply_configuration step failed for node \u0027"},{"line_number":293,"context_line":"                       \u0027%(node)s. Attributes %(attrs)s not updated.\u0027) %"},{"line_number":294,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027attrs\u0027: attrs_not_updated})"},{"line_number":295,"context_line":"        LOG.error(error_msg)"},{"line_number":296,"context_line":"        task.node.last_error \u003d error_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_e91e4c73","line":293,"range":{"start_line":293,"start_character":55,"end_line":293,"end_character":58},"in_reply_to":"3f79a3b5_2178e529","updated":"2018-11-28 17:13:47.000000000","message":"I\u0027ll fix that.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"da212f518aef8c067411304ee3c998bf135d5f12","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        error_msg \u003d (_(\u0027Redfish BIOS apply_configuration step failed for node \u0027"},{"line_number":293,"context_line":"                       \u0027%(node)s. Attributes %(attrs)s not updated.\u0027) %"},{"line_number":294,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027attrs\u0027: attrs_not_updated})"},{"line_number":295,"context_line":"        LOG.error(error_msg)"},{"line_number":296,"context_line":"        task.node.last_error \u003d error_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_cc3b5ec3","line":293,"range":{"start_line":293,"start_character":24,"end_line":293,"end_character":32},"in_reply_to":"3f79a3b5_4b9bbbc5","updated":"2018-11-28 17:13:47.000000000","message":"I see your point. I could create 2 messages, one with the node uuid and one without. Or I could just leave it as is.\n\nShivanand - are you OK with leaving it as it is or do you feel strongly about eliminating the uuid in the last_error?","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2dc2cbf1ed836c783ba2ed2170af4e07d20699d1","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :param attrs_not_updated: the BIOS attributes that were not updated."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        error_msg \u003d (_(\u0027Redfish BIOS apply_configuration step failed for node \u0027"},{"line_number":293,"context_line":"                       \u0027%(node)s. Attributes %(attrs)s not updated.\u0027) %"},{"line_number":294,"context_line":"                     {\u0027node\u0027: task.node.uuid, \u0027attrs\u0027: attrs_not_updated})"},{"line_number":295,"context_line":"        LOG.error(error_msg)"},{"line_number":296,"context_line":"        task.node.last_error \u003d error_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_4b9bbbc5","line":293,"range":{"start_line":293,"start_character":24,"end_line":293,"end_character":32},"in_reply_to":"3f79a3b5_a1b2b5e6","updated":"2018-11-28 13:31:22.000000000","message":"Agree it is somewhat pointless log the node uuid when the last_error fields is populated, but we have a number of places in the code base where we generate the error string once and use it in both places. In other words, I\u0027m fine with this.","commit_id":"9b0acd22f819a8c59782c4a0733035775b899e0c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"fdcfcba9aee71c0bef787298e78126442b87fbad","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.post_reset(task)"},{"line_number":103,"context_line":"        self._set_cleaning_reboot(task)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":106,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_b1639946","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":39},"updated":"2018-12-02 05:51:24.000000000","message":"We do not re-cache the BIOS settings post reboot in this case. The BIOS settings being cached would have changed post reboot of the server and needs to be refreshed.\nIf we were to follow same approach of apply_configuration() by setting the node\u0027s \"driver_internal_info[\u0027skip_current_clean_step\u0027] \u003d False\"\nalong with some guarding variable like \"driver_internal_info[\u0027post_reset_config_reboot_requested\u0027] \u003d True\", it would re-cache the settings when it re-enters this method post-reboot. Isn\u0027t it?","commit_id":"9880262defb96531245234abdbe24ae1b9236c73"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"438465bcadb109ac7b0e19b3e38c6a9bdc58f66c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.post_reset(task)"},{"line_number":103,"context_line":"        self._set_cleaning_reboot(task)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":106,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_26473f1e","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":39},"in_reply_to":"3f79a3b5_11fa7e11","updated":"2018-12-03 15:33:26.000000000","message":"Thanks. Yes, I\u0027ll investigate this and follow-up.","commit_id":"9880262defb96531245234abdbe24ae1b9236c73"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c673713afa30370426b8a6cdda05269908b847f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            raise exception.RedfishError(error\u003derror_msg)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.post_reset(task)"},{"line_number":103,"context_line":"        self._set_cleaning_reboot(task)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.clean_step(priority\u003d0, argsinfo\u003d{"},{"line_number":106,"context_line":"        \u0027settings\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_11fa7e11","line":103,"range":{"start_line":103,"start_character":8,"end_line":103,"end_character":39},"in_reply_to":"3f79a3b5_b1639946","updated":"2018-12-03 14:25:16.000000000","message":"I think it would be a good thing to follow-up on.","commit_id":"9880262defb96531245234abdbe24ae1b9236c73"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"cf6553d7a49971a31fddc5cbdf5d0120220ac907","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                      \u0027successful.\u0027, {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":221,"context_line":"    def _reboot(self, task):"},{"line_number":222,"context_line":"        \"\"\"Reboot the target Redfish service."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":225,"context_line":"        :raises: InvalidParameterValue when the wrong state is specified"},{"line_number":226,"context_line":"             or the wrong driver info is specified."},{"line_number":227,"context_line":"        :raises: RedfishError on an error from the Sushy library"},{"line_number":228,"context_line":"        \"\"\""},{"line_number":229,"context_line":"        manager_utils.node_power_action(task, states.REBOOT)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def _set_cleaning_reboot(self, task):"},{"line_number":232,"context_line":"        \"\"\"Set driver_internal_info flags for cleaning reboot."}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_6188ef24","line":229,"range":{"start_line":221,"start_character":4,"end_line":229,"end_character":60},"updated":"2018-11-30 05:23:04.000000000","message":"Do you really need this method now? you can call manager_utils.node_power_action(task, states.REBOOT) from  post_reset() and post_configuration(). It can be done in follow-up.","commit_id":"9880262defb96531245234abdbe24ae1b9236c73"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c673713afa30370426b8a6cdda05269908b847f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                      \u0027successful.\u0027, {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":221,"context_line":"    def _reboot(self, task):"},{"line_number":222,"context_line":"        \"\"\"Reboot the target Redfish service."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":225,"context_line":"        :raises: InvalidParameterValue when the wrong state is specified"},{"line_number":226,"context_line":"             or the wrong driver info is specified."},{"line_number":227,"context_line":"        :raises: RedfishError on an error from the Sushy library"},{"line_number":228,"context_line":"        \"\"\""},{"line_number":229,"context_line":"        manager_utils.node_power_action(task, states.REBOOT)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def _set_cleaning_reboot(self, task):"},{"line_number":232,"context_line":"        \"\"\"Set driver_internal_info flags for cleaning reboot."}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_83196577","line":229,"range":{"start_line":221,"start_character":4,"end_line":229,"end_character":60},"in_reply_to":"3f79a3b5_6188ef24","updated":"2018-12-03 14:25:16.000000000","message":"I think it may be necessary because some hardware may not be able to reboot until a specific task is done, and if that is the only thing that defines needing a new driver, then we should have the method in place to be able to replace it... Even though it is a private method :\\","commit_id":"9880262defb96531245234abdbe24ae1b9236c73"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"438465bcadb109ac7b0e19b3e38c6a9bdc58f66c","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                      \u0027successful.\u0027, {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":221,"context_line":"    def _reboot(self, task):"},{"line_number":222,"context_line":"        \"\"\"Reboot the target Redfish service."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":225,"context_line":"        :raises: InvalidParameterValue when the wrong state is specified"},{"line_number":226,"context_line":"             or the wrong driver info is specified."},{"line_number":227,"context_line":"        :raises: RedfishError on an error from the Sushy library"},{"line_number":228,"context_line":"        \"\"\""},{"line_number":229,"context_line":"        manager_utils.node_power_action(task, states.REBOOT)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def _set_cleaning_reboot(self, task):"},{"line_number":232,"context_line":"        \"\"\"Set driver_internal_info flags for cleaning reboot."}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_c6d44bf3","line":229,"range":{"start_line":221,"start_character":4,"end_line":229,"end_character":60},"in_reply_to":"3f79a3b5_83196577","updated":"2018-12-03 15:33:26.000000000","message":"Shivanand and Julia - good points.\n\nThe intended override points are the post_reset() and post_configuration(). If a vendor needs to do something other than or in addition to the reboot, they can override one or both of those methods.\n\nSo, I think we can eliminate the private _reboot() method and have post_reset() and post_configuration() directly call manager_utils.node_power_action(task, states.REBOOT) as the default behavior. And vendors can override the post_*() mthods as needed.\n\nDoes that sound good?","commit_id":"9880262defb96531245234abdbe24ae1b9236c73"}],"ironic/drivers/redfish.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"74fd1ba3446df47030268cfb1b69155740769edc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @property"},{"line_number":36,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":37,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":38,"context_line":"        return [redfish_bios.RedfishBIOS]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_a82cb649","line":38,"updated":"2018-07-23 09:57:31.000000000","message":"nit: move before management to keep the ordering","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"7ec65dcda74ad98309fdd5cd6a53a11e5c52b942","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @property"},{"line_number":36,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":37,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":38,"context_line":"        return [redfish_bios.RedfishBIOS]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_74dffdd6","line":38,"in_reply_to":"5f7c97a3_a82cb649","updated":"2018-07-26 13:46:36.000000000","message":"Will do.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4f035b05a20a2d1df5cb833d9627c1c8bb28c22e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @property"},{"line_number":26,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":27,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":28,"context_line":"        return [redfish_bios.RedfishBIOS]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @property"},{"line_number":31,"context_line":"    def supported_management_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e206bd1c","line":28,"updated":"2018-08-11 15:34:03.000000000","message":"++, this is the convention we have for optional interfaces like BIOS.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"5dcb54823e9077ac8aa47615baef47f48a66aa99","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @property"},{"line_number":26,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":27,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":28,"context_line":"        return [redfish_bios.RedfishBIOS]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @property"},{"line_number":31,"context_line":"    def supported_management_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0615389c","line":28,"range":{"start_line":28,"start_character":16,"end_line":28,"end_character":40},"updated":"2018-08-09 17:54:23.000000000","message":"I think this also needs to return ironic.drivers.modules.noop.NoBIOS","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"64d3e06239cf6fbf7546b2858ea901663c7992df","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    @property"},{"line_number":26,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":27,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":28,"context_line":"        return [redfish_bios.RedfishBIOS]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @property"},{"line_number":31,"context_line":"    def supported_management_interfaces(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_327bf5be","line":28,"in_reply_to":"3f79a3b5_e206bd1c","updated":"2018-08-20 21:36:39.000000000","message":"Dmitry - thanks for confirming.","commit_id":"a0bdb547a12d49c2a181b21890c18b6822cfd132"}],"setup.cfg":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"32abe2114b54e6df0d23584d219771500c0b7516","unresolved":false,"context_lines":[{"line_number":55,"context_line":"ironic.hardware.interfaces.bios \u003d"},{"line_number":56,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeBIOS"},{"line_number":57,"context_line":"    no-bios \u003d ironic.drivers.modules.noop:NoBIOS"},{"line_number":58,"context_line":"    redfish \u003d ironic.drivers.modules.redfish.bios:RedfishBIOS"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"ironic.hardware.interfaces.boot \u003d"},{"line_number":61,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeBoot"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"5f7c97a3_664f8535","line":58,"updated":"2018-07-12 20:01:20.000000000","message":"FYI, this is going to merge conflict shortly, I just approved irmc to land.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"},{"author":{"_account_id":28128,"name":"Bill Dodd","email":"billdodd@gmail.com","username":"billdodd"},"change_message_id":"277671b7dc276ac91607364a764880fe204267b3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"ironic.hardware.interfaces.bios \u003d"},{"line_number":56,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeBIOS"},{"line_number":57,"context_line":"    no-bios \u003d ironic.drivers.modules.noop:NoBIOS"},{"line_number":58,"context_line":"    redfish \u003d ironic.drivers.modules.redfish.bios:RedfishBIOS"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"ironic.hardware.interfaces.boot \u003d"},{"line_number":61,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeBoot"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"5f7c97a3_3f2e7042","line":58,"in_reply_to":"5f7c97a3_664f8535","updated":"2018-07-12 22:20:58.000000000","message":"Thanks for the heads-up. I\u0027ll watch out for that and rebase as needed.","commit_id":"88a3adb056a0010c1e26b7cefccb8aa0009fa8ca"}]}
