)]}'
{"ironic/api/controllers/v1/driver.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"fa2fa9f3e06c8b89076883ed6b982e7f1c28768d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    default_raid_interface \u003d wtypes.text"},{"line_number":106,"context_line":"    default_storage_interface \u003d wtypes.text"},{"line_number":107,"context_line":"    default_vendor_interface \u003d wtypes.text"},{"line_number":108,"context_line":"    default_bios_interface \u003d wtypes.text"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    \"\"\"A list of enabled interfaces for a hardware type\"\"\""},{"line_number":111,"context_line":"    enabled_boot_interfaces \u003d [wtypes.text]"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_33711777","line":108,"updated":"2017-12-12 06:53:18.000000000","message":"These changes should be done in another patch for REST API with bumping API version.","commit_id":"2ba5c134b50a08f085082d31c0e59976ec832262"}],"ironic/common/driver_factory.py":[{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"80038cf44f680ec98e662718e6c28e6881772bc9","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    # Explicit interface defaults"},{"line_number":177,"context_line":"    additional_defaults \u003d {"},{"line_number":178,"context_line":"        \u0027storage\u0027: \u0027noop\u0027,"},{"line_number":179,"context_line":"        \u0027bios\u0027: \u0027no-bios\u0027"},{"line_number":180,"context_line":"    }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    if not is_hardware_type:"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_785e2a77","line":179,"range":{"start_line":179,"start_character":7,"end_line":179,"end_character":25},"updated":"2018-03-21 08:18:18.000000000","message":"I think should be in alphabetical order","commit_id":"ebcf197831c738db2f0ea319815667ddc6a2f7d7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                  hardware_type.AbstractHardwareType)"},{"line_number":176,"context_line":"    # Explicit interface defaults"},{"line_number":177,"context_line":"    additional_defaults \u003d {"},{"line_number":178,"context_line":"        \u0027bios\u0027: \u0027no-bios\u0027,"},{"line_number":179,"context_line":"        \u0027storage\u0027: \u0027noop\u0027"},{"line_number":180,"context_line":"    }"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_dfef4a85","line":178,"updated":"2018-04-17 08:46:17.000000000","message":"Is there a reason why this needs to be here but others like no-console and no-inspect do not?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                                  hardware_type.AbstractHardwareType)"},{"line_number":176,"context_line":"    # Explicit interface defaults"},{"line_number":177,"context_line":"    additional_defaults \u003d {"},{"line_number":178,"context_line":"        \u0027bios\u0027: \u0027no-bios\u0027,"},{"line_number":179,"context_line":"        \u0027storage\u0027: \u0027noop\u0027"},{"line_number":180,"context_line":"    }"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_9b2a0f8e","line":178,"in_reply_to":"9f6a8fd7_dfef4a85","updated":"2018-04-19 03:42:19.000000000","message":"This was previously added for passing unit tests.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"}],"ironic/conf/default.py":[{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"80038cf44f680ec98e662718e6c28e6881772bc9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027vendor\u0027)),"},{"line_number":157,"context_line":"    cfg.StrOpt(\u0027default_vendor_interface\u0027,"},{"line_number":158,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027vendor\u0027)),"},{"line_number":159,"context_line":"    cfg.ListOpt(\u0027enabled_bios_interfaces\u0027,"},{"line_number":160,"context_line":"                default\u003d[\u0027no-bios\u0027],"},{"line_number":161,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027bios\u0027)),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027default_bios_interface\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_98945eea","line":159,"range":{"start_line":159,"start_character":4,"end_line":159,"end_character":42},"updated":"2018-03-21 08:18:18.000000000","message":"this should be in  human alphabetical order","commit_id":"ebcf197831c738db2f0ea319815667ddc6a2f7d7"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                       \u0027\"ironic.hardware.types\" entrypoint.\u0027)),"},{"line_number":106,"context_line":"    cfg.ListOpt(\u0027enabled_bios_interfaces\u0027,"},{"line_number":107,"context_line":"                default\u003d[\u0027no-bios\u0027],"},{"line_number":108,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027bios\u0027)),"},{"line_number":109,"context_line":"    cfg.StrOpt(\u0027default_bios_interface\u0027,"},{"line_number":110,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027bios\u0027)),"},{"line_number":111,"context_line":"    cfg.ListOpt(\u0027enabled_boot_interfaces\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_aeb2ec47","line":108,"updated":"2018-03-30 06:44:59.000000000","message":"It would be better to use such a help message[1] till the API change is merged. Please also post a patch to fix the messages like this[2] after the API patch.\n\n[1] https://review.openstack.org/#/c/509335/29/ironic/conf/default.py\n[2] https://review.openstack.org/#/c/517919/","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                       \u0027\"ironic.hardware.types\" entrypoint.\u0027)),"},{"line_number":106,"context_line":"    cfg.ListOpt(\u0027enabled_bios_interfaces\u0027,"},{"line_number":107,"context_line":"                default\u003d[\u0027no-bios\u0027],"},{"line_number":108,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027bios\u0027)),"},{"line_number":109,"context_line":"    cfg.StrOpt(\u0027default_bios_interface\u0027,"},{"line_number":110,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027bios\u0027)),"},{"line_number":111,"context_line":"    cfg.ListOpt(\u0027enabled_boot_interfaces\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_73ed82b5","line":108,"in_reply_to":"bf659307_aeb2ec47","updated":"2018-04-02 03:42:57.000000000","message":"Done","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                default\u003d[\u0027ipmitool\u0027, \u0027no-vendor\u0027],"},{"line_number":163,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027vendor\u0027)),"},{"line_number":164,"context_line":"    cfg.StrOpt(\u0027default_vendor_interface\u0027,"},{"line_number":165,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027vendor\u0027))"},{"line_number":166,"context_line":"]"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"exc_log_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_6e7cd482","line":165,"updated":"2018-03-30 06:44:59.000000000","message":"This change is not necessary.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                default\u003d[\u0027ipmitool\u0027, \u0027no-vendor\u0027],"},{"line_number":163,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027vendor\u0027)),"},{"line_number":164,"context_line":"    cfg.StrOpt(\u0027default_vendor_interface\u0027,"},{"line_number":165,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027vendor\u0027))"},{"line_number":166,"context_line":"]"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"exc_log_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_f3367251","line":165,"in_reply_to":"bf659307_6e7cd482","updated":"2018-04-02 03:42:57.000000000","message":"Done","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca77e68de5f630cbdd3d0d95c744163bd14477cf","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                default\u003d[\u0027ipmitool\u0027, \u0027no-vendor\u0027],"},{"line_number":163,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027vendor\u0027)),"},{"line_number":164,"context_line":"    cfg.StrOpt(\u0027default_vendor_interface\u0027,"},{"line_number":165,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027vendor\u0027))"},{"line_number":166,"context_line":"]"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"exc_log_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_c5f93dc8","line":165,"updated":"2018-04-23 08:33:40.000000000","message":"nit: unnecessary change","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                default\u003d[\u0027ipmitool\u0027, \u0027no-vendor\u0027],"},{"line_number":163,"context_line":"                help\u003d_ENABLED_IFACE_HELP.format(\u0027vendor\u0027)),"},{"line_number":164,"context_line":"    cfg.StrOpt(\u0027default_vendor_interface\u0027,"},{"line_number":165,"context_line":"               help\u003d_DEFAULT_IFACE_HELP.format(\u0027vendor\u0027))"},{"line_number":166,"context_line":"]"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"exc_log_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_5862d9d9","line":165,"in_reply_to":"9f6a8fd7_c5f93dc8","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"}],"ironic/drivers/base.py":[{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c5935445fbd52e3600d40c47ccc192779a1593d6","unresolved":false,"context_lines":[{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def __init__(self):"},{"line_number":907,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"    @abc.abstractmethod"},{"line_number":910,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":911,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_eef7848a","line":908,"updated":"2018-03-30 07:10:01.000000000","message":"some method is declared abstract, but provides default implementation, while some take opposite, so in overall the interface definition is not clear to me.\nSome supplements to Hironori\u0027s comments, please see below.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":905,"context_line":""},{"line_number":906,"context_line":"    def __init__(self):"},{"line_number":907,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"    @abc.abstractmethod"},{"line_number":910,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":911,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_768b3067","line":908,"in_reply_to":"bf659307_eef7848a","updated":"2018-04-02 03:42:57.000000000","message":"removing the default implementation of apply_configuration and factory_reset.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c5935445fbd52e3600d40c47ccc192779a1593d6","unresolved":false,"context_lines":[{"line_number":907,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"    @abc.abstractmethod"},{"line_number":910,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":911,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_0e0bd87c","line":910,"range":{"start_line":910,"start_character":8,"end_line":910,"end_character":27},"updated":"2018-03-30 07:10:01.000000000","message":"I guess this interface is an API to conductor, we need to remove the abstractmethod decorator.\n\nAlso we are missing a validate procedure, BaseInterface defined a validate(), we can just add a call here.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":907,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":908,"context_line":""},{"line_number":909,"context_line":"    @abc.abstractmethod"},{"line_number":910,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":911,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_d67c7c73","line":910,"range":{"start_line":910,"start_character":8,"end_line":910,"end_character":27},"in_reply_to":"bf659307_0e0bd87c","updated":"2018-04-02 03:42:57.000000000","message":"the validation may be done inside apply_configuration, it depends on vendor implementations.\n\napply_configuration and factory_reset are cleaning steps, shall they be set as abstract method?","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":929,"context_line":"        \"\"\""},{"line_number":930,"context_line":"        self.do_apply_configuration(task, settings)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"    def do_apply_configuration(self, task, settings):"},{"line_number":933,"context_line":"        \"\"\"Do BIOS configuration."},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_ce4ba028","line":932,"updated":"2018-03-30 06:44:59.000000000","message":"Should it be an abstract method?","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":929,"context_line":"        \"\"\""},{"line_number":930,"context_line":"        self.do_apply_configuration(task, settings)"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"    def do_apply_configuration(self, task, settings):"},{"line_number":933,"context_line":"        \"\"\"Do BIOS configuration."},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_b3255a0b","line":932,"in_reply_to":"bf659307_ce4ba028","updated":"2018-04-02 03:42:57.000000000","message":"Done","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c5935445fbd52e3600d40c47ccc192779a1593d6","unresolved":false,"context_lines":[{"line_number":949,"context_line":"            asynchronously or None if it is complete."},{"line_number":950,"context_line":"        \"\"\""},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    @abc.abstractmethod"},{"line_number":953,"context_line":"    def factory_reset(self, task):"},{"line_number":954,"context_line":"        \"\"\"Reset BIOS configuration to factory default on the given node."},{"line_number":955,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_6e68541c","line":952,"range":{"start_line":952,"start_character":9,"end_line":952,"end_character":23},"updated":"2018-03-30 07:10:01.000000000","message":"I think it can be removed, do_factory_reset is the abstract method needs an driver implementation.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":964,"context_line":"        \"\"\""},{"line_number":965,"context_line":"        self.do_factory_reset(task)"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"    def do_factory_reset(self, task):"},{"line_number":968,"context_line":"        \"\"\"Do reset action."},{"line_number":969,"context_line":""},{"line_number":970,"context_line":"        This method reset BIOS configuration to factory default on the node."}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_ae4e6c35","line":967,"updated":"2018-03-30 06:44:59.000000000","message":"ditto","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":964,"context_line":"        \"\"\""},{"line_number":965,"context_line":"        self.do_factory_reset(task)"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"    def do_factory_reset(self, task):"},{"line_number":968,"context_line":"        \"\"\"Do reset action."},{"line_number":969,"context_line":""},{"line_number":970,"context_line":"        This method reset BIOS configuration to factory default on the node."}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_53207ef7","line":967,"in_reply_to":"bf659307_ae4e6c35","updated":"2018-04-02 03:42:57.000000000","message":"Done","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":979,"context_line":"            asynchronously or None if it is complete."},{"line_number":980,"context_line":"        \"\"\""},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":983,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_4e61d0a8","line":982,"updated":"2018-03-30 06:44:59.000000000","message":"ditto","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":979,"context_line":"            asynchronously or None if it is complete."},{"line_number":980,"context_line":"        \"\"\""},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":983,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_137c46ea","line":982,"in_reply_to":"bf659307_4e61d0a8","updated":"2018-04-02 03:42:57.000000000","message":"Done","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":18781,"name":"vinay muddu","email":"vinay50muddu@yahoo.com","username":"vmud213"},"change_message_id":"8e10ef9f983b125dac0c06d5aaeb093413cc8feb","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        \"\"\""},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    @abc.abstractmethod"},{"line_number":983,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":984,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":33,"id":"bf659307_e4554afb","line":983,"range":{"start_line":983,"start_character":8,"end_line":983,"end_character":39},"updated":"2018-04-02 09:00:31.000000000","message":"Irrespective of the vendor bios configuration, this operation(updating the bios_settings table) remains the same. It\u0027d be better to have a default implementation for it. The vendor may chose to override it if required. WDYT?","commit_id":"4216d544d2da0de8dc59da0896675913928f248f"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"709f7bf0d68026e3640ec449cef6f9488a6f075e","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        \"\"\""},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    @abc.abstractmethod"},{"line_number":983,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":984,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":33,"id":"bf659307_3ea32302","line":983,"range":{"start_line":983,"start_character":8,"end_line":983,"end_character":39},"in_reply_to":"bf659307_e4554afb","updated":"2018-04-04 02:06:05.000000000","message":"Thanks for the comment, Vinay!\n\nThis method may contains two steps, first is to retrieve current bios options from baremetal(there isn\u0027t a settings param in this method to pass bios options need to be cached), second is to store retrieved values into bois_setting table. As the first step differs from vendors, it may not be able to have the default implementation.\n\nThis reminds me that vendor implementation may need to distinguish whether to use create_* or update_* db api to save bios_settings, current DB API exposes two methods : get_bios_settings and get_node_bios_settings_by_node_id, it maybe also good to add another method : bos_setting_exist to check the existence of bios options before calling create/update.","commit_id":"4216d544d2da0de8dc59da0896675913928f248f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    bios \u003d None"},{"line_number":129,"context_line":"    \"\"\"`Standard` attribute for BIOS related features."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    A reference to an instance of :class:BiosInterface."},{"line_number":132,"context_line":"    May be None, if unsupported by a driver."},{"line_number":133,"context_line":"    \"\"\""},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_126db997","line":131,"updated":"2018-04-17 08:46:17.000000000","message":"nit: BIOSInterface","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    bios \u003d None"},{"line_number":129,"context_line":"    \"\"\"`Standard` attribute for BIOS related features."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    A reference to an instance of :class:BiosInterface."},{"line_number":132,"context_line":"    May be None, if unsupported by a driver."},{"line_number":133,"context_line":"    \"\"\""},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_fea53905","line":131,"in_reply_to":"9f6a8fd7_126db997","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    @abc.abstractmethod"},{"line_number":935,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":936,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":937,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_f2c04553","line":934,"updated":"2018-04-17 08:46:17.000000000","message":"This method should not have implementation if it\u0027s abstract. The spec says do_apply_configuration() should be abstract, which makes more sense.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    @abc.abstractmethod"},{"line_number":935,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":936,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":937,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_bec6e199","line":934,"in_reply_to":"9f6a8fd7_f2c04553","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    @abc.abstractmethod"},{"line_number":935,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":936,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_f28e052d","line":935,"updated":"2018-04-17 08:46:17.000000000","message":"Should this have the clean_step decorator? Or will that be added later?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    @abc.abstractmethod"},{"line_number":935,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":936,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_e5cd6185","line":935,"in_reply_to":"9f6a8fd7_1eeb4db0","updated":"2018-04-23 08:27:35.000000000","message":"Ok, looks like you\u0027re right - clean steps tend to be defined in the driver implementation.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    @abc.abstractmethod"},{"line_number":935,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":936,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":937,"context_line":""},{"line_number":938,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_1eeb4db0","line":935,"in_reply_to":"9f6a8fd7_f28e052d","updated":"2018-04-19 03:42:19.000000000","message":"looking at other clean steps, this may only be needed in driver implementation, not the base one ?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":952,"context_line":"        :returns: states.CLEANWAIT if BIOS configuration is in progress"},{"line_number":953,"context_line":"            asynchronously or None if it is complete."},{"line_number":954,"context_line":"        \"\"\""},{"line_number":955,"context_line":"        self.do_apply_configuration(task, settings)"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"    def do_apply_configuration(self, task, settings):"},{"line_number":958,"context_line":"        \"\"\"Do BIOS configuration."}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_d2d2e134","line":955,"updated":"2018-04-17 08:46:17.000000000","message":"Needs \u0027return\u0027","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":952,"context_line":"        :returns: states.CLEANWAIT if BIOS configuration is in progress"},{"line_number":953,"context_line":"            asynchronously or None if it is complete."},{"line_number":954,"context_line":"        \"\"\""},{"line_number":955,"context_line":"        self.do_apply_configuration(task, settings)"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"    def do_apply_configuration(self, task, settings):"},{"line_number":958,"context_line":"        \"\"\"Do BIOS configuration."}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_3ea2d1af","line":955,"in_reply_to":"9f6a8fd7_d2d2e134","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":974,"context_line":"            asynchronously or None if it is complete."},{"line_number":975,"context_line":"        \"\"\""},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    @abc.abstractmethod"},{"line_number":978,"context_line":"    def factory_reset(self, task):"},{"line_number":979,"context_line":"        \"\"\"Reset BIOS configuration to factory default on the given node."},{"line_number":980,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_12c5b93c","line":977,"updated":"2018-04-17 08:46:17.000000000","message":"Ditto","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":974,"context_line":"            asynchronously or None if it is complete."},{"line_number":975,"context_line":"        \"\"\""},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    @abc.abstractmethod"},{"line_number":978,"context_line":"    def factory_reset(self, task):"},{"line_number":979,"context_line":"        \"\"\"Reset BIOS configuration to factory default on the given node."},{"line_number":980,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_7ec0497c","line":977,"in_reply_to":"9f6a8fd7_12c5b93c","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        :returns: states.CLEANWAIT if BIOS configuration is in progress"},{"line_number":988,"context_line":"            asynchronously or None if it is complete."},{"line_number":989,"context_line":"        \"\"\""},{"line_number":990,"context_line":"        self.do_factory_reset(task)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":"    def do_factory_reset(self, task):"},{"line_number":993,"context_line":"        \"\"\"Do reset action."}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_d2b741d8","line":990,"updated":"2018-04-17 08:46:17.000000000","message":"return","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        :returns: states.CLEANWAIT if BIOS configuration is in progress"},{"line_number":988,"context_line":"            asynchronously or None if it is complete."},{"line_number":989,"context_line":"        \"\"\""},{"line_number":990,"context_line":"        self.do_factory_reset(task)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":"    def do_factory_reset(self, task):"},{"line_number":993,"context_line":"        \"\"\"Do reset action."}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_3e38919e","line":990,"in_reply_to":"9f6a8fd7_d2b741d8","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":995,"context_line":"        This method reset BIOS configuration to factory default on the node."},{"line_number":996,"context_line":"        After the BIOS reset action is done, self.cache_bios_settings()"},{"line_number":997,"context_line":"        will be called to update the node\u0027s BIOS settings table with default"},{"line_number":998,"context_line":"        bios settings."},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"        :param task: a TaskManager instance."},{"line_number":1001,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_b2396d42","line":998,"updated":"2018-04-17 08:46:17.000000000","message":"cache_bios_settings isn\u0027t actually being called.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":995,"context_line":"        This method reset BIOS configuration to factory default on the node."},{"line_number":996,"context_line":"        After the BIOS reset action is done, self.cache_bios_settings()"},{"line_number":997,"context_line":"        will be called to update the node\u0027s BIOS settings table with default"},{"line_number":998,"context_line":"        bios settings."},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"        :param task: a TaskManager instance."},{"line_number":1001,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_a598c974","line":998,"in_reply_to":"9f6a8fd7_3e0651d0","updated":"2018-04-23 08:27:35.000000000","message":"Perhaps it\u0027s just the wording that\u0027s confusing me. We can\u0027t really say cache_bios_settings *will* be called in an abstract method, but we can say that an implementation of the method *should* call cache_bios_settings.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":995,"context_line":"        This method reset BIOS configuration to factory default on the node."},{"line_number":996,"context_line":"        After the BIOS reset action is done, self.cache_bios_settings()"},{"line_number":997,"context_line":"        will be called to update the node\u0027s BIOS settings table with default"},{"line_number":998,"context_line":"        bios settings."},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"        :param task: a TaskManager instance."},{"line_number":1001,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_b8e4550e","line":998,"in_reply_to":"9f6a8fd7_a598c974","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":995,"context_line":"        This method reset BIOS configuration to factory default on the node."},{"line_number":996,"context_line":"        After the BIOS reset action is done, self.cache_bios_settings()"},{"line_number":997,"context_line":"        will be called to update the node\u0027s BIOS settings table with default"},{"line_number":998,"context_line":"        bios settings."},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"        :param task: a TaskManager instance."},{"line_number":1001,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_3e0651d0","line":998,"in_reply_to":"9f6a8fd7_b2396d42","updated":"2018-04-19 03:42:19.000000000","message":"the intention of calling cache_bios here is to update the node bios settings, because there maybe changes need to be synced with db after factory_reset, wdyt?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            asynchronously or None if it is complete."},{"line_number":1005,"context_line":"        \"\"\""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":1008,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_12da9916","line":1007,"updated":"2018-04-17 08:46:17.000000000","message":"abstractmethod?\n\nShould it accept a dict of settings?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            asynchronously or None if it is complete."},{"line_number":1005,"context_line":"        \"\"\""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":1008,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_1ee10dff","line":1007,"in_reply_to":"9f6a8fd7_12da9916","updated":"2018-04-19 03:42:19.000000000","message":"abstractmethod added.\nI was thinking to add a settings parameter, but should it more easier for driver implementation to read all the current bios setting and update the DB ?\nif we add settings parameter in this function, then shall the driver just update the given setting to DB or shall it also calculate the dependency and update all the related settings to DB? does driver have to implement the logic of calculation ?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            asynchronously or None if it is complete."},{"line_number":1005,"context_line":"        \"\"\""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":1008,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_c5a37d9d","line":1007,"in_reply_to":"9f6a8fd7_1ee10dff","updated":"2018-04-23 08:27:35.000000000","message":"I think I\u0027ll read the later cache patch and come back to this.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"        :param task: a TaskManager instance."},{"line_number":1016,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"},{"line_number":1017,"context_line":"            support getting BIOS properties from bare metal."},{"line_number":1018,"context_line":"        :returns: None if it is complete."},{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_f20a8588","line":1018,"updated":"2018-04-17 08:46:17.000000000","message":"What if it is not complete?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"        :param task: a TaskManager instance."},{"line_number":1016,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"},{"line_number":1017,"context_line":"            support getting BIOS properties from bare metal."},{"line_number":1018,"context_line":"        :returns: None if it is complete."},{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_18bf81d1","line":1018,"in_reply_to":"9f6a8fd7_4590cd43","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"        :param task: a TaskManager instance."},{"line_number":1016,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"},{"line_number":1017,"context_line":"            support getting BIOS properties from bare metal."},{"line_number":1018,"context_line":"        :returns: None if it is complete."},{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_4590cd43","line":1018,"in_reply_to":"9f6a8fd7_7e77e903","updated":"2018-04-23 08:27:35.000000000","message":"IMO the possibility of an exception is always implied, so just \u0027None\u0027 would be fine.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":1015,"context_line":"        :param task: a TaskManager instance."},{"line_number":1016,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"},{"line_number":1017,"context_line":"            support getting BIOS properties from bare metal."},{"line_number":1018,"context_line":"        :returns: None if it is complete."},{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_7e77e903","line":1018,"in_reply_to":"9f6a8fd7_f20a8588","updated":"2018-04-19 03:42:19.000000000","message":"If it\u0027s not complete, there might be error from db handling or driver itself, then it shall raise exception.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca77e68de5f630cbdd3d0d95c744163bd14477cf","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_258599cf","line":934,"updated":"2018-04-23 08:33:40.000000000","message":"This is not a reason for -1. Just my opinion.\n\nI slightly wonder if it might be better to make these method for clean steps abstract methods. Each practical interface should implement this method with the clean_step decorator to enables the method as a clean step. Then, this default implementation would not be so helpful.\n\nOtherwise, maybe, we can put the clean_step decorator here. I\u0027m not sure it\u0027s a good idea, though.","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"974935be4adce58a96f4f3486c1451f7e90ea83d","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_98a62cab","line":934,"in_reply_to":"9f6a8fd7_1809c194","updated":"2018-04-24 08:44:09.000000000","message":"+1","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"b55f706a747d003fd821fca4fe64dcf2ef0e785e","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_609cdfbf","line":934,"in_reply_to":"9f6a8fd7_258599cf","updated":"2018-04-23 08:41:22.000000000","message":"I think this is a good point.\n\nYou could also argue that the do_* methods are less useful if the others are abstract. Perhaps we should limit the methods in the base class to the interface\u0027s \u0027interface\u0027.","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_1809c194","line":934,"in_reply_to":"9f6a8fd7_609cdfbf","updated":"2018-04-24 03:42:32.000000000","message":"maybe just remove the do_* methods and add abstract for apply_ and factor_ methods.","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            asynchronously or None if it is complete."},{"line_number":1005,"context_line":"        \"\"\""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":1008,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_45f1ad6a","line":1007,"updated":"2018-04-23 08:27:35.000000000","message":"Should this be abstract?","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            asynchronously or None if it is complete."},{"line_number":1005,"context_line":"        \"\"\""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":1008,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        This method stores BIOS properties to the bios_settings table in"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_55062422","line":1007,"in_reply_to":"9f6a8fd7_45f1ad6a","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5ab0f8f06eb19b07cdfbaa31319ff032ee3a158f","unresolved":false,"context_lines":[{"line_number":929,"context_line":"    interface_type \u003d \u0027bios\u0027"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_0c5bbe86","line":932,"updated":"2018-04-24 11:52:24.000000000","message":"nit: this is not needed","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"c1de09d93506f8e5bed43ec49f761e1ca9f46349","unresolved":false,"context_lines":[{"line_number":929,"context_line":"    interface_type \u003d \u0027bios\u0027"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_cc8b86c0","line":932,"in_reply_to":"9f6a8fd7_0c5bbe86","updated":"2018-04-24 22:31:50.000000000","message":"Done","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5ab0f8f06eb19b07cdfbaa31319ff032ee3a158f","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_2c5ec275","line":934,"updated":"2018-04-24 11:52:24.000000000","message":"either this or do_apply_configuration is redundant. or did you intend to make one of them a clean step?","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"c1de09d93506f8e5bed43ec49f761e1ca9f46349","unresolved":false,"context_lines":[{"line_number":931,"context_line":"    def __init__(self):"},{"line_number":932,"context_line":"        \"\"\"Constructor for BIOSInterface class.\"\"\""},{"line_number":933,"context_line":""},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_6cc4baf5","line":934,"in_reply_to":"9f6a8fd7_2c5ec275","updated":"2018-04-24 22:31:50.000000000","message":"will remove do_* methods and make this method as abstract.","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5ab0f8f06eb19b07cdfbaa31319ff032ee3a158f","unresolved":false,"context_lines":[{"line_number":974,"context_line":"            asynchronously or None if it is complete."},{"line_number":975,"context_line":"        \"\"\""},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def factory_reset(self, task):"},{"line_number":978,"context_line":"        \"\"\"Reset BIOS configuration to factory default on the given node."},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        This method calls do_factory_reset to reset BIOS configuration to"}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_cc586689","line":977,"updated":"2018-04-24 11:52:24.000000000","message":"ditto","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"c1de09d93506f8e5bed43ec49f761e1ca9f46349","unresolved":false,"context_lines":[{"line_number":974,"context_line":"            asynchronously or None if it is complete."},{"line_number":975,"context_line":"        \"\"\""},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def factory_reset(self, task):"},{"line_number":978,"context_line":"        \"\"\"Reset BIOS configuration to factory default on the given node."},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        This method calls do_factory_reset to reset BIOS configuration to"}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_2cba426d","line":977,"in_reply_to":"9f6a8fd7_cc586689","updated":"2018-04-24 22:31:50.000000000","message":"Done","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3eb9643f8b0bab6e551dc93e3ff9433e1a1c1504","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # NOTE(jlvillal): These should be tuples to help prevent child classes from"},{"line_number":62,"context_line":"    # accidentally modifying the base class values."},{"line_number":63,"context_line":"    core_interfaces \u003d (\u0027deploy\u0027, \u0027power\u0027)"},{"line_number":64,"context_line":"    standard_interfaces \u003d (\u0027bios\u0027, \u0027boot\u0027, \u0027console\u0027, \u0027inspect\u0027, \u0027management\u0027,"},{"line_number":65,"context_line":"                           \u0027raid\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    power \u003d None"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_3447d7be","line":64,"range":{"start_line":64,"start_character":28,"end_line":64,"end_character":34},"updated":"2018-04-25 03:58:19.000000000","message":"I think this should be part of standard interfaces of BareDriver class \nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/base.py#L185-L186","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"09c4e90a745017f1315822161e499320e2e709b3","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # NOTE(jlvillal): These should be tuples to help prevent child classes from"},{"line_number":62,"context_line":"    # accidentally modifying the base class values."},{"line_number":63,"context_line":"    core_interfaces \u003d (\u0027deploy\u0027, \u0027power\u0027)"},{"line_number":64,"context_line":"    standard_interfaces \u003d (\u0027bios\u0027, \u0027boot\u0027, \u0027console\u0027, \u0027inspect\u0027, \u0027management\u0027,"},{"line_number":65,"context_line":"                           \u0027raid\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    power \u003d None"}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_efd42a4a","line":64,"range":{"start_line":64,"start_character":28,"end_line":64,"end_character":34},"in_reply_to":"9f6a8fd7_3447d7be","updated":"2018-04-25 04:40:32.000000000","message":"Done","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3eb9643f8b0bab6e551dc93e3ff9433e1a1c1504","unresolved":false,"context_lines":[{"line_number":977,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        This method stores BIOS properties to the bios_settings table in"},{"line_number":980,"context_line":"        _do_node_clean step and updates bios_settings table when"},{"line_number":981,"context_line":"        apply_configuration is called to set a new BIOS configuration."},{"line_number":982,"context_line":"        It will also update the timestamp of each bios setting."},{"line_number":983,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_14f65364","line":980,"range":{"start_line":980,"start_character":8,"end_line":980,"end_character":22},"updated":"2018-04-25 03:58:19.000000000","message":"Not sure if we should be giving name of Ironic private method her. Better to indicate its operation, e.g.:\nDuring \u0027cleaning\u0027 operation, stores BIOS properties to the bios_settings table.","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3eb9643f8b0bab6e551dc93e3ff9433e1a1c1504","unresolved":false,"context_lines":[{"line_number":977,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        This method stores BIOS properties to the bios_settings table in"},{"line_number":980,"context_line":"        _do_node_clean step and updates bios_settings table when"},{"line_number":981,"context_line":"        apply_configuration is called to set a new BIOS configuration."},{"line_number":982,"context_line":"        It will also update the timestamp of each bios setting."},{"line_number":983,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_14cdf32f","line":980,"range":{"start_line":980,"start_character":32,"end_line":980,"end_character":64},"updated":"2018-04-25 03:58:19.000000000","message":"This method does not get called when apply_configuration() is called, but one has to call it explicitly, isnt it?","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"09c4e90a745017f1315822161e499320e2e709b3","unresolved":false,"context_lines":[{"line_number":977,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        This method stores BIOS properties to the bios_settings table in"},{"line_number":980,"context_line":"        _do_node_clean step and updates bios_settings table when"},{"line_number":981,"context_line":"        apply_configuration is called to set a new BIOS configuration."},{"line_number":982,"context_line":"        It will also update the timestamp of each bios setting."},{"line_number":983,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_0f539e18","line":980,"range":{"start_line":980,"start_character":32,"end_line":980,"end_character":64},"in_reply_to":"9f6a8fd7_14cdf32f","updated":"2018-04-25 04:40:32.000000000","message":"There are two cases this function be called: \n1) as part of entering cleaning step; \n2) when apply_configuration() and factory_reset() are called to change BIOS configurations.\n\nin the latter case, cache_bios_settings will also be called after the cleaning step functions(apply_* and factory_*) to update the applied changes of BIOS configuration.","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"09c4e90a745017f1315822161e499320e2e709b3","unresolved":false,"context_lines":[{"line_number":977,"context_line":"        \"\"\"Store or update BIOS properties on the given node."},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        This method stores BIOS properties to the bios_settings table in"},{"line_number":980,"context_line":"        _do_node_clean step and updates bios_settings table when"},{"line_number":981,"context_line":"        apply_configuration is called to set a new BIOS configuration."},{"line_number":982,"context_line":"        It will also update the timestamp of each bios setting."},{"line_number":983,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_4f16764b","line":980,"range":{"start_line":980,"start_character":8,"end_line":980,"end_character":22},"in_reply_to":"9f6a8fd7_14f65364","updated":"2018-04-25 04:40:32.000000000","message":"Done","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3eb9643f8b0bab6e551dc93e3ff9433e1a1c1504","unresolved":false,"context_lines":[{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        This method stores BIOS properties to the bios_settings table in"},{"line_number":980,"context_line":"        _do_node_clean step and updates bios_settings table when"},{"line_number":981,"context_line":"        apply_configuration is called to set a new BIOS configuration."},{"line_number":982,"context_line":"        It will also update the timestamp of each bios setting."},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        :param task: a TaskManager instance."}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_344ef7c0","line":981,"range":{"start_line":981,"start_character":8,"end_line":981,"end_character":27},"updated":"2018-04-25 03:58:19.000000000","message":"s/ apply_configuration / apply_configuration() and factory_reset() /","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"09c4e90a745017f1315822161e499320e2e709b3","unresolved":false,"context_lines":[{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        This method stores BIOS properties to the bios_settings table in"},{"line_number":980,"context_line":"        _do_node_clean step and updates bios_settings table when"},{"line_number":981,"context_line":"        apply_configuration is called to set a new BIOS configuration."},{"line_number":982,"context_line":"        It will also update the timestamp of each bios setting."},{"line_number":983,"context_line":""},{"line_number":984,"context_line":"        :param task: a TaskManager instance."}],"source_content_type":"text/x-python","patch_set":44,"id":"9f6a8fd7_8f100e50","line":981,"range":{"start_line":981,"start_character":8,"end_line":981,"end_character":27},"in_reply_to":"9f6a8fd7_344ef7c0","updated":"2018-04-25 04:40:32.000000000","message":"Done","commit_id":"63207496d11b78a84815337618d5bce0afc2e5b1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"82b7cc3e2ddb12bfe2da0780b080abcc3788b2ff","unresolved":false,"context_lines":[{"line_number":927,"context_line":"class BIOSInterface(BaseInterface):"},{"line_number":928,"context_line":"    interface_type \u003d \u0027bios\u0027"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __init__(self):"},{"line_number":931,"context_line":"        pass"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"    @abc.abstractmethod"},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f6a8fd7_b7f8a849","line":931,"range":{"start_line":930,"start_character":4,"end_line":931,"end_character":12},"updated":"2018-04-26 11:01:53.000000000","message":"this is not really necessary","commit_id":"285acba11304b86deb620242ccf007419bb21f54"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"34a52011348a4b48b0a65eb16862758caaa116f3","unresolved":false,"context_lines":[{"line_number":927,"context_line":"class BIOSInterface(BaseInterface):"},{"line_number":928,"context_line":"    interface_type \u003d \u0027bios\u0027"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __init__(self):"},{"line_number":931,"context_line":"        pass"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"    @abc.abstractmethod"},{"line_number":934,"context_line":"    def apply_configuration(self, task, settings):"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f6a8fd7_5e79c590","line":931,"range":{"start_line":930,"start_character":4,"end_line":931,"end_character":12},"in_reply_to":"9f6a8fd7_b7f8a849","updated":"2018-05-02 09:41:35.000000000","message":"Done","commit_id":"285acba11304b86deb620242ccf007419bb21f54"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"82b7cc3e2ddb12bfe2da0780b080abcc3788b2ff","unresolved":false,"context_lines":[{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"},{"line_number":938,"context_line":"        apply BIOS settings on the given node. It may also validate the"},{"line_number":939,"context_line":"        given bios settings before applying any settings and manage"},{"line_number":940,"context_line":"        failures when setting an invalid BIOS config. In the case of"},{"line_number":941,"context_line":"        needing password to update the BIOS config, it will be taken from"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f6a8fd7_7798d01a","line":938,"range":{"start_line":938,"start_character":8,"end_line":938,"end_character":13},"updated":"2018-04-26 11:01:53.000000000","message":"applies","commit_id":"285acba11304b86deb620242ccf007419bb21f54"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"34a52011348a4b48b0a65eb16862758caaa116f3","unresolved":false,"context_lines":[{"line_number":935,"context_line":"        \"\"\"Validate \u0026 apply BIOS settings on the given node."},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        This method takes the BIOS settings from the settings param and"},{"line_number":938,"context_line":"        apply BIOS settings on the given node. It may also validate the"},{"line_number":939,"context_line":"        given bios settings before applying any settings and manage"},{"line_number":940,"context_line":"        failures when setting an invalid BIOS config. In the case of"},{"line_number":941,"context_line":"        needing password to update the BIOS config, it will be taken from"}],"source_content_type":"text/x-python","patch_set":47,"id":"9f6a8fd7_3e7651a6","line":938,"range":{"start_line":938,"start_character":8,"end_line":938,"end_character":13},"in_reply_to":"9f6a8fd7_7798d01a","updated":"2018-05-02 09:41:35.000000000","message":"Done","commit_id":"285acba11304b86deb620242ccf007419bb21f54"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"82b7cc3e2ddb12bfe2da0780b080abcc3788b2ff","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        given bios settings before applying any settings and manage"},{"line_number":940,"context_line":"        failures when setting an invalid BIOS config. In the case of"},{"line_number":941,"context_line":"        needing password to update the BIOS config, it will be taken from"},{"line_number":942,"context_line":"        the driver_info properties. After the BIOS configuration is done,"},{"line_number":943,"context_line":"        the implementation of this method should call"},{"line_number":944,"context_line":"        self.cache_bios_settings() to update the node\u0027s BIOS setting table"},{"line_number":945,"context_line":"        with the BIOS configuration applied on the node."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        :param task: a TaskManager instance."},{"line_number":948,"context_line":"        :param settings: Dictonary containing the BIOS configuration."}],"source_content_type":"text/x-python","patch_set":47,"id":"9f6a8fd7_da3ea1b8","line":945,"range":{"start_line":942,"start_character":36,"end_line":945,"end_character":56},"updated":"2018-04-26 11:01:53.000000000","message":"this can be avoided by introducing a __new__ method that will wrap the apply_configuration into a decorator doing cache_bios_settings() call after apply_configuration has finished. same can be done for factory_reset","commit_id":"285acba11304b86deb620242ccf007419bb21f54"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"34a52011348a4b48b0a65eb16862758caaa116f3","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        given bios settings before applying any settings and manage"},{"line_number":940,"context_line":"        failures when setting an invalid BIOS config. In the case of"},{"line_number":941,"context_line":"        needing password to update the BIOS config, it will be taken from"},{"line_number":942,"context_line":"        the driver_info properties. After the BIOS configuration is done,"},{"line_number":943,"context_line":"        the implementation of this method should call"},{"line_number":944,"context_line":"        self.cache_bios_settings() to update the node\u0027s BIOS setting table"},{"line_number":945,"context_line":"        with the BIOS configuration applied on the node."},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"        :param task: a TaskManager instance."},{"line_number":948,"context_line":"        :param settings: Dictonary containing the BIOS configuration."}],"source_content_type":"text/x-python","patch_set":47,"id":"9f6a8fd7_d5cff07c","line":945,"range":{"start_line":942,"start_character":36,"end_line":945,"end_character":56},"in_reply_to":"9f6a8fd7_da3ea1b8","updated":"2018-05-02 09:41:35.000000000","message":"will do","commit_id":"285acba11304b86deb620242ccf007419bb21f54"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"00b2e46893f7c3a2254e23fe7ffd11a55152badc","unresolved":false,"context_lines":[{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":931,"context_line":"        super_new \u003d super(BIOSInterface, cls).__new__"},{"line_number":932,"context_line":"        if super_new is object.__new__:"},{"line_number":933,"context_line":"            instance \u003d super_new(cls)"},{"line_number":934,"context_line":"        else:"},{"line_number":935,"context_line":"            instance \u003d super_new(cls, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_8fa549b8","line":932,"updated":"2018-05-03 08:01:40.000000000","message":"Don\u0027t we know that this won\u0027t be the case, since the base class is BaseInterface?","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1c18e5da11c712745bfe780095c6f5b2d15fa674","unresolved":false,"context_lines":[{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":931,"context_line":"        super_new \u003d super(BIOSInterface, cls).__new__"},{"line_number":932,"context_line":"        if super_new is object.__new__:"},{"line_number":933,"context_line":"            instance \u003d super_new(cls)"},{"line_number":934,"context_line":"        else:"},{"line_number":935,"context_line":"            instance \u003d super_new(cls, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_92832d57","line":932,"in_reply_to":"5f7c97a3_8fa549b8","updated":"2018-05-08 15:28:01.000000000","message":"+1, I don\u0027t understand why we\u0027re doing this here, so if there is a valid reason we should explain it in-line.","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"92e7edb866ad37a757de8c3affa96117c477c850","unresolved":false,"context_lines":[{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":931,"context_line":"        super_new \u003d super(BIOSInterface, cls).__new__"},{"line_number":932,"context_line":"        if super_new is object.__new__:"},{"line_number":933,"context_line":"            instance \u003d super_new(cls)"},{"line_number":934,"context_line":"        else:"},{"line_number":935,"context_line":"            instance \u003d super_new(cls, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_972f9ff5","line":932,"in_reply_to":"5f7c97a3_8fa549b8","updated":"2018-05-04 06:18:23.000000000","message":"removing the if condition check.","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"00b2e46893f7c3a2254e23fe7ffd11a55152badc","unresolved":false,"context_lines":[{"line_number":938,"context_line":"            @six.wraps(func)"},{"line_number":939,"context_line":"            def wrapped(*args, **kwargs):"},{"line_number":940,"context_line":"                func(*args, **kwargs)"},{"line_number":941,"context_line":"                instance.cache_bios_settings(*args, **kwargs)"},{"line_number":942,"context_line":"            return wrapped"},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"        for n, method in inspect.getmembers(instance, inspect.ismethod):"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_afc84574","line":941,"updated":"2018-05-03 08:01:40.000000000","message":"cache_bios_settings doesn\u0027t take the same args as apply_configuration.","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"92e7edb866ad37a757de8c3affa96117c477c850","unresolved":false,"context_lines":[{"line_number":938,"context_line":"            @six.wraps(func)"},{"line_number":939,"context_line":"            def wrapped(*args, **kwargs):"},{"line_number":940,"context_line":"                func(*args, **kwargs)"},{"line_number":941,"context_line":"                instance.cache_bios_settings(*args, **kwargs)"},{"line_number":942,"context_line":"            return wrapped"},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"        for n, method in inspect.getmembers(instance, inspect.ismethod):"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_cc949ceb","line":941,"in_reply_to":"5f7c97a3_afc84574","updated":"2018-05-04 06:18:23.000000000","message":"Done","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"00b2e46893f7c3a2254e23fe7ffd11a55152badc","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        needing password to update the BIOS config, it will be taken from"},{"line_number":958,"context_line":"        the driver_info properties. After the BIOS configuration is done,"},{"line_number":959,"context_line":"        the implementation of this method should update the node\u0027s BIOS"},{"line_number":960,"context_line":"        setting table with the BIOS configuration applied on the node."},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        :param task: a TaskManager instance."},{"line_number":963,"context_line":"        :param settings: Dictonary containing the BIOS configuration."}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_8f8ea92c","line":960,"updated":"2018-05-03 08:01:40.000000000","message":"Doesn\u0027t cache_bios_settings do the DB update?","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"92e7edb866ad37a757de8c3affa96117c477c850","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        needing password to update the BIOS config, it will be taken from"},{"line_number":958,"context_line":"        the driver_info properties. After the BIOS configuration is done,"},{"line_number":959,"context_line":"        the implementation of this method should update the node\u0027s BIOS"},{"line_number":960,"context_line":"        setting table with the BIOS configuration applied on the node."},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        :param task: a TaskManager instance."},{"line_number":963,"context_line":"        :param settings: Dictonary containing the BIOS configuration."}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_b7d97b23","line":960,"in_reply_to":"5f7c97a3_8f8ea92c","updated":"2018-05-04 06:18:23.000000000","message":"yep, change this to :\n\nAfter the BIOS configuration is done, cache_bios_settings will be called to update the node\u0027s BIOS setting table with the BIOS configuration applied on the node.","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"00b2e46893f7c3a2254e23fe7ffd11a55152badc","unresolved":false,"context_lines":[{"line_number":977,"context_line":"        This method resets BIOS configuration to factory default on the"},{"line_number":978,"context_line":"        given node. After the BIOS reset action is done, the implementation"},{"line_number":979,"context_line":"        of this method should update the node\u0027s BIOS settings table with"},{"line_number":980,"context_line":"        default bios settings."},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"        :param task: a TaskManager instance."},{"line_number":983,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_2f83d506","line":980,"updated":"2018-05-03 08:01:40.000000000","message":"As above","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"92e7edb866ad37a757de8c3affa96117c477c850","unresolved":false,"context_lines":[{"line_number":977,"context_line":"        This method resets BIOS configuration to factory default on the"},{"line_number":978,"context_line":"        given node. After the BIOS reset action is done, the implementation"},{"line_number":979,"context_line":"        of this method should update the node\u0027s BIOS settings table with"},{"line_number":980,"context_line":"        default bios settings."},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"        :param task: a TaskManager instance."},{"line_number":983,"context_line":"        :raises: UnsupportedDriverExtension, if the node\u0027s driver doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_17f62f91","line":980,"in_reply_to":"5f7c97a3_2f83d506","updated":"2018-05-04 06:18:23.000000000","message":"Done","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f2030725a43dc6a536a51d6a58874ed906cc4ddb","unresolved":false,"context_lines":[{"line_number":927,"context_line":"class BIOSInterface(BaseInterface):"},{"line_number":928,"context_line":"    interface_type \u003d \u0027bios\u0027"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":931,"context_line":"        super_new \u003d super(BIOSInterface, cls).__new__"},{"line_number":932,"context_line":"        instance \u003d super_new(cls, *args, **kwargs)"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_20e3d135","line":930,"updated":"2018-05-04 09:18:05.000000000","message":"I think this method deserves a comment.","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"a1f2930b7752dd03071c1b48f15cd9e1b58a118d","unresolved":false,"context_lines":[{"line_number":927,"context_line":"class BIOSInterface(BaseInterface):"},{"line_number":928,"context_line":"    interface_type \u003d \u0027bios\u0027"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def __new__(cls, *args, **kwargs):"},{"line_number":931,"context_line":"        super_new \u003d super(BIOSInterface, cls).__new__"},{"line_number":932,"context_line":"        instance \u003d super_new(cls, *args, **kwargs)"},{"line_number":933,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_8a598d5b","line":930,"in_reply_to":"5f7c97a3_20e3d135","updated":"2018-05-07 05:40:17.000000000","message":"Done","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f2030725a43dc6a536a51d6a58874ed906cc4ddb","unresolved":false,"context_lines":[{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        def wrapper(func):"},{"line_number":935,"context_line":"            @six.wraps(func)"},{"line_number":936,"context_line":"            def wrapped(*args, **kwargs):"},{"line_number":937,"context_line":"                func(*args, **kwargs)"},{"line_number":938,"context_line":"                instance.cache_bios_settings(args[1], **kwargs)"},{"line_number":939,"context_line":"            return wrapped"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_e03b9999","line":936,"updated":"2018-05-04 09:18:05.000000000","message":"Let\u0027s use the proper names for these arguments, then a caller could use keyword arguments to call the methods.\n\ndef wrapped(self, task, *args, **kwargs):","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"38eb1d3e989feffd9ebaebc6e65d2cd91bbcadf0","unresolved":false,"context_lines":[{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        def wrapper(func):"},{"line_number":935,"context_line":"            @six.wraps(func)"},{"line_number":936,"context_line":"            def wrapped(*args, **kwargs):"},{"line_number":937,"context_line":"                func(*args, **kwargs)"},{"line_number":938,"context_line":"                instance.cache_bios_settings(args[1], **kwargs)"},{"line_number":939,"context_line":"            return wrapped"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_f0d57944","line":936,"in_reply_to":"5f7c97a3_cab1c591","updated":"2018-05-08 09:16:50.000000000","message":"I think, self \u003d\u003d instance. Therefore we should use:\n\nfunc(self, task, *args, **kwargs)\ninstance.cache_bios_settings(task)\n\nDoes that make sense?","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"a1f2930b7752dd03071c1b48f15cd9e1b58a118d","unresolved":false,"context_lines":[{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        def wrapper(func):"},{"line_number":935,"context_line":"            @six.wraps(func)"},{"line_number":936,"context_line":"            def wrapped(*args, **kwargs):"},{"line_number":937,"context_line":"                func(*args, **kwargs)"},{"line_number":938,"context_line":"                instance.cache_bios_settings(args[1], **kwargs)"},{"line_number":939,"context_line":"            return wrapped"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_cab1c591","line":936,"in_reply_to":"5f7c97a3_e03b9999","updated":"2018-05-07 05:40:17.000000000","message":"Thanks Mark!\ncould you please also suggest what\u0027s the parameter for *func and *instance.cache_bios_settings inside wrapper? I didn\u0027t figure out myself which parameter should they take.","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"72b87a748c852baedaff87c4fb3c80dbf995a474","unresolved":false,"context_lines":[{"line_number":933,"context_line":""},{"line_number":934,"context_line":"        def wrapper(func):"},{"line_number":935,"context_line":"            @six.wraps(func)"},{"line_number":936,"context_line":"            def wrapped(*args, **kwargs):"},{"line_number":937,"context_line":"                func(*args, **kwargs)"},{"line_number":938,"context_line":"                instance.cache_bios_settings(args[1], **kwargs)"},{"line_number":939,"context_line":"            return wrapped"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_3414404e","line":936,"in_reply_to":"5f7c97a3_f0d57944","updated":"2018-05-08 14:12:31.000000000","message":"adding self in func(self, task, *args, **kwargs) doesn\u0027t work as the unit tests[1] complain arguments mismatch error:\n\n\"\"\"\nironic.tests.unit.drivers.test_base.TestBIOSInterface.test_factory_reset_wrapper\n--------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"/home/zshi/git/openstack/ironic/ironic-bios/ironic/.tox/py27/lib/python2.7/site-packages/mock/mock.py\", line 1305, in patched\n        return func(*args, **keywargs)\n      File \"ironic/tests/unit/drivers/test_base.py\", line 458, in test_factory_reset_wrapper\n        bios.factory_reset(bios, task_mock)\n      File \"ironic/drivers/base.py\", line 941, in wrapped\n        func(self, task, *args, **kwargs)\n    TypeError: factory_reset() takes exactly 2 arguments (3 given)\n\"\"\"\n\nif removing the first arg in unit tests to \"bios.factory_reset(task_mock)\", then it will complain that:\n\n\"\"\"\nironic.tests.unit.drivers.test_base.TestBIOSInterface.test_factory_reset_wrapper\n--------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"/home/zshi/git/openstack/ironic/ironic-bios/ironic/.tox/py27/lib/python2.7/site-packages/mock/mock.py\", line 1305, in patched\n        return func(*args, **keywargs)\n      File \"ironic/tests/unit/drivers/test_base.py\", line 458, in test_factory_reset_wrapper\n        bios.factory_reset(task_mock)\n    TypeError: wrapped() takes at least 2 arguments (1 given)\n\"\"\"\n\n[1]: https://review.openstack.org/#/c/507793/50/ironic/tests/unit/drivers/test_base.py@458","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f2030725a43dc6a536a51d6a58874ed906cc4ddb","unresolved":false,"context_lines":[{"line_number":943,"context_line":"                instance.apply_configuration \u003d wrapper(method)"},{"line_number":944,"context_line":"            elif n \u003d\u003d \"factory_reset\":"},{"line_number":945,"context_line":"                instance.factory_reset \u003d wrapper(method)"},{"line_number":946,"context_line":"        return instance"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    @abc.abstractmethod"},{"line_number":949,"context_line":"    def apply_configuration(self, task, settings):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_208e7178","line":946,"updated":"2018-05-04 09:18:05.000000000","message":"I don\u0027t see this code being tested anywhere. Would be good to see a test that verifies cache_bios_settings is called with appropriate arguments.","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"9ab7f4d3d7d22c839ee5b090a2705139aa0bfbaf","unresolved":false,"context_lines":[{"line_number":943,"context_line":"                instance.apply_configuration \u003d wrapper(method)"},{"line_number":944,"context_line":"            elif n \u003d\u003d \"factory_reset\":"},{"line_number":945,"context_line":"                instance.factory_reset \u003d wrapper(method)"},{"line_number":946,"context_line":"        return instance"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    @abc.abstractmethod"},{"line_number":949,"context_line":"    def apply_configuration(self, task, settings):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_692e76a6","line":946,"in_reply_to":"5f7c97a3_208e7178","updated":"2018-05-08 07:21:28.000000000","message":"Done","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"8c5761c0d88b7a801fb84e9e066350b3a64f139b","unresolved":false,"context_lines":[{"line_number":947,"context_line":"                instance.apply_configuration \u003d wrapper(method)"},{"line_number":948,"context_line":"            elif n \u003d\u003d \"factory_reset\":"},{"line_number":949,"context_line":"                instance.factory_reset \u003d wrapper(method)"},{"line_number":950,"context_line":"        return instance"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    @abc.abstractmethod"},{"line_number":953,"context_line":"    def apply_configuration(self, task, settings):"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_51d517e4","line":950,"updated":"2018-05-10 13:30:51.000000000","message":"Might be worth adding a note as to why we\u0027re decorating the methods in __new__, I assume its because we need to dynamically decorate the sub-class implementations of the functions?","commit_id":"1e24ef9dde30602c02e834c4723a259823f027ec"}],"ironic/drivers/fake.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d495b508680285f9775e35d5c56178a7e8d9c1b8","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.management \u003d fake.FakeManagement()"},{"line_number":69,"context_line":"        self.inspect \u003d fake.FakeInspect()"},{"line_number":70,"context_line":"        self.raid \u003d fake.FakeRAID()"},{"line_number":71,"context_line":"        self.bios \u003d fake.FakeBIOS()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def to_hardware_type(cls):"}],"source_content_type":"text/x-python","patch_set":22,"id":"df7087c5_aed2bdcf","line":71,"updated":"2018-03-15 12:54:22.000000000","message":"please leave this empty, we don\u0027t update classic drivers any more","commit_id":"9467899fd7f60e3f883fb86e79fa5714e21d8d31"}],"ironic/drivers/fake_hardware.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d495b508680285f9775e35d5c56178a7e8d9c1b8","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        return [flat.FlatNetwork, noop.NoopNetwork]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @property"},{"line_number":94,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":95,"context_line":"        \"\"\"List of classes of supported bios interfaces.\"\"\""},{"line_number":96,"context_line":"        return [fake.FakeBIOS]"}],"source_content_type":"text/x-python","patch_set":22,"id":"df7087c5_eecc3536","line":94,"updated":"2018-03-15 12:54:22.000000000","message":"nit: the methods here are mostly sorted (except for network), could you please move this one before boot?","commit_id":"9467899fd7f60e3f883fb86e79fa5714e21d8d31"}],"ironic/drivers/generic.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d495b508680285f9775e35d5c56178a7e8d9c1b8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        return [noop_storage.NoopStorage, cinder.CinderStorage]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @property"},{"line_number":84,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":85,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":86,"context_line":"        return [noop.NoBIOS]"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df7087c5_8ecfb927","line":84,"updated":"2018-03-15 12:54:22.000000000","message":"this method is not needed, as it copies the parent one","commit_id":"9467899fd7f60e3f883fb86e79fa5714e21d8d31"}],"ironic/drivers/hardware_type.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d495b508680285f9775e35d5c56178a7e8d9c1b8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return [noop.NoVendor]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @property"},{"line_number":102,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":103,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":104,"context_line":"        return [noop.NoBIOS]"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df7087c5_cec93126","line":102,"updated":"2018-03-15 12:54:22.000000000","message":"ditto re sorting","commit_id":"9467899fd7f60e3f883fb86e79fa5714e21d8d31"}],"ironic/drivers/modules/fake.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def validate(self, task):"},{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_25027970","line":248,"updated":"2018-04-23 08:27:35.000000000","message":"Needs task.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def validate(self, task):"},{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_7553283a","line":248,"in_reply_to":"9f6a8fd7_25027970","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"},{"line_number":252,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_b2ee4d86","line":249,"updated":"2018-04-17 08:46:17.000000000","message":"Do we need to override this?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"},{"line_number":252,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_9527dcca","line":249,"in_reply_to":"9f6a8fd7_25b4b9d0","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"},{"line_number":252,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_ded635c4","line":249,"in_reply_to":"9f6a8fd7_b2ee4d86","updated":"2018-04-19 03:42:19.000000000","message":"you mean override it by calling do_apply_configuration?\nDone","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"},{"line_number":252,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_25b4b9d0","line":249,"in_reply_to":"9f6a8fd7_ded635c4","updated":"2018-04-23 08:27:35.000000000","message":"We don\u0027t need to call do_apply_configuration - that is exactly what the parent class does. We can just leave this method unimplemented in this class.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"},{"line_number":252,"context_line":"        pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def factory_reset(self, task):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_c5fa9d73","line":251,"updated":"2018-04-23 08:27:35.000000000","message":"Needs task.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def apply_configuration(self, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def do_apply_configuration(self, settings):"},{"line_number":252,"context_line":"        pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def factory_reset(self, task):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_75280896","line":251,"in_reply_to":"9f6a8fd7_c5fa9d73","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def do_factory_reset(self, task):"},{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_52033143","line":258,"updated":"2018-04-17 08:46:17.000000000","message":"Do we need to override this?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def do_factory_reset(self, task):"},{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_9ee0bd98","line":258,"in_reply_to":"9f6a8fd7_52033143","updated":"2018-04-19 03:42:19.000000000","message":"call do_factory_reset in factory_reset.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def do_factory_reset(self, task):"},{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_e5c9e158","line":258,"in_reply_to":"9f6a8fd7_9ee0bd98","updated":"2018-04-23 08:27:35.000000000","message":"Ditto.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def do_factory_reset(self, task):"},{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_b52220b8","line":258,"in_reply_to":"9f6a8fd7_e5c9e158","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"class FakeStorage(base.StorageInterface):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_b2716de3","line":261,"updated":"2018-04-17 08:46:17.000000000","message":"We discussed making the fake interface save any configuration applied to better support tempest testing of the feature. Any thoughts on that?","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"03ce75e74dafcb9c191a911e2d55b0da98029b45","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"class FakeStorage(base.StorageInterface):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_e5cec158","line":261,"in_reply_to":"9f6a8fd7_21bab6dd","updated":"2018-04-23 08:27:35.000000000","message":"I think this approach would only work if we pass in a list of settings to this method. Then you could just do this:\n\n    def do_apply_configuration(self, task, settings):\n        self.cache_bios_settings(task, settings)\n\nLet\u0027s see what we decide for cache_bios_settings.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        pass"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":261,"context_line":"        pass"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"class FakeStorage(base.StorageInterface):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_21bab6dd","line":261,"in_reply_to":"9f6a8fd7_b2716de3","updated":"2018-04-19 03:42:19.000000000","message":"Thanks for reminding, Mark!\nI don\u0027t have too much knowledge about how to write ironic tempest tests, can we just use fake settings to test bios GET setting API? the fake setting may not be provided here in fake driver, but as a list of setting in the tempest itself. for example: the raid config is set by calling set_node_raid_config where it provides the necessary target_raid_config.\n\nhttps://github.com/openstack/ironic-tempest-plugin/blob/master/ironic_tempest_plugin/tests/api/admin/test_nodestates.py#L191","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2ada4dca261004b54837e201f829aa6f91182f12","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def validate(self, task):"},{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def factory_reset(self, task):"}],"source_content_type":"text/x-python","patch_set":46,"id":"9f6a8fd7_abfb66bb","line":248,"updated":"2018-04-26 09:28:07.000000000","message":"To support the tempest pass-through use case, this method could simply create or update all settings (additively) that are passed in.","commit_id":"cf81f3f628137a75f83e3fcb792cea0e56977ae4"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"d1abd22dbf6ad6256b8d5859c38f7e7f8b641f24","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def validate(self, task):"},{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def factory_reset(self, task):"}],"source_content_type":"text/x-python","patch_set":46,"id":"9f6a8fd7_f5f47489","line":248,"in_reply_to":"9f6a8fd7_75bf04d0","updated":"2018-05-02 09:53:33.000000000","message":"Why not exercise the DB code too? Create and update settings in the DB to match those that are passed in. factory_reset would delete all settings.","commit_id":"cf81f3f628137a75f83e3fcb792cea0e56977ae4"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"34a52011348a4b48b0a65eb16862758caaa116f3","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def validate(self, task):"},{"line_number":246,"context_line":"        pass"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def factory_reset(self, task):"}],"source_content_type":"text/x-python","patch_set":46,"id":"9f6a8fd7_75bf04d0","line":248,"in_reply_to":"9f6a8fd7_abfb66bb","updated":"2018-05-02 09:41:35.000000000","message":"shall I just create/update a local self.dict to hold the given settings and remove the dict when fake factory_reset is called?","commit_id":"cf81f3f628137a75f83e3fcb792cea0e56977ae4"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2ada4dca261004b54837e201f829aa6f91182f12","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":249,"context_line":"        pass"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def factory_reset(self, task):"},{"line_number":252,"context_line":"        pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def cache_bios_settings(self, task):"}],"source_content_type":"text/x-python","patch_set":46,"id":"9f6a8fd7_6b330eac","line":251,"updated":"2018-04-26 09:28:07.000000000","message":"In the tempest pass-through use case, this would delete all settings from the DB.","commit_id":"cf81f3f628137a75f83e3fcb792cea0e56977ae4"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2ada4dca261004b54837e201f829aa6f91182f12","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    def factory_reset(self, task):"},{"line_number":252,"context_line":"        pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":255,"context_line":"        pass"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"9f6a8fd7_0b261269","line":254,"updated":"2018-04-26 09:28:07.000000000","message":"In the tempest pass-through use case, this would remain a no-op.","commit_id":"cf81f3f628137a75f83e3fcb792cea0e56977ae4"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"00b2e46893f7c3a2254e23fe7ffd11a55152badc","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def validate(self, task):"},{"line_number":247,"context_line":"        pass"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":250,"context_line":"        node_id \u003d task.node.id"},{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            objects.BIOSSettingList.create(None, node_id, settings)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_efcabd4d","line":249,"updated":"2018-05-03 08:01:40.000000000","message":"Thanks for updating - this looks like what I had in mind.","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"00b2e46893f7c3a2254e23fe7ffd11a55152badc","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":250,"context_line":"        node_id \u003d task.node.id"},{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            objects.BIOSSettingList.create(None, node_id, settings)"},{"line_number":253,"context_line":"        except exception.BIOSSettingAlreadyExists:"},{"line_number":254,"context_line":"            objects.BIOSSettingList.save(None, node_id, settings)"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_4f9df157","line":252,"updated":"2018-05-03 08:01:40.000000000","message":"s/None/task.context/","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"92e7edb866ad37a757de8c3affa96117c477c850","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def apply_configuration(self, task, settings):"},{"line_number":250,"context_line":"        node_id \u003d task.node.id"},{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            objects.BIOSSettingList.create(None, node_id, settings)"},{"line_number":253,"context_line":"        except exception.BIOSSettingAlreadyExists:"},{"line_number":254,"context_line":"            objects.BIOSSettingList.save(None, node_id, settings)"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_179f0f51","line":252,"in_reply_to":"5f7c97a3_4f9df157","updated":"2018-05-04 06:18:23.000000000","message":"Done","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"}],"ironic/drivers/modules/noop.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f2030725a43dc6a536a51d6a58874ed906cc4ddb","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        _fail(self, task)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":83,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_6070e973","line":83,"updated":"2018-05-04 09:18:05.000000000","message":"Can we add a test for this driver in ironic.tests.unit.drivers.modules.test_noop?","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"a1f2930b7752dd03071c1b48f15cd9e1b58a118d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        _fail(self, task)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def cache_bios_settings(self, task):"},{"line_number":83,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":49,"id":"5f7c97a3_2d1413f5","line":83,"in_reply_to":"5f7c97a3_6070e973","updated":"2018-05-07 05:40:17.000000000","message":"Done","commit_id":"7ed95124ea29a2d01ac05e6666ebe5a9cc187f7b"}],"ironic/objects/node.py":[{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"80038cf44f680ec98e662718e6c28e6881772bc9","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \u0027storage_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":133,"context_line":"        \u0027vendor_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":134,"context_line":"        \u0027traits\u0027: object_fields.ObjectField(\u0027TraitList\u0027, nullable\u003dTrue),"},{"line_number":135,"context_line":"        \u0027bios_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":136,"context_line":"    }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def as_dict(self, secure\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_78486a86","line":135,"range":{"start_line":135,"start_character":7,"end_line":135,"end_character":66},"updated":"2018-03-21 08:18:18.000000000","message":"This should be in human alphabetical order","commit_id":"ebcf197831c738db2f0ea319815667ddc6a2f7d7"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \u0027rescue_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":133,"context_line":"        \u0027storage_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":134,"context_line":"        \u0027vendor_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":135,"context_line":"        \u0027traits\u0027: object_fields.ObjectField(\u0027TraitList\u0027, nullable\u003dTrue)"},{"line_number":136,"context_line":"    }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def as_dict(self, secure\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_b98eb776","line":135,"updated":"2018-03-30 06:44:59.000000000","message":"This change is unnecessary.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"bcfe0537a4c65196a6b0057634b4670729bd5775","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \u0027rescue_interface\u0027: (\u0027node\u0027, \u0027rescue_interface\u0027),"},{"line_number":567,"context_line":"        \u0027storage_interface\u0027: (\u0027node\u0027, \u0027storage_interface\u0027),"},{"line_number":568,"context_line":"        \u0027vendor_interface\u0027: (\u0027node\u0027, \u0027vendor_interface\u0027),"},{"line_number":569,"context_line":"        \u0027bios_interface\u0027: (\u0027node\u0027, \u0027bios_interface\u0027),"},{"line_number":570,"context_line":"        \u0027power_state\u0027: (\u0027node\u0027, \u0027power_state\u0027),"},{"line_number":571,"context_line":"        \u0027properties\u0027: (\u0027node\u0027, \u0027properties\u0027),"},{"line_number":572,"context_line":"        \u0027provision_state\u0027: (\u0027node\u0027, \u0027provision_state\u0027),"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_397b877b","line":569,"updated":"2018-03-30 06:44:59.000000000","message":"I wonder if we should expose bios_interface to notifications at the same time with the API or later.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"c5935445fbd52e3600d40c47ccc192779a1593d6","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \u0027rescue_interface\u0027: (\u0027node\u0027, \u0027rescue_interface\u0027),"},{"line_number":567,"context_line":"        \u0027storage_interface\u0027: (\u0027node\u0027, \u0027storage_interface\u0027),"},{"line_number":568,"context_line":"        \u0027vendor_interface\u0027: (\u0027node\u0027, \u0027vendor_interface\u0027),"},{"line_number":569,"context_line":"        \u0027bios_interface\u0027: (\u0027node\u0027, \u0027bios_interface\u0027),"},{"line_number":570,"context_line":"        \u0027power_state\u0027: (\u0027node\u0027, \u0027power_state\u0027),"},{"line_number":571,"context_line":"        \u0027properties\u0027: (\u0027node\u0027, \u0027properties\u0027),"},{"line_number":572,"context_line":"        \u0027provision_state\u0027: (\u0027node\u0027, \u0027provision_state\u0027),"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_ae150ce7","line":569,"in_reply_to":"bf659307_397b877b","updated":"2018-03-30 07:10:01.000000000","message":"Yes, we need to expose notification after API patch is merged.","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"4520496f615da3fb1fba474026cd5013c8db026e","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \u0027rescue_interface\u0027: (\u0027node\u0027, \u0027rescue_interface\u0027),"},{"line_number":567,"context_line":"        \u0027storage_interface\u0027: (\u0027node\u0027, \u0027storage_interface\u0027),"},{"line_number":568,"context_line":"        \u0027vendor_interface\u0027: (\u0027node\u0027, \u0027vendor_interface\u0027),"},{"line_number":569,"context_line":"        \u0027bios_interface\u0027: (\u0027node\u0027, \u0027bios_interface\u0027),"},{"line_number":570,"context_line":"        \u0027power_state\u0027: (\u0027node\u0027, \u0027power_state\u0027),"},{"line_number":571,"context_line":"        \u0027properties\u0027: (\u0027node\u0027, \u0027properties\u0027),"},{"line_number":572,"context_line":"        \u0027provision_state\u0027: (\u0027node\u0027, \u0027provision_state\u0027),"}],"source_content_type":"text/x-python","patch_set":31,"id":"bf659307_96e924e7","line":569,"in_reply_to":"bf659307_ae150ce7","updated":"2018-04-02 03:42:57.000000000","message":"Done","commit_id":"9a29a9719537e9a6db52844a4d6775eca3d4e850"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \u0027rescue_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":133,"context_line":"        \u0027storage_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":134,"context_line":"        \u0027vendor_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":135,"context_line":"        \u0027traits\u0027: object_fields.ObjectField(\u0027TraitList\u0027, nullable\u003dTrue)"},{"line_number":136,"context_line":"    }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def as_dict(self, secure\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_720af526","line":135,"updated":"2018-04-17 08:46:17.000000000","message":"nit: no need to remove this or other trailing commas.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        \u0027rescue_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":133,"context_line":"        \u0027storage_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":134,"context_line":"        \u0027vendor_interface\u0027: object_fields.StringField(nullable\u003dTrue),"},{"line_number":135,"context_line":"        \u0027traits\u0027: object_fields.ObjectField(\u0027TraitList\u0027, nullable\u003dTrue)"},{"line_number":136,"context_line":"    }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def as_dict(self, secure\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_31b216e8","line":135,"in_reply_to":"9f6a8fd7_720af526","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":528,"context_line":"                delattr(self, \u0027bios_interface\u0027)"},{"line_number":529,"context_line":"            elif self.bios_interface is not None:"},{"line_number":530,"context_line":"                # DB: set unavailable field to the default of None."},{"line_number":531,"context_line":"                self.bios_interface \u003d None"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"@base.IronicObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_15e60346","line":531,"updated":"2018-04-17 08:46:17.000000000","message":"Needs testing in TestConvertToVersion.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":528,"context_line":"                delattr(self, \u0027bios_interface\u0027)"},{"line_number":529,"context_line":"            elif self.bios_interface is not None:"},{"line_number":530,"context_line":"                # DB: set unavailable field to the default of None."},{"line_number":531,"context_line":"                self.bios_interface \u003d None"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"@base.IronicObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_7bacdb33","line":531,"in_reply_to":"9f6a8fd7_15e60346","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \u0027rescue_interface\u0027: (\u0027node\u0027, \u0027rescue_interface\u0027),"},{"line_number":567,"context_line":"        \u0027storage_interface\u0027: (\u0027node\u0027, \u0027storage_interface\u0027),"},{"line_number":568,"context_line":"        \u0027vendor_interface\u0027: (\u0027node\u0027, \u0027vendor_interface\u0027),"},{"line_number":569,"context_line":"        \u0027bios_interface\u0027: (\u0027node\u0027, \u0027bios_interface\u0027),"},{"line_number":570,"context_line":"        \u0027power_state\u0027: (\u0027node\u0027, \u0027power_state\u0027),"},{"line_number":571,"context_line":"        \u0027properties\u0027: (\u0027node\u0027, \u0027properties\u0027),"},{"line_number":572,"context_line":"        \u0027provision_state\u0027: (\u0027node\u0027, \u0027provision_state\u0027),"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_75941f8c","line":569,"updated":"2018-04-17 08:46:17.000000000","message":"Add to TestNodePayloads","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        \u0027rescue_interface\u0027: (\u0027node\u0027, \u0027rescue_interface\u0027),"},{"line_number":567,"context_line":"        \u0027storage_interface\u0027: (\u0027node\u0027, \u0027storage_interface\u0027),"},{"line_number":568,"context_line":"        \u0027vendor_interface\u0027: (\u0027node\u0027, \u0027vendor_interface\u0027),"},{"line_number":569,"context_line":"        \u0027bios_interface\u0027: (\u0027node\u0027, \u0027bios_interface\u0027),"},{"line_number":570,"context_line":"        \u0027power_state\u0027: (\u0027node\u0027, \u0027power_state\u0027),"},{"line_number":571,"context_line":"        \u0027properties\u0027: (\u0027node\u0027, \u0027properties\u0027),"},{"line_number":572,"context_line":"        \u0027provision_state\u0027: (\u0027node\u0027, \u0027provision_state\u0027),"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_71c72e14","line":569,"in_reply_to":"9f6a8fd7_75941f8c","updated":"2018-04-19 03:42:19.000000000","message":"remove it for current patch, will add it later with REST API.","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"ca77e68de5f630cbdd3d0d95c744163bd14477cf","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            elif self.bios_interface is not None:"},{"line_number":530,"context_line":"                # DB: set unavailable field to the default of None."},{"line_number":531,"context_line":"                self.bios_interface \u003d None"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"@base.IronicObjectRegistry.register"},{"line_number":535,"context_line":"class NodePayload(notification.NotificationPayloadBase):"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_c595bd41","line":532,"updated":"2018-04-23 08:33:40.000000000","message":"We need to add bios_interface to notifications after the API is exposed. If this is not prepared in the chain yet, a comment like this[1] might be helpful.\n\n[1] https://review.openstack.org/#/c/509335/29/ironic/objects/node.py@502","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"f640288c05ed548292ad640163d7ed7d100675cb","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            elif self.bios_interface is not None:"},{"line_number":530,"context_line":"                # DB: set unavailable field to the default of None."},{"line_number":531,"context_line":"                self.bios_interface \u003d None"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"@base.IronicObjectRegistry.register"},{"line_number":535,"context_line":"class NodePayload(notification.NotificationPayloadBase):"}],"source_content_type":"text/x-python","patch_set":41,"id":"9f6a8fd7_b839b5d7","line":532,"in_reply_to":"9f6a8fd7_c595bd41","updated":"2018-04-24 03:42:32.000000000","message":"Done","commit_id":"c26ecc0a3e8c25732d544bf602903ec4d42cc5fc"}],"ironic/tests/unit/api/controllers/v1/test_driver.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"a4d92622c461f834159820349f417031360aeca9","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if use_dynamic:"},{"line_number":217,"context_line":"            for iface in driver_base.ALL_INTERFACES:"},{"line_number":218,"context_line":"                if iface not in \u0027bios\u0027:"},{"line_number":219,"context_line":"                    if latest_if or iface not in [\u0027rescue\u0027, \u0027storage\u0027]:"},{"line_number":220,"context_line":"                        self.assertIn(\u0027default_%s_interface\u0027 % iface, data)"},{"line_number":221,"context_line":"                        self.assertIn(\u0027enabled_%s_interfaces\u0027 % iface, data)"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_151cc368","line":218,"updated":"2018-04-17 08:46:17.000000000","message":"iface !\u003d \u0027bios\u0027","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"b2067eafb7853866cdd5a8b4c479922b0bf08fe0","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if use_dynamic:"},{"line_number":217,"context_line":"            for iface in driver_base.ALL_INTERFACES:"},{"line_number":218,"context_line":"                if iface not in \u0027bios\u0027:"},{"line_number":219,"context_line":"                    if latest_if or iface not in [\u0027rescue\u0027, \u0027storage\u0027]:"},{"line_number":220,"context_line":"                        self.assertIn(\u0027default_%s_interface\u0027 % iface, data)"},{"line_number":221,"context_line":"                        self.assertIn(\u0027enabled_%s_interfaces\u0027 % iface, data)"}],"source_content_type":"text/x-python","patch_set":39,"id":"9f6a8fd7_9192024b","line":218,"in_reply_to":"9f6a8fd7_151cc368","updated":"2018-04-19 03:42:19.000000000","message":"Done","commit_id":"9b831496903b195ab526e74f05f699ccb491dd57"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1c18e5da11c712745bfe780095c6f5b2d15fa674","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        if use_dynamic:"},{"line_number":217,"context_line":"            for iface in driver_base.ALL_INTERFACES:"},{"line_number":218,"context_line":"                if iface !\u003d \u0027bios\u0027:"},{"line_number":219,"context_line":"                    if latest_if or iface not in [\u0027rescue\u0027, \u0027storage\u0027]:"},{"line_number":220,"context_line":"                        self.assertIn(\u0027default_%s_interface\u0027 % iface, data)"},{"line_number":221,"context_line":"                        self.assertIn(\u0027enabled_%s_interfaces\u0027 % iface, data)"}],"source_content_type":"text/x-python","patch_set":48,"id":"5f7c97a3_32f579cc","line":218,"updated":"2018-05-08 15:28:01.000000000","message":"I believe this is just temporary, consider this a no-action-necessary nit, but it would be nice to have a note inline so we remember to rip it out... not that testing won\u0027t cause us to realize it eventually.","commit_id":"5104552e9e6b1c76800519b9bd73a2b02a3f5d5f"}],"ironic/tests/unit/common/test_driver_factory.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5ab0f8f06eb19b07cdfbaa31319ff032ee3a158f","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        return [fake.FakeVendorB, fake.FakeVendorA]"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    @property"},{"line_number":621,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":622,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":623,"context_line":"        return [fake.FakeBIOS]"},{"line_number":624,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_6c683a1c","line":621,"updated":"2018-04-24 11:52:24.000000000","message":"nit: please move to before boot","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"},{"author":{"_account_id":21151,"name":"zenghui.shi","email":"zshi@redhat.com","username":"zshi"},"change_message_id":"c1de09d93506f8e5bed43ec49f761e1ca9f46349","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        return [fake.FakeVendorB, fake.FakeVendorA]"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    @property"},{"line_number":621,"context_line":"    def supported_bios_interfaces(self):"},{"line_number":622,"context_line":"        \"\"\"List of supported bios interfaces.\"\"\""},{"line_number":623,"context_line":"        return [fake.FakeBIOS]"},{"line_number":624,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9f6a8fd7_ac289296","line":621,"in_reply_to":"9f6a8fd7_6c683a1c","updated":"2018-04-24 22:31:50.000000000","message":"Done","commit_id":"93fcea3d01cb251da809a5be91c06d41bb1abc37"}],"ironic/tests/unit/drivers/modules/test_noop.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"38eb1d3e989feffd9ebaebc6e65d2cd91bbcadf0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                          self, self.task, \u0027\u0027)"},{"line_number":40,"context_line":"        self.assertRaises(exception.UnsupportedDriverExtension,"},{"line_number":41,"context_line":"                          getattr(noop.NoBIOS(), \u0027factory_reset\u0027),"},{"line_number":42,"context_line":"                          self, self.task)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_console(self):"},{"line_number":45,"context_line":"        for method in (\u0027start_console\u0027, \u0027stop_console\u0027, \u0027get_console\u0027):"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_504b0d2a","line":42,"updated":"2018-05-08 09:16:50.000000000","message":"What about cache_bios_settings?","commit_id":"1e24ef9dde30602c02e834c4723a259823f027ec"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1c18e5da11c712745bfe780095c6f5b2d15fa674","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                          self, self.task, \u0027\u0027)"},{"line_number":40,"context_line":"        self.assertRaises(exception.UnsupportedDriverExtension,"},{"line_number":41,"context_line":"                          getattr(noop.NoBIOS(), \u0027factory_reset\u0027),"},{"line_number":42,"context_line":"                          self, self.task)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_console(self):"},{"line_number":45,"context_line":"        for method in (\u0027start_console\u0027, \u0027stop_console\u0027, \u0027get_console\u0027):"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f7c97a3_452584aa","line":42,"in_reply_to":"5f7c97a3_504b0d2a","updated":"2018-05-08 15:28:01.000000000","message":"It is pass, so I don\u0027t think it really needs to be tested.","commit_id":"1e24ef9dde30602c02e834c4723a259823f027ec"}],"setup.cfg":[{"author":{"_account_id":22255,"name":"Tuan","email":"tuanla@vn.fujitsu.com","username":"Tuan"},"change_message_id":"80038cf44f680ec98e662718e6c28e6881772bc9","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    ipmitool \u003d ironic.drivers.modules.ipmitool:VendorPassthru"},{"line_number":173,"context_line":"    no-vendor \u003d ironic.drivers.modules.noop:NoVendor"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"ironic.hardware.interfaces.bios \u003d"},{"line_number":176,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeBIOS"},{"line_number":177,"context_line":"    no-bios \u003d ironic.drivers.modules.noop:NoBIOS"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":24,"id":"df7087c5_3808b22b","line":175,"range":{"start_line":175,"start_character":0,"end_line":175,"end_character":32},"updated":"2018-03-21 08:18:18.000000000","message":"This should be in human alphabetical order","commit_id":"ebcf197831c738db2f0ea319815667ddc6a2f7d7"}]}
