)]}'
{"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Options defined in oslo.service.periodic_task"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Some periodic tasks can be run in a separate process. Should"}],"source_content_type":"application/octet-stream","patch_set":32,"id":"7a2fa921_c572c4ad","line":4,"updated":"2015-10-05 18:39:39.000000000","message":"It seems this should be regenerated, it adds incorrect order of modules back.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"aedb1014e378978fed640a080b3d514a48eafcb8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"[DEFAULT]"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Options defined in oslo.service.periodic_task"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Some periodic tasks can be run in a separate process. Should"}],"source_content_type":"application/octet-stream","patch_set":32,"id":"7a2fa921_c7b5e17e","line":4,"in_reply_to":"7a2fa921_c572c4ad","updated":"2015-10-05 19:40:14.000000000","message":"In fact, we did regenerated this file using \"tox -e genconfig\". But I understand the file was being updated on text instead of chaging the defaults on each config option on code. I\u0027ll use the tree file as base and add just the OneView part.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":1803,"context_line":"# Port on which VirtualBox web service is listening. (integer"},{"line_number":1804,"context_line":"# value)"},{"line_number":1805,"context_line":"#port\u003d18083"},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":41,"id":"7a2fa921_5831e158","side":"PARENT","line":1806,"updated":"2015-10-09 17:20:53.000000000","message":"This change is not needed.","commit_id":"cee8b22a1131476946ef2a648e3678fe9609d647"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":1803,"context_line":"# Port on which VirtualBox web service is listening. (integer"},{"line_number":1804,"context_line":"# value)"},{"line_number":1805,"context_line":"#port\u003d18083"},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":41,"id":"7a2fa921_41632842","side":"PARENT","line":1806,"in_reply_to":"7a2fa921_5831e158","updated":"2015-10-09 18:14:50.000000000","message":"Done","commit_id":"cee8b22a1131476946ef2a648e3678fe9609d647"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"#policy_dirs\u003dpolicy.d"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"[oneview]"},{"line_number":1679,"context_line":""},{"line_number":1680,"context_line":"#"},{"line_number":1681,"context_line":"# Options defined in ironic.drivers.modules.oneview.common"}],"source_content_type":"application/octet-stream","patch_set":41,"id":"7a2fa921_382e65fb","line":1678,"updated":"2015-10-09 17:20:53.000000000","message":"This should be added above oslo sections. Also I tried to regenerate config locally, it works fine.","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"#policy_dirs\u003dpolicy.d"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"[oneview]"},{"line_number":1679,"context_line":""},{"line_number":1680,"context_line":"#"},{"line_number":1681,"context_line":"# Options defined in ironic.drivers.modules.oneview.common"}],"source_content_type":"application/octet-stream","patch_set":41,"id":"7a2fa921_81c70063","line":1678,"in_reply_to":"7a2fa921_382e65fb","updated":"2015-10-09 18:14:50.000000000","message":"Done","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"}],"ironic/drivers/modules/oneview/common.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"__oneview_client \u003d importutils.try_import(\u0027oneview_client.client\u0027,"},{"line_number":29,"context_line":"                                          default\u003dfake_oneviewclient)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027manager_url\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_1bac2d34","line":29,"updated":"2015-08-25 10:28:00.000000000","message":"Is this fake_oneviewclient module needed? It seems misleading because the code will succeed even if the library is not installed. And the user probably won\u0027t notice until it try to do some operator.\n\nUsually drivers in Ironic doesn\u0027t even load if the library is not installed i.e https://github.com/openstack/ironic/blob/master/ironic/drivers/irmc.py#L42-L45\n\nFor testing purposes you can mock it here https://github.com/openstack/ironic/blob/master/ironic/tests/drivers/third_party_driver_mocks.py\n\nAlso, nit: prefix the variable with only one underscore \u0027_\u0027 ( _oneview_client )","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"__oneview_client \u003d importutils.try_import(\u0027oneview_client.client\u0027,"},{"line_number":29,"context_line":"                                          default\u003dfake_oneviewclient)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027manager_url\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_7e318959","line":29,"in_reply_to":"fa1b9901_1bac2d34","updated":"2015-08-25 16:14:26.000000000","message":"That\u0027s something we couldn\u0027t find ourselves. Makes life easier. Thanks.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def parse_driver_info(node):"},{"line_number":78,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":79,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    _verify_node_info(\u0027properties/capabilities\u0027, properties,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_8696b992","line":78,"updated":"2015-08-24 22:02:04.000000000","message":"Is it properties or capabilities?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def parse_driver_info(node):"},{"line_number":78,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":79,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    _verify_node_info(\u0027properties/capabilities\u0027, properties,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_adf6195b","line":78,"in_reply_to":"fa1b9901_8696b992","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":79,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    _verify_node_info(\u0027properties/capabilities\u0027, properties,"},{"line_number":82,"context_line":"                      REQUIRED_ON_PROPERTIES)"},{"line_number":83,"context_line":"    _verify_node_info(\u0027driver_info\u0027, driver_info, REQUIRED_ON_DRIVER_INFO)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c6c911ae","line":81,"updated":"2015-08-24 22:02:04.000000000","message":"_verify_node_info says it takes \u0027node_info_list\u0027 as then second argument. Which makes me think it is a list. But it seems like properties is a string?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":79,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    _verify_node_info(\u0027properties/capabilities\u0027, properties,"},{"line_number":82,"context_line":"                      REQUIRED_ON_PROPERTIES)"},{"line_number":83,"context_line":"    _verify_node_info(\u0027driver_info\u0027, driver_info, REQUIRED_ON_DRIVER_INFO)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_73d9c256","line":81,"in_reply_to":"fa1b9901_c6c911ae","updated":"2015-08-25 16:14:26.000000000","message":"We\u0027ll pass a list to do set subtraction :)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \u0027server_hardware_uri\u0027:"},{"line_number":89,"context_line":"            driver_info.get(\"server_hardware_uri\"),"},{"line_number":90,"context_line":"        \u0027server_hardware_type_uri\u0027:"},{"line_number":91,"context_line":"            properties_dict.get(\u0027server_hardware_type_uri\u0027, None),"},{"line_number":92,"context_line":"        \u0027enclosure_group_uri\u0027:"},{"line_number":93,"context_line":"            properties_dict.get(\u0027enclosure_group_uri\u0027, None),"},{"line_number":94,"context_line":"        \u0027server_profile_template_uri\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_2bbf7861","line":91,"updated":"2015-08-24 22:02:04.000000000","message":"nit: None is the default for get, so not needed.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \u0027server_hardware_uri\u0027:"},{"line_number":89,"context_line":"            driver_info.get(\"server_hardware_uri\"),"},{"line_number":90,"context_line":"        \u0027server_hardware_type_uri\u0027:"},{"line_number":91,"context_line":"            properties_dict.get(\u0027server_hardware_type_uri\u0027, None),"},{"line_number":92,"context_line":"        \u0027enclosure_group_uri\u0027:"},{"line_number":93,"context_line":"            properties_dict.get(\u0027enclosure_group_uri\u0027, None),"},{"line_number":94,"context_line":"        \u0027server_profile_template_uri\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_ad99397b","line":91,"in_reply_to":"fa1b9901_2bbf7861","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027server_hardware_type_uri\u0027:"},{"line_number":91,"context_line":"            properties_dict.get(\u0027server_hardware_type_uri\u0027, None),"},{"line_number":92,"context_line":"        \u0027enclosure_group_uri\u0027:"},{"line_number":93,"context_line":"            properties_dict.get(\u0027enclosure_group_uri\u0027, None),"},{"line_number":94,"context_line":"        \u0027server_profile_template_uri\u0027:"},{"line_number":95,"context_line":"            driver_info.get(\u0027server_profile_template_uri\u0027, None),"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_cbb59c7e","line":93,"updated":"2015-08-24 22:02:04.000000000","message":"nit: None is the default for get, so not needed.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027server_hardware_type_uri\u0027:"},{"line_number":91,"context_line":"            properties_dict.get(\u0027server_hardware_type_uri\u0027, None),"},{"line_number":92,"context_line":"        \u0027enclosure_group_uri\u0027:"},{"line_number":93,"context_line":"            properties_dict.get(\u0027enclosure_group_uri\u0027, None),"},{"line_number":94,"context_line":"        \u0027server_profile_template_uri\u0027:"},{"line_number":95,"context_line":"            driver_info.get(\u0027server_profile_template_uri\u0027, None),"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_4d897d25","line":93,"in_reply_to":"fa1b9901_cbb59c7e","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u0027enclosure_group_uri\u0027:"},{"line_number":93,"context_line":"            properties_dict.get(\u0027enclosure_group_uri\u0027, None),"},{"line_number":94,"context_line":"        \u0027server_profile_template_uri\u0027:"},{"line_number":95,"context_line":"            driver_info.get(\u0027server_profile_template_uri\u0027, None),"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    }"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_ebb8a077","line":95,"updated":"2015-08-24 22:02:04.000000000","message":"nit: None is the default for get, so not needed.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        \u0027enclosure_group_uri\u0027:"},{"line_number":93,"context_line":"            properties_dict.get(\u0027enclosure_group_uri\u0027, None),"},{"line_number":94,"context_line":"        \u0027server_profile_template_uri\u0027:"},{"line_number":95,"context_line":"            driver_info.get(\u0027server_profile_template_uri\u0027, None),"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    }"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_6d8ec12f","line":95,"in_reply_to":"fa1b9901_ebb8a077","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    return driver_info_ret"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def _verify_node_info(node_namespace, node_info_list, info_required):"},{"line_number":103,"context_line":"    for key in info_required:"},{"line_number":104,"context_line":"        if key not in node_info_list:"},{"line_number":105,"context_line":"            raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_2b4d3899","line":102,"updated":"2015-08-24 22:02:04.000000000","message":"I think this would be better as a set.  As it is right now it will only show the first missing key.  If there is more than one it won\u0027t be shown\n\n missing_keys \u003d set(info_required) - set(node_info_list)\n if missing_keys:\n    raise exception.MissingParameterValue(\n       _(\u0027blah blah missing key(s): %(missing_keys)\u0027) % \u0027, \u0027.join(missing_keys)\n\nOr something like that.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    return driver_info_ret"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def _verify_node_info(node_namespace, node_info_list, info_required):"},{"line_number":103,"context_line":"    for key in info_required:"},{"line_number":104,"context_line":"        if key not in node_info_list:"},{"line_number":105,"context_line":"            raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_b05c301a","line":102,"in_reply_to":"fa1b9901_2b4d3899","updated":"2015-08-25 16:14:26.000000000","message":"I didn\u0027t know it was possible. Amazing!","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                {\u0027namespace\u0027: node_namespace, \u0027missing_key\u0027: key}"},{"line_number":109,"context_line":"            )"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    return node_info_list"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _verify_node_properties(node):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c608312b","line":111,"updated":"2015-08-24 22:02:04.000000000","message":"Why does it need to return anything?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                {\u0027namespace\u0027: node_namespace, \u0027missing_key\u0027: key}"},{"line_number":109,"context_line":"            )"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    return node_info_list"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _verify_node_properties(node):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_6d0a418c","line":111,"in_reply_to":"fa1b9901_c608312b","updated":"2015-08-25 16:14:26.000000000","message":"Nice catch. :) Done.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    return node_info_list"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _verify_node_properties(node):"},{"line_number":115,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":116,"context_line":"    for key in REQUIRED_ON_PROPERTIES:"},{"line_number":117,"context_line":"        if key not in properties:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_464bc159","line":114,"updated":"2015-08-24 22:02:04.000000000","message":"What does this do?\n\nIs capabilities a string, list or dict?  I\u0027m confused as seems like it is a string but treating it as a list/dict.\n\nI don\u0027t see a test case for this function.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    return node_info_list"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _verify_node_properties(node):"},{"line_number":115,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":116,"context_line":"    for key in REQUIRED_ON_PROPERTIES:"},{"line_number":117,"context_line":"        if key not in properties:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_8de2359f","line":114,"in_reply_to":"fa1b9901_464bc159","updated":"2015-08-25 16:14:26.000000000","message":"We\u0027ll refactor and remove this function.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _verify_node_properties(node):"},{"line_number":115,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":116,"context_line":"    for key in REQUIRED_ON_PROPERTIES:"},{"line_number":117,"context_line":"        if key not in properties:"},{"line_number":118,"context_line":"            raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_a6bf3dfb","line":115,"updated":"2015-08-24 22:02:04.000000000","message":"This seems better done using sets as mentioned on L102","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"def _verify_node_properties(node):"},{"line_number":115,"context_line":"    properties \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":116,"context_line":"    for key in REQUIRED_ON_PROPERTIES:"},{"line_number":117,"context_line":"        if key not in properties:"},{"line_number":118,"context_line":"            raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_b403bd0f","line":115,"in_reply_to":"fa1b9901_a6bf3dfb","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    return properties"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"def _capabilities_to_dict(capabilities):"},{"line_number":127,"context_line":"    capabilities_dict \u003d {}"},{"line_number":128,"context_line":"    if capabilities:"},{"line_number":129,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_7b74499b","line":126,"updated":"2015-08-25 10:28:00.000000000","message":"Also you may want to put this function in a common place so other drivers may benefit from ti as well, i.e:\n\nhttps://github.com/openstack/ironic/blob/a0760043e5b10b8e7fad2db53e23786c481c2b84/ironic/drivers/utils.py#L124","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    return properties"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"def _capabilities_to_dict(capabilities):"},{"line_number":127,"context_line":"    capabilities_dict \u003d {}"},{"line_number":128,"context_line":"    if capabilities:"},{"line_number":129,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_065e29e9","line":126,"updated":"2015-08-24 22:02:04.000000000","message":"nit: A function docstring would be nice.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    return properties"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"def _capabilities_to_dict(capabilities):"},{"line_number":127,"context_line":"    capabilities_dict \u003d {}"},{"line_number":128,"context_line":"    if capabilities:"},{"line_number":129,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_2dd3e9d6","line":126,"in_reply_to":"fa1b9901_065e29e9","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    return properties"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"def _capabilities_to_dict(capabilities):"},{"line_number":127,"context_line":"    capabilities_dict \u003d {}"},{"line_number":128,"context_line":"    if capabilities:"},{"line_number":129,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_8d4b15b1","line":126,"in_reply_to":"fa1b9901_7b74499b","updated":"2015-08-25 16:14:26.000000000","message":"Will do. ;)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4e39623ae1c42ea218c846f73728eff24ddbff37","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def parse_driver_info(node):"},{"line_number":76,"context_line":"    capabilities \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":77,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    capabilities_dict \u003d capabilities_to_dict(capabilities)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_df667e50","line":76,"updated":"2015-08-25 21:41:10.000000000","message":"nit: seems like could assign capabilities_dict in one line and don\u0027t need \u0027capabilities\u0027 variable.","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"bb43ce77f08eaa2c89f2599e21ad25e7c52e7574","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def parse_driver_info(node):"},{"line_number":76,"context_line":"    capabilities \u003d node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":77,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    capabilities_dict \u003d capabilities_to_dict(capabilities)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_fe5b2484","line":76,"in_reply_to":"fa1b9901_df667e50","updated":"2015-08-26 16:18:02.000000000","message":"Done","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f94d9b7739fbf9713a4f6c253f98f1aa4d901408","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"opts \u003d ["},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027manager_url\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027URL where OneView is available\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027OneView username to be used\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027password\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_cb2027fa","line":31,"updated":"2015-09-03 14:11:46.000000000","message":"Help strings should be translated with _().","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"opts \u003d ["},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027manager_url\u0027,"},{"line_number":31,"context_line":"               help\u003d\u0027URL where OneView is available\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":33,"context_line":"               help\u003d\u0027OneView username to be used\u0027),"},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027password\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_57a835db","line":31,"in_reply_to":"da20952f_cb2027fa","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f94d9b7739fbf9713a4f6c253f98f1aa4d901408","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def get_oneview_client():"},{"line_number":72,"context_line":"    return _oneview_client"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def parse_driver_info(node):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_6bb9db78","line":72,"updated":"2015-09-03 14:11:46.000000000","message":"+1 this function looks strange. Config options are not used anywhere.","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7c402d9506d31386ec08aa468d9dae9f40766044","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def get_oneview_client():"},{"line_number":72,"context_line":"    return _oneview_client"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def parse_driver_info(node):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_6259358e","line":72,"updated":"2015-09-02 13:33:17.000000000","message":"we don\u0027t need to pass any credentials to it?","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def get_oneview_client():"},{"line_number":72,"context_line":"    return _oneview_client"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def parse_driver_info(node):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_7431b70a","line":72,"in_reply_to":"da20952f_6259358e","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def get_oneview_client():"},{"line_number":72,"context_line":"    return _oneview_client"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def parse_driver_info(node):"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_94348bfb","line":72,"in_reply_to":"da20952f_6bb9db78","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7c402d9506d31386ec08aa468d9dae9f40766044","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    _verify_node_info(\u0027properties/capabilities\u0027, capabilities_dict.keys(),"},{"line_number":82,"context_line":"                      REQUIRED_ON_PROPERTIES)"},{"line_number":83,"context_line":"    _verify_node_info(\u0027driver_info\u0027, driver_info.keys(),"},{"line_number":84,"context_line":"                      REQUIRED_ON_DRIVER_INFO)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    driver_info_ret \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_e2754532","line":83,"updated":"2015-09-02 13:33:17.000000000","message":"nit: keys() not needed","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    _verify_node_info(\u0027properties/capabilities\u0027, capabilities_dict.keys(),"},{"line_number":82,"context_line":"                      REQUIRED_ON_PROPERTIES)"},{"line_number":83,"context_line":"    _verify_node_info(\u0027driver_info\u0027, driver_info.keys(),"},{"line_number":84,"context_line":"                      REQUIRED_ON_DRIVER_INFO)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    driver_info_ret \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_3720219b","line":83,"in_reply_to":"da20952f_e2754532","updated":"2015-09-03 20:11:13.000000000","message":"\"Explicit is better then implicit\" -Zen of Python\nDo you mind to let the keys() or does it carry any bigger concern?","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ironic.common import exception"},{"line_number":23,"context_line":"from ironic.common.i18n import _"},{"line_number":24,"context_line":"from ironic.common import states"},{"line_number":25,"context_line":"from ironic.drivers.utils import capabilities_to_dict"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"client \u003d importutils.try_import(\u0027oneview_client.client\u0027)"},{"line_number":28,"context_line":"oneview_states \u003d importutils.try_import(\u0027oneview_client.states\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_470b68d6","line":25,"updated":"2015-09-04 20:36:51.000000000","message":"I may be wrong, but I think it is better to import whole utils module and then use utils.capabilities_to_dict as it is easier to understand where this function comes from.","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":36,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":37,"context_line":"    cfg.Opt(\u0027allow_insecure_connections\u0027,"},{"line_number":38,"context_line":"            type\u003dtypes.Boolean(),"},{"line_number":39,"context_line":"            default\u003dFalse,"},{"line_number":40,"context_line":"            help\u003d_(\u0027Option to allow insecure connection with OneView\u0027)),"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_5c501f32","line":37,"updated":"2015-09-04 20:36:51.000000000","message":"BoolOpt","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"e0778f10e8c15394f70e9907ef2cf6f238f5755c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":36,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":37,"context_line":"    cfg.Opt(\u0027allow_insecure_connections\u0027,"},{"line_number":38,"context_line":"            type\u003dtypes.Boolean(),"},{"line_number":39,"context_line":"            default\u003dFalse,"},{"line_number":40,"context_line":"            help\u003d_(\u0027Option to allow insecure connection with OneView\u0027)),"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba15a1d1_6a4a7c85","line":37,"in_reply_to":"da20952f_5c501f32","updated":"2015-09-14 17:29:17.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def parse_driver_info(node):"},{"line_number":85,"context_line":"    capabilities_dict \u003d capabilities_to_dict("},{"line_number":86,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":87,"context_line":"    )"},{"line_number":88,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_878ae062","line":86,"updated":"2015-09-04 20:36:51.000000000","message":"What about setting capabilities in instance_info to support standalone mode?","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def parse_driver_info(node):"},{"line_number":85,"context_line":"    capabilities_dict \u003d capabilities_to_dict("},{"line_number":86,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":87,"context_line":"    )"},{"line_number":88,"context_line":"    driver_info \u003d node.driver_info"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_e139bef3","line":86,"in_reply_to":"da20952f_878ae062","updated":"2015-09-09 17:15:18.000000000","message":"This could be a nice idea, but for now we are focusing only on what we described in the driver\u0027s spec. We did not consider Ironic standalone for this release, but we plan to support it in the future, thanks.","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"95331fc4a21a138f49f19fcb6cf52fb89f95ec2f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ironic.common.i18n import _"},{"line_number":23,"context_line":"from ironic.common import states"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import ironic.drivers.utils as utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"client \u003d importutils.try_import(\u0027oneview_client.client\u0027)"},{"line_number":28,"context_line":"oneview_states \u003d importutils.try_import(\u0027oneview_client.states\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba15a1d1_aa817491","line":25,"updated":"2015-09-14 17:29:05.000000000","message":"I think \"from ironic.drivers import utils\" fits best. Updating.","commit_id":"a12fb4ccd1bd73f5dbef080865e6f8fd0e247ee0"},{"author":{"_account_id":10917,"name":"Gabriel Bezerra","email":"gabrielb@lsd.ufcg.edu.br","username":"gabriel.bezerra"},"change_message_id":"4b1c6bd120bd2bfc6eca65e8a4fac0c7b97b3844","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":36,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":37,"context_line":"    cfg.BoolOpt(\u0027allow_insecure_connections\u0027,"},{"line_number":38,"context_line":"                default\u003dFalse,"},{"line_number":39,"context_line":"                help\u003d_(\u0027Option to allow insecure connection with OneView\u0027)),"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba15a1d1_41755a2f","line":36,"updated":"2015-09-18 15:01:23.000000000","message":"Please add required\u003dTrue for the options above and secret\u003dTrue for the password.\n\nSee: http://docs.openstack.org/developer/oslo.config/cfg.html#special-handling-instructions","commit_id":"130ddac8f8222b673b7c6cdaac349604cde2beaa"},{"author":{"_account_id":10917,"name":"Gabriel Bezerra","email":"gabrielb@lsd.ufcg.edu.br","username":"gabriel.bezerra"},"change_message_id":"bf8ffa2c9d623ed923470d189b392d049796d71f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":36,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":37,"context_line":"    cfg.BoolOpt(\u0027allow_insecure_connections\u0027,"},{"line_number":38,"context_line":"                default\u003dFalse,"},{"line_number":39,"context_line":"                help\u003d_(\u0027Option to allow insecure connection with OneView\u0027)),"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba15a1d1_b02b1733","line":36,"in_reply_to":"ba15a1d1_3b136d5e","updated":"2015-09-21 17:45:27.000000000","message":"Yes, sure. I\u0027ve just seen that required\u003dTrue would break deployments that don\u0027t use this driver. The secret for password can wait, as you have stated.","commit_id":"130ddac8f8222b673b7c6cdaac349604cde2beaa"},{"author":{"_account_id":14891,"name":"Lilia Sampaio","email":"liliars@lsd.ufcg.edu.br","username":"liliars"},"change_message_id":"d30cdb0ae88c12f69ed6072f53416d8c22f66f16","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":36,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":37,"context_line":"    cfg.BoolOpt(\u0027allow_insecure_connections\u0027,"},{"line_number":38,"context_line":"                default\u003dFalse,"},{"line_number":39,"context_line":"                help\u003d_(\u0027Option to allow insecure connection with OneView\u0027)),"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba15a1d1_3b136d5e","line":36,"in_reply_to":"ba15a1d1_41755a2f","updated":"2015-09-21 17:02:58.000000000","message":"That\u0027s a fair point, but since we are not logging this info anywhere and it doesn\u0027t seem critical right now, can we just push this to a follow-up patch when this one is merged? This way we can be sure this info is not appearing anywhere out of our control.","commit_id":"130ddac8f8222b673b7c6cdaac349604cde2beaa"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2015 Hewlett Packard Development Company, LP"},{"line_number":4,"context_line":"# Copyright 2015 Universidade Federal de Campina Grande"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5aae3a86","line":1,"updated":"2015-09-28 07:05:43.000000000","message":"This is not required.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2015 Hewlett Packard Development Company, LP"},{"line_number":4,"context_line":"# Copyright 2015 Universidade Federal de Campina Grande"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_24dd5fe0","line":1,"in_reply_to":"9a1a9d01_5aae3a86","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"oneview_states \u003d importutils.try_import(\u0027oneview_client.states\u0027)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"opts \u003d ["},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027manager_url\u0027,"},{"line_number":32,"context_line":"               help\u003d_(\u0027URL where OneView is available\u0027)),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_53e86510","line":31,"updated":"2015-09-28 07:05:43.000000000","message":"Need to regenerate the sample conf file.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"COMMON_PROPERTIES.update(OPTIONAL_ON_PROPERTIES)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def get_oneview_client():"},{"line_number":72,"context_line":"    oneview_client \u003d client.Client("},{"line_number":73,"context_line":"        manager_url\u003dCONF.oneview.manager_url,"},{"line_number":74,"context_line":"        username\u003dCONF.oneview.username,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_ba9f564f","line":71,"updated":"2015-09-28 07:05:43.000000000","message":"Can we have one line docstrings please for all these methods ? Better if we have proper docstrings as all these are public methods.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"COMMON_PROPERTIES.update(OPTIONAL_ON_PROPERTIES)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def get_oneview_client():"},{"line_number":72,"context_line":"    oneview_client \u003d client.Client("},{"line_number":73,"context_line":"        manager_url\u003dCONF.oneview.manager_url,"},{"line_number":74,"context_line":"        username\u003dCONF.oneview.username,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_b4c7e294","line":71,"in_reply_to":"9a1a9d01_ba9f564f","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def parse_driver_info(node):"},{"line_number":84,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("},{"line_number":85,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":86,"context_line":"    )"},{"line_number":87,"context_line":"    driver_info \u003d node.driver_info"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1da2fcae","line":84,"updated":"2015-09-28 07:05:43.000000000","message":"If this raises ValueError, need to convert it to InvalidParameterValue.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def parse_driver_info(node):"},{"line_number":84,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("},{"line_number":85,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":86,"context_line":"    )"},{"line_number":87,"context_line":"    driver_info \u003d node.driver_info"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_64e91780","line":84,"in_reply_to":"9a1a9d01_1da2fcae","updated":"2015-09-30 20:58:39.000000000","message":"utils.capabilities_to_dict don\u0027t raise a ValueError, it raises an InvalidParameterValue.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"11658cd65c8e73b27e686d410ba495c382f9b16c","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"def parse_driver_info(node):"},{"line_number":84,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("},{"line_number":85,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":86,"context_line":"    )"},{"line_number":87,"context_line":"    driver_info \u003d node.driver_info"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_4298c86a","line":84,"in_reply_to":"9a1a9d01_64e91780","updated":"2015-10-02 04:20:58.000000000","message":"As per the code in https://review.openstack.org/#/c/191822/31/ironic/drivers/utils.py L238, it raises ValueError.  And also the based on the comment on utils.py, there should be two places where it can raise ValueError.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"def translate_oneview_power_state(power_state):"},{"line_number":139,"context_line":"    if (power_state \u003d\u003d oneview_states.ONEVIEW_POWER_ON or"},{"line_number":140,"context_line":"            power_state \u003d\u003d oneview_states.ONEVIEW_POWERING_OFF):"},{"line_number":141,"context_line":"        power_state \u003d states.POWER_ON"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_fd7068de","line":138,"updated":"2015-09-28 07:05:43.000000000","message":"Missing test cases for this method ?","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        )"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"def translate_oneview_power_state(power_state):"},{"line_number":139,"context_line":"    if (power_state \u003d\u003d oneview_states.ONEVIEW_POWER_ON or"},{"line_number":140,"context_line":"            power_state \u003d\u003d oneview_states.ONEVIEW_POWERING_OFF):"},{"line_number":141,"context_line":"        power_state \u003d states.POWER_ON"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_58add02f","line":138,"in_reply_to":"9a1a9d01_fd7068de","updated":"2015-09-30 20:58:39.000000000","message":"Done, please see test case: test_all_scenarios_for_translate_oneview_states at ironic/tests/drivers/oneview/test_common.py","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"def translate_oneview_power_state(power_state):"},{"line_number":139,"context_line":"    if (power_state \u003d\u003d oneview_states.ONEVIEW_POWER_ON or"},{"line_number":140,"context_line":"            power_state \u003d\u003d oneview_states.ONEVIEW_POWERING_OFF):"},{"line_number":141,"context_line":"        power_state \u003d states.POWER_ON"},{"line_number":142,"context_line":"    elif (power_state \u003d\u003d oneview_states.ONEVIEW_POWER_OFF or"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_dd99e46f","line":139,"updated":"2015-09-28 07:05:43.000000000","message":"Dictionary lookup seems much more better to me.\n\n  {\n    oneview_states.ONEVIEW_POWER_ON: states.POWER_ON,\n    oneview_states.ONEVIEW_POWERING_OFF: states.POWER_ON,\n    oneview_states.ONEVIEW_POWER_OFF: states.POWER_OFF,\n    oneview_states.ONEVIEW_POWERING_ON: states.POWER_OFF,\n    oneview_states.ONEVIEW_RESETTING: states.REBOOT\n  }\n\nAnd then\n\n  return power_states_map.get(power_state, states.ERROR)","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"def translate_oneview_power_state(power_state):"},{"line_number":139,"context_line":"    if (power_state \u003d\u003d oneview_states.ONEVIEW_POWER_ON or"},{"line_number":140,"context_line":"            power_state \u003d\u003d oneview_states.ONEVIEW_POWERING_OFF):"},{"line_number":141,"context_line":"        power_state \u003d states.POWER_ON"},{"line_number":142,"context_line":"    elif (power_state \u003d\u003d oneview_states.ONEVIEW_POWER_OFF or"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_13f97b4d","line":139,"in_reply_to":"9a1a9d01_dd99e46f","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"REQUIRED_ON_PROPERTIES \u003d {"},{"line_number":57,"context_line":"    \u0027server_hardware_type_uri\u0027: _(\"Server Hardware Type URI Required.\"),"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"OPTIONAL_ON_PROPERTIES \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_05ee7c22","line":57,"updated":"2015-10-05 18:39:39.000000000","message":"nit - missing dot between URI and Required.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"REQUIRED_ON_PROPERTIES \u003d {"},{"line_number":57,"context_line":"    \u0027server_hardware_type_uri\u0027: _(\"Server Hardware Type URI Required.\"),"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"OPTIONAL_ON_PROPERTIES \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_2c635cb3","line":57,"in_reply_to":"7a2fa921_05ee7c22","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        _verify_node_info(\u0027driver_info\u0027, driver_info,"},{"line_number":107,"context_line":"                          REQUIRED_ON_DRIVER_INFO)"},{"line_number":108,"context_line":"    except ValueError as ex:"},{"line_number":109,"context_line":"        raise exception.InvalidParameterException(ex.message)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_oneview_info(node):"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_451794ed","line":109,"updated":"2015-10-05 18:39:39.000000000","message":"I think it was mentioned on previous patch sets, message attribute is deprecated, you could just pass ex here.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        _verify_node_info(\u0027driver_info\u0027, driver_info,"},{"line_number":107,"context_line":"                          REQUIRED_ON_DRIVER_INFO)"},{"line_number":108,"context_line":"    except ValueError as ex:"},{"line_number":109,"context_line":"        raise exception.InvalidParameterException(ex.message)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_oneview_info(node):"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_cc5748c9","line":109,"in_reply_to":"7a2fa921_451794ed","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"def _verify_node_info(node_namespace, node_info_dict, info_required):"},{"line_number":194,"context_line":"    missing_keys \u003d set(info_required) - set(node_info_dict.keys())"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    if missing_keys:"},{"line_number":197,"context_line":"        raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_913f2b25","line":194,"updated":"2015-10-05 18:39:39.000000000","message":"keys() is not required, and is inconsistent with set(info_required) where info_required is also a dict.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"def _verify_node_info(node_namespace, node_info_dict, info_required):"},{"line_number":194,"context_line":"    missing_keys \u003d set(info_required) - set(node_info_dict.keys())"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    if missing_keys:"},{"line_number":197,"context_line":"        raise exception.MissingParameterValue("}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_8cf950cb","line":194,"in_reply_to":"7a2fa921_913f2b25","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    Verifies if the \u0027driver_info\u0027 field and the \u0027properties/capabilities\u0027"},{"line_number":97,"context_line":"    namespace exist and are not empty."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    param: node: node object to be verified"},{"line_number":100,"context_line":"    \"\"\""},{"line_number":101,"context_line":"    try:"},{"line_number":102,"context_line":"        capabilities_dict \u003d utils.capabilities_to_dict("}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_94b620db","line":99,"updated":"2015-10-06 09:46:18.000000000","message":"docstring\n\n :raises: InvalidParameterException ...\n :raises: MissingParameterValue ...","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    Verifies if the \u0027driver_info\u0027 field and the \u0027properties/capabilities\u0027"},{"line_number":97,"context_line":"    namespace exist and are not empty."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    param: node: node object to be verified"},{"line_number":100,"context_line":"    \"\"\""},{"line_number":101,"context_line":"    try:"},{"line_number":102,"context_line":"        capabilities_dict \u003d utils.capabilities_to_dict("}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_8ef3610a","line":99,"in_reply_to":"7a2fa921_94b620db","updated":"2015-10-06 18:05:11.000000000","message":"Done","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        _verify_node_info(\u0027driver_info\u0027, driver_info,"},{"line_number":110,"context_line":"                          REQUIRED_ON_DRIVER_INFO)"},{"line_number":111,"context_line":"    except ValueError as ex:"},{"line_number":112,"context_line":"        raise exception.InvalidParameterException(ex)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def get_oneview_info(node):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_295c954a","line":112,"updated":"2015-10-06 09:46:18.000000000","message":"This exception doesn\u0027t seem to exist. I think you meant InvalidParameterValue here, that also means tests are not covering this code path.\n\n(And I think we should make capabilities_to_dict() to raise InvalidParameterValue instead of ValueError)","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        _verify_node_info(\u0027driver_info\u0027, driver_info,"},{"line_number":110,"context_line":"                          REQUIRED_ON_DRIVER_INFO)"},{"line_number":111,"context_line":"    except ValueError as ex:"},{"line_number":112,"context_line":"        raise exception.InvalidParameterException(ex)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def get_oneview_info(node):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_b187a00e","line":112,"in_reply_to":"7a2fa921_295c954a","updated":"2015-10-06 18:05:11.000000000","message":"Yeah agreed, it does make more sense. Changed to InvalidParameterValue.","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            OneView"},{"line_number":123,"context_line":"        :enclosure_group_uri: the uri of the enclosure group in OneView"},{"line_number":124,"context_line":"        :server_profile_template_uri: the uri of the server profile template in"},{"line_number":125,"context_line":"            OneView"},{"line_number":126,"context_line":"    \"\"\""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_743a6438","line":125,"updated":"2015-10-06 09:46:18.000000000","message":":raises: ValueError ...\n\n(tho I think it should be InvalidParameterValue, see comment on L112)","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            OneView"},{"line_number":123,"context_line":"        :enclosure_group_uri: the uri of the enclosure group in OneView"},{"line_number":124,"context_line":"        :server_profile_template_uri: the uri of the server profile template in"},{"line_number":125,"context_line":"            OneView"},{"line_number":126,"context_line":"    \"\"\""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_b19ec054","line":125,"in_reply_to":"7a2fa921_743a6438","updated":"2015-10-06 18:05:11.000000000","message":"Also changed to InvalidParameterValue.","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f8d7753d56864a694d805e802dcd58a100e169a5","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    enclosure_group_uri and node ports. Also verifies if a Server Profile"},{"line_number":154,"context_line":"    is applied to the Server Hardware the node represents."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    :param: task: a TaskManager instance containing the node to act on."},{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_d976fa3d","line":156,"updated":"2015-10-06 17:44:33.000000000","message":"I do not understand how we obtain result of validation, no returns or raises in the docstring.","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    enclosure_group_uri and node ports. Also verifies if a Server Profile"},{"line_number":154,"context_line":"    is applied to the Server Hardware the node represents."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    :param: task: a TaskManager instance containing the node to act on."},{"line_number":157,"context_line":"    \"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_34cff357","line":156,"in_reply_to":"7a2fa921_d976fa3d","updated":"2015-10-06 18:05:11.000000000","message":"This method doesn\u0027t raises any exception by itself. The oneview_client raises and the exception is captured only on the interface (power/management). Do you think we should document an exception that is not raised here?","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            node_has_server_profile \u003d ("},{"line_number":225,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":226,"context_line":"            )"},{"line_number":227,"context_line":"        except Exception as e:"},{"line_number":228,"context_line":"            LOG.error("},{"line_number":229,"context_line":"                _LE(\"%(message)s Node: %(node)s\"),"},{"line_number":230,"context_line":"                {\"message\": e, \"node\": task.node.uuid}"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_49123164","line":227,"updated":"2015-10-06 09:46:18.000000000","message":"more granularity would be good here","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            node_has_server_profile \u003d ("},{"line_number":225,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":226,"context_line":"            )"},{"line_number":227,"context_line":"        except Exception as e:"},{"line_number":228,"context_line":"            LOG.error("},{"line_number":229,"context_line":"                _LE(\"%(message)s Node: %(node)s\"),"},{"line_number":230,"context_line":"                {\"message\": e, \"node\": task.node.uuid}"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_d7eecc21","line":227,"in_reply_to":"7a2fa921_49123164","updated":"2015-10-06 18:05:11.000000000","message":"Done","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        except Exception as e:"},{"line_number":228,"context_line":"            LOG.error("},{"line_number":229,"context_line":"                _LE(\"%(message)s Node: %(node)s\"),"},{"line_number":230,"context_line":"                {\"message\": e, \"node\": task.node.uuid}"},{"line_number":231,"context_line":"            )"},{"line_number":232,"context_line":"            raise exception.IronicException("},{"line_number":233,"context_line":"                _(\"Failed to get server profile from OneView appliance.\""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_742584a9","line":230,"updated":"2015-10-06 09:46:18.000000000","message":"\"Failed to get server profile from OneView appliance for node %(node)s. Error: %(message)s\"","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        except Exception as e:"},{"line_number":228,"context_line":"            LOG.error("},{"line_number":229,"context_line":"                _LE(\"%(message)s Node: %(node)s\"),"},{"line_number":230,"context_line":"                {\"message\": e, \"node\": task.node.uuid}"},{"line_number":231,"context_line":"            )"},{"line_number":232,"context_line":"            raise exception.IronicException("},{"line_number":233,"context_line":"                _(\"Failed to get server profile from OneView appliance.\""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_d1c7bc10","line":230,"in_reply_to":"7a2fa921_742584a9","updated":"2015-10-06 18:05:11.000000000","message":"Sounds better. Changed the message.","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                _LE(\"%(message)s Node: %(node)s\"),"},{"line_number":230,"context_line":"                {\"message\": e, \"node\": task.node.uuid}"},{"line_number":231,"context_line":"            )"},{"line_number":232,"context_line":"            raise exception.IronicException("},{"line_number":233,"context_line":"                _(\"Failed to get server profile from OneView appliance.\""},{"line_number":234,"context_line":"                  \" Node: %s\") % task.node.uuid"},{"line_number":235,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_740ee435","line":232,"updated":"2015-10-06 09:46:18.000000000","message":"Sounds like the kinda of thing that would be good to have a OneViewFailure exception for here (which inherits of IronicException ofc)","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                _LE(\"%(message)s Node: %(node)s\"),"},{"line_number":230,"context_line":"                {\"message\": e, \"node\": task.node.uuid}"},{"line_number":231,"context_line":"            )"},{"line_number":232,"context_line":"            raise exception.IronicException("},{"line_number":233,"context_line":"                _(\"Failed to get server profile from OneView appliance.\""},{"line_number":234,"context_line":"                  \" Node: %s\") % task.node.uuid"},{"line_number":235,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_b70550c3","line":232,"updated":"2015-10-06 18:05:11.000000000","message":"Yeah, we really haven\u0027t thought about that but it totally makes sense. I just created an OneViewError exception which inherits IronicException and it looks better. Thanks for the tip!","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":"from oslo_utils import importutils"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_0975e496","line":16,"updated":"2015-10-07 10:22:13.000000000","message":"nit: might be better to leave a new line above.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":"from oslo_utils import importutils"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_f8f2a2d1","line":16,"in_reply_to":"7a2fa921_0975e496","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                                     \"from. Required.\"),"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"REQUIRED_ON_PROPERTIES \u003d {"},{"line_number":61,"context_line":"    \u0027server_hardware_type_uri\u0027: _(\"Server Hardware Type URI. Required.\"),"},{"line_number":62,"context_line":"}"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_69b5782f","line":60,"updated":"2015-10-07 10:22:13.000000000","message":"Some parameters on driver_info. Some on properties. Might be good to indicate where each should be updated.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                                     \"from. Required.\"),"},{"line_number":58,"context_line":"}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"REQUIRED_ON_PROPERTIES \u003d {"},{"line_number":61,"context_line":"    \u0027server_hardware_type_uri\u0027: _(\"Server Hardware Type URI. Required.\"),"},{"line_number":62,"context_line":"}"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_edc5f48d","line":60,"in_reply_to":"7a2fa921_69b5782f","updated":"2015-10-07 20:10:30.000000000","message":"I didtn\u0027t get it. The names on the variables aren\u0027t sufficient?","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"COMMON_PROPERTIES.update(OPTIONAL_ON_PROPERTIES)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def get_oneview_client():"},{"line_number":75,"context_line":"    \"\"\"Generates an instance of the OneView client"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    Generates an instance of the OneView client using the imported"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_47bf43fb","line":74,"updated":"2015-10-07 10:22:13.000000000","message":"I think this lacks test case.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"COMMON_PROPERTIES.update(OPTIONAL_ON_PROPERTIES)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def get_oneview_client():"},{"line_number":75,"context_line":"    \"\"\"Generates an instance of the OneView client"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    Generates an instance of the OneView client using the imported"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_ff45acb2","line":74,"in_reply_to":"7a2fa921_47bf43fb","updated":"2015-10-07 20:10:30.000000000","message":"This method only instantiates the python-oneviewclient. Since it is a external lib, I don\u0027t see value in doing tests for it on Ironic.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    namespace exist and are not empty."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    :param: node: node object to be verified"},{"line_number":101,"context_line":"    :raises: InvalidParameterValue if required node capabilities and/or"},{"line_number":102,"context_line":"    driver_info are malformed or missing"},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"#     try:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_c9e7ece2","line":101,"updated":"2015-10-07 10:22:13.000000000","message":"and MissingParameterValue as well.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    namespace exist and are not empty."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    :param: node: node object to be verified"},{"line_number":101,"context_line":"    :raises: InvalidParameterValue if required node capabilities and/or"},{"line_number":102,"context_line":"    driver_info are malformed or missing"},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"#     try:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_7f2afc2d","line":101,"in_reply_to":"7a2fa921_c9e7ece2","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :raises: InvalidParameterValue if required node capabilities and/or"},{"line_number":102,"context_line":"    driver_info are malformed or missing"},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"#     try:"},{"line_number":105,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("},{"line_number":106,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":107,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_c9828c00","line":104,"updated":"2015-10-07 10:22:13.000000000","message":"Please remove the commented code if not required.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :raises: InvalidParameterValue if required node capabilities and/or"},{"line_number":102,"context_line":"    driver_info are malformed or missing"},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"#     try:"},{"line_number":105,"context_line":"    capabilities_dict \u003d utils.capabilities_to_dict("},{"line_number":106,"context_line":"        node.properties.get(\u0027capabilities\u0027, \u0027\u0027)"},{"line_number":107,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_1f22e852","line":104,"in_reply_to":"7a2fa921_c9828c00","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    return oneview_info"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def validate_oneview_resources_compatibility(task):"},{"line_number":152,"context_line":"    \"\"\"Validates if the node configuration is consistent with OneView"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    This method calls python-oneviewclient functions to validate if the node"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_075f0be6","line":151,"updated":"2015-10-07 10:22:13.000000000","message":"I think this lacks test case. Oh wait a min, I think this is being asserted two times in test_power and test_management.py. Why not just have a test case in test_common and then mock this method in test_power and test_management ?","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    return oneview_info"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def validate_oneview_resources_compatibility(task):"},{"line_number":152,"context_line":"    \"\"\"Validates if the node configuration is consistent with OneView"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    This method calls python-oneviewclient functions to validate if the node"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_5ddaa879","line":151,"in_reply_to":"7a2fa921_075f0be6","updated":"2015-10-07 20:10:30.000000000","message":"Good catch.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    return power_states_map.get(power_state, states.ERROR)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def _verify_node_info(node_namespace, node_info_dict, info_required):"},{"line_number":203,"context_line":"    missing_keys \u003d set(info_required) - set(node_info_dict)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    if missing_keys:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_a92150b6","line":202,"updated":"2015-10-07 10:22:13.000000000","message":"A one line docstring might be good.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    return power_states_map.get(power_state, states.ERROR)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"def _verify_node_info(node_namespace, node_info_dict, info_required):"},{"line_number":203,"context_line":"    missing_keys \u003d set(info_required) - set(node_info_dict)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    if missing_keys:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_3fcec45a","line":202,"in_reply_to":"7a2fa921_a92150b6","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        )"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"def node_has_server_profile(func):"},{"line_number":226,"context_line":"    def inner(*args, **kwargs):"},{"line_number":227,"context_line":"        task \u003d args[1]"},{"line_number":228,"context_line":"        oneview_info \u003d get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_4930bc01","line":225,"updated":"2015-10-07 10:22:13.000000000","message":"A one line docstring might be good.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        )"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"def node_has_server_profile(func):"},{"line_number":226,"context_line":"    def inner(*args, **kwargs):"},{"line_number":227,"context_line":"        task \u003d args[1]"},{"line_number":228,"context_line":"        oneview_info \u003d get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_9fdef80f","line":225,"in_reply_to":"7a2fa921_4930bc01","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        except oneview_error.OneViewException as oneview_exc:"},{"line_number":235,"context_line":"            LOG.error("},{"line_number":236,"context_line":"                _LE(\"Failed to get server profile from OneView appliance for\""},{"line_number":237,"context_line":"                    \"node $(node)s. Error: $(message)s\"),"},{"line_number":238,"context_line":"                {\"node\": task.node.uuid, \"message\": oneview_exc}"},{"line_number":239,"context_line":"            )"},{"line_number":240,"context_line":"            raise exception.OneViewError(error\u003doneview_exc)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_ac0f1e2d","line":237,"updated":"2015-10-07 10:22:13.000000000","message":"%(node)s, %(message)s","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        except oneview_error.OneViewException as oneview_exc:"},{"line_number":235,"context_line":"            LOG.error("},{"line_number":236,"context_line":"                _LE(\"Failed to get server profile from OneView appliance for\""},{"line_number":237,"context_line":"                    \"node $(node)s. Error: $(message)s\"),"},{"line_number":238,"context_line":"                {\"node\": task.node.uuid, \"message\": oneview_exc}"},{"line_number":239,"context_line":"            )"},{"line_number":240,"context_line":"            raise exception.OneViewError(error\u003doneview_exc)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_7febdcb0","line":237,"in_reply_to":"7a2fa921_ac0f1e2d","updated":"2015-10-07 20:10:30.000000000","message":"Got it. s/$/%/","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"77104758928e94abeb633d6f6aeb0e78c48163d6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003dNone,"},{"line_number":46,"context_line":"               help\u003d_(\u0027Path to CA certificate\u0027)),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027max_polling_attempts\u0027,"},{"line_number":48,"context_line":"               default\u003d20,"},{"line_number":49,"context_line":"               help\u003d_(\u0027Max connection retries to check changes on OneView\u0027)),"},{"line_number":50,"context_line":"]"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_3529ea37","line":48,"updated":"2015-10-08 03:11:31.000000000","message":"This seems to me like a pretty high number to be a sane production default. Is this high of a retry count really necessary?","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003dNone,"},{"line_number":46,"context_line":"               help\u003d_(\u0027Path to CA certificate\u0027)),"},{"line_number":47,"context_line":"    cfg.IntOpt(\u0027max_polling_attempts\u0027,"},{"line_number":48,"context_line":"               default\u003d20,"},{"line_number":49,"context_line":"               help\u003d_(\u0027Max connection retries to check changes on OneView\u0027)),"},{"line_number":50,"context_line":"]"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_ff4b2f85","line":48,"in_reply_to":"7a2fa921_3529ea37","updated":"2015-10-08 21:59:22.000000000","message":"Put 12 attempts. Times 10sec will be something ~2min.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"77104758928e94abeb633d6f6aeb0e78c48163d6","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def get_oneview_client():"},{"line_number":76,"context_line":"    \"\"\"Generates an instance of the OneView client"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    Generates an instance of the OneView client using the imported"},{"line_number":79,"context_line":"    oneview_client library."}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_35e00afa","line":76,"updated":"2015-10-08 03:11:31.000000000","message":"Nit if you spin another patchset; this should end with a period.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def get_oneview_client():"},{"line_number":76,"context_line":"    \"\"\"Generates an instance of the OneView client"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    Generates an instance of the OneView client using the imported"},{"line_number":79,"context_line":"    oneview_client library."}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_e0a87522","line":76,"in_reply_to":"7a2fa921_35e00afa","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"77104758928e94abeb633d6f6aeb0e78c48163d6","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"def get_oneview_info(node):"},{"line_number":119,"context_line":"    \"\"\"Gets OneView information from the node"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    :param: node: node object to get information from"},{"line_number":122,"context_line":"    :returns: a dictionary containing:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_75c1a253","line":119,"updated":"2015-10-08 03:11:31.000000000","message":"Ditto on the period.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"def get_oneview_info(node):"},{"line_number":119,"context_line":"    \"\"\"Gets OneView information from the node"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    :param: node: node object to get information from"},{"line_number":122,"context_line":"    :returns: a dictionary containing:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_606b05f2","line":119,"in_reply_to":"7a2fa921_75c1a253","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"77104758928e94abeb633d6f6aeb0e78c48163d6","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def validate_oneview_resources_compatibility(task):"},{"line_number":152,"context_line":"    \"\"\"Validates if the node configuration is consistent with OneView"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    This method calls python-oneviewclient functions to validate if the node"},{"line_number":155,"context_line":"    configuration is consistent with the OneView resources it represents,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_15b2ae06","line":152,"updated":"2015-10-08 03:11:31.000000000","message":"Ditto.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def validate_oneview_resources_compatibility(task):"},{"line_number":152,"context_line":"    \"\"\"Validates if the node configuration is consistent with OneView"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    This method calls python-oneviewclient functions to validate if the node"},{"line_number":155,"context_line":"    configuration is consistent with the OneView resources it represents,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_207aedbd","line":152,"in_reply_to":"7a2fa921_15b2ae06","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"77104758928e94abeb633d6f6aeb0e78c48163d6","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"def _verify_node_info(node_namespace, node_info_dict, info_required):"},{"line_number":208,"context_line":"    \"\"\"Verify if info_required is present in node_namespace of the node info"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    \"\"\""},{"line_number":211,"context_line":"    missing_keys \u003d set(info_required) - set(node_info_dict)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_b51bbac9","line":208,"updated":"2015-10-08 03:11:31.000000000","message":"Ditto.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"def _verify_node_info(node_namespace, node_info_dict, info_required):"},{"line_number":208,"context_line":"    \"\"\"Verify if info_required is present in node_namespace of the node info"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    \"\"\""},{"line_number":211,"context_line":"    missing_keys \u003d set(info_required) - set(node_info_dict)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_e07f15a9","line":208,"in_reply_to":"7a2fa921_b51bbac9","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"77104758928e94abeb633d6f6aeb0e78c48163d6","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def node_has_server_profile(func):"},{"line_number":234,"context_line":"    \"\"\"Checks if the node\u0027s Server Hardware as a Server Profile associated"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    \"\"\""},{"line_number":237,"context_line":"    def inner(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_7580c2c0","line":234,"updated":"2015-10-08 03:11:31.000000000","message":"Ditto","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"def node_has_server_profile(func):"},{"line_number":234,"context_line":"    \"\"\"Checks if the node\u0027s Server Hardware as a Server Profile associated"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    \"\"\""},{"line_number":237,"context_line":"    def inner(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_007d71b0","line":234,"in_reply_to":"7a2fa921_7580c2c0","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d7c98f5bb478f255fb2cde985557a8e1b224f137","unresolved":false,"context_lines":[{"line_number":36,"context_line":"               help\u003d_(\u0027URL where OneView is available\u0027)),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":38,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027allow_insecure_connections\u0027,"},{"line_number":42,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":40,"id":"7a2fa921_d3dad94a","line":39,"updated":"2015-10-09 01:06:42.000000000","message":"secret\u003dTrue,","commit_id":"e93fe227e078c32ad337d2c38f533bcc5c3562d5"},{"author":{"_account_id":14891,"name":"Lilia Sampaio","email":"liliars@lsd.ufcg.edu.br","username":"liliars"},"change_message_id":"716980f8c877b6f8f2b3a797a58057f19bf582b1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"               help\u003d_(\u0027URL where OneView is available\u0027)),"},{"line_number":37,"context_line":"    cfg.StrOpt(\u0027username\u0027,"},{"line_number":38,"context_line":"               help\u003d_(\u0027OneView username to be used\u0027)),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027password\u0027,"},{"line_number":40,"context_line":"               help\u003d_(\u0027OneView password to be used\u0027)),"},{"line_number":41,"context_line":"    cfg.BoolOpt(\u0027allow_insecure_connections\u0027,"},{"line_number":42,"context_line":"                default\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":40,"id":"7a2fa921_902e7ea3","line":39,"in_reply_to":"7a2fa921_d3dad94a","updated":"2015-10-09 15:41:45.000000000","message":"Nice reminder, thanks John!","commit_id":"e93fe227e078c32ad337d2c38f533bcc5c3562d5"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        msg \u003d (_(\"Error validating node resources with OneView: %s\")"},{"line_number":185,"context_line":"               % oneview_exc)"},{"line_number":186,"context_line":"        LOG.error(msg)"},{"line_number":187,"context_line":"        raise exception.OneViewError(msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"def translate_oneview_power_state(power_state):"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_78761d07","line":187,"updated":"2015-10-09 17:20:53.000000000","message":"Should it be raise exception.OneViewError(error\u003dmsg)?","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        msg \u003d (_(\"Error validating node resources with OneView: %s\")"},{"line_number":185,"context_line":"               % oneview_exc)"},{"line_number":186,"context_line":"        LOG.error(msg)"},{"line_number":187,"context_line":"        raise exception.OneViewError(msg)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"def translate_oneview_power_state(power_state):"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_a6f6d25a","line":187,"in_reply_to":"7a2fa921_78761d07","updated":"2015-10-09 18:14:50.000000000","message":"Done","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"}],"ironic/drivers/modules/oneview/driver_oneview_exceptions.py":[{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"7ba71b8c78ed4bc9124a97c5e4524c0e01963806","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class OneViewTaskError(exception.IronicException):"},{"line_number":59,"context_line":"    message \u003d _(\"The task for this action in OneView returnet an error state\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa1b9901_f9f8b77e","line":59,"updated":"2015-08-17 22:56:36.000000000","message":"s/returnet/returned/","commit_id":"35d9bea5bc462b7b35acc290ed4903dbbd35c95c"},{"author":{"_account_id":14891,"name":"Lilia Sampaio","email":"liliars@lsd.ufcg.edu.br","username":"liliars"},"change_message_id":"edcbec52d0db1b8cf973319d70bff62eb6537c13","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class OneViewTaskError(exception.IronicException):"},{"line_number":59,"context_line":"    message \u003d _(\"The task for this action in OneView returnet an error state\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa1b9901_e526a867","line":59,"in_reply_to":"fa1b9901_f9f8b77e","updated":"2015-08-18 13:39:29.000000000","message":"Done","commit_id":"35d9bea5bc462b7b35acc290ed4903dbbd35c95c"}],"ironic/drivers/modules/oneview/exceptions.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa1b9901_0695c9e2","updated":"2015-08-24 22:42:24.000000000","message":"Why aren\u0027t all of these going into ironic/common/exceptions.py?\n\nI couldn\u0027t find any other drivers defining their exceptions outside of common.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa1b9901_91956b34","in_reply_to":"fa1b9901_0695c9e2","updated":"2015-08-25 16:14:26.000000000","message":"In fact, we checked and, with few ajustments, this whole exception class can be used only in what now is called python-oneviewclient module. We\u0027ll move this whole module.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class OneViewNotAuthorizedException(exception.IronicException):"},{"line_number":24,"context_line":"    message \u003d _(\"Unauthorized access to OneView. Check credentials in\""},{"line_number":25,"context_line":"                \" ironic.conf.\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class OneViewResourceNotFoundError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_3b5811fa","line":25,"updated":"2015-08-25 10:28:00.000000000","message":"s/ironic.conf/ironic configuration file\n\nWe can pass a \"--config-file\" parameter when starting the service so not necessarily it will be called ironic.conf.\n\ne.g to start the API service\n\n$ ironic-api -v -d --config-file etc/ironic/blah.conf","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class OneViewNotAuthorizedException(exception.IronicException):"},{"line_number":24,"context_line":"    message \u003d _(\"Unauthorized access to OneView. Check credentials in\""},{"line_number":25,"context_line":"                \" ironic.conf.\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class OneViewResourceNotFoundError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_aaecbfbb","line":25,"in_reply_to":"fa1b9901_3b5811fa","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class OneViewResourceNotFoundError(exception.IronicException):"},{"line_number":29,"context_line":"    message \u003d _(\"Resource not Found in OneView\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OneViewServerProfileTemplateError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_66a5a545","line":29,"updated":"2015-08-24 22:42:24.000000000","message":"What resource?  I would think that information should be displayed.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class OneViewResourceNotFoundError(exception.IronicException):"},{"line_number":29,"context_line":"    message \u003d _(\"Resource not Found in OneView\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OneViewServerProfileTemplateError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_14dce971","line":29,"in_reply_to":"fa1b9901_66a5a545","updated":"2015-08-25 16:14:26.000000000","message":"We intend to overwrite the default message to be more specific on python-oneviewclient","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OneViewServerProfileTemplateError(exception.IronicException):"},{"line_number":33,"context_line":"    message \u003d _(\"Server Profile Template not found into driver_info\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class OneViewServerProfileCloneError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c69ef106","line":33,"updated":"2015-08-24 22:42:24.000000000","message":"s/into/in/","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OneViewServerProfileTemplateError(exception.IronicException):"},{"line_number":33,"context_line":"    message \u003d _(\"Server Profile Template not found into driver_info\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class OneViewServerProfileCloneError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_0a328b5e","line":33,"in_reply_to":"fa1b9901_c69ef106","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OneViewServerProfileTemplateError(exception.IronicException):"},{"line_number":33,"context_line":"    message \u003d _(\"Server Profile Template not found into driver_info\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class OneViewServerProfileCloneError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_fbddb970","line":33,"in_reply_to":"fa1b9901_c69ef106","updated":"2015-08-25 10:28:00.000000000","message":"in the node\u0027s driver_info","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OneViewServerProfileTemplateError(exception.IronicException):"},{"line_number":33,"context_line":"    message \u003d _(\"Server Profile Template not found into driver_info\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class OneViewServerProfileCloneError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_4a13a3b8","line":33,"in_reply_to":"fa1b9901_fbddb970","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class OneViewMaxRetriesExceededError(exception.IronicException):"},{"line_number":41,"context_line":"    message \u003d _(\"Max connection retries to OneView exceeded\")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class OneViewBootDeviceInvalidError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c6b5917e","line":41,"updated":"2015-08-24 22:42:24.000000000","message":"Should the amount of retries be specified?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class OneViewMaxRetriesExceededError(exception.IronicException):"},{"line_number":41,"context_line":"    message \u003d _(\"Max connection retries to OneView exceeded\")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class OneViewBootDeviceInvalidError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_74a205b0","line":41,"in_reply_to":"fa1b9901_c6b5917e","updated":"2015-08-25 16:14:26.000000000","message":"Will do.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class OneViewServerProfileAssociatedError(exception.IronicException):"},{"line_number":49,"context_line":"    message \u003d _(\"There is no Server Profile associated to this Server\""},{"line_number":50,"context_line":"                \" Hardware\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_264d6d99","line":49,"updated":"2015-08-24 22:42:24.000000000","message":"s/to this/with this/","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class OneViewServerProfileAssociatedError(exception.IronicException):"},{"line_number":49,"context_line":"    message \u003d _(\"There is no Server Profile associated to this Server\""},{"line_number":50,"context_line":"                \" Hardware\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_0ace0b2d","line":49,"in_reply_to":"fa1b9901_264d6d99","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class OneViewErrorStateSettingPowerState(exception.IronicException):"},{"line_number":54,"context_line":"    message \u003d _(\"Get Error State in OneView trying to set power state of \""},{"line_number":55,"context_line":"                \"Server Hardware\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c66cb10a","line":54,"updated":"2015-08-24 22:42:24.000000000","message":"I don\u0027t understand this message.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"class OneViewErrorStateSettingPowerState(exception.IronicException):"},{"line_number":54,"context_line":"    message \u003d _(\"Get Error State in OneView trying to set power state of \""},{"line_number":55,"context_line":"                \"Server Hardware\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_51dfd339","line":54,"in_reply_to":"fa1b9901_c66cb10a","updated":"2015-08-25 16:14:26.000000000","message":"We\u0027ll change that to  \"Server Hardware went to Error State when trying to change power state\"","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class OneViewTaskError(exception.IronicException):"},{"line_number":59,"context_line":"    message \u003d _(\"The task for this action in OneView returned an error state\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_4681818e","line":59,"updated":"2015-08-24 22:42:24.000000000","message":"What action?\n\nWhat error?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class OneViewTaskError(exception.IronicException):"},{"line_number":59,"context_line":"    message \u003d _(\"The task for this action in OneView returned an error state\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_7490c543","line":59,"in_reply_to":"fa1b9901_4681818e","updated":"2015-08-25 16:14:26.000000000","message":"We intend to overwrite this message as well. You think we should remove the message on exceptions that we intend to overwrite the message?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"}],"ironic/drivers/modules/oneview/management.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"BOOT_DEVICE_MAPPING_TO_OV \u003d {"},{"line_number":29,"context_line":"    boot_devices.DISK: \u0027HardDisk\u0027,"},{"line_number":30,"context_line":"    boot_devices.PXE: \u0027PXE\u0027,"},{"line_number":31,"context_line":"    boot_devices.CDROM: \u0027CD\u0027"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"BOOT_DEVICE_OV_TO_GENERIC \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c63a71e7","line":31,"updated":"2015-08-24 22:42:24.000000000","message":"nit: add trailing comma","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"BOOT_DEVICE_MAPPING_TO_OV \u003d {"},{"line_number":29,"context_line":"    boot_devices.DISK: \u0027HardDisk\u0027,"},{"line_number":30,"context_line":"    boot_devices.PXE: \u0027PXE\u0027,"},{"line_number":31,"context_line":"    boot_devices.CDROM: \u0027CD\u0027"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"BOOT_DEVICE_OV_TO_GENERIC \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_3e8551ce","line":31,"in_reply_to":"fa1b9901_c63a71e7","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        boot_order \u003d oneview_client.get_boot_order(driver_info)"},{"line_number":81,"context_line":"        boot_device \u003d {"},{"line_number":82,"context_line":"            \u0027boot_device\u0027: BOOT_DEVICE_OV_TO_GENERIC.get(boot_order[0]),"},{"line_number":83,"context_line":"            \u0027persistent\u0027: False"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        return boot_device"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_41fc0b3e","line":83,"updated":"2015-08-24 22:42:24.000000000","message":"nit: add trailing comma","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        boot_order \u003d oneview_client.get_boot_order(driver_info)"},{"line_number":81,"context_line":"        boot_device \u003d {"},{"line_number":82,"context_line":"            \u0027boot_device\u0027: BOOT_DEVICE_OV_TO_GENERIC.get(boot_order[0]),"},{"line_number":83,"context_line":"            \u0027persistent\u0027: False"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        return boot_device"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_1e808dbe","line":83,"in_reply_to":"fa1b9901_41fc0b3e","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7c402d9506d31386ec08aa468d9dae9f40766044","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        oneview_client.validate_node_server_profile_template("},{"line_number":67,"context_line":"            driver_info, node.uuid"},{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":71,"context_line":"        return list(sorted(BOOT_DEVICE_MAPPING_TO_OV.keys()))"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_e2da2517","line":68,"updated":"2015-09-02 13:33:17.000000000","message":"Which type of exception this is going to raise? Shouldn\u0027t we handle and convert those?\n\nWe expect this method to raise InvalidParameterValue or/and MissingParameterValue. Because we have a node-validate command that will call validate() for all interfaces[1] and we handle those.\n\n(Also, some docstrings would be good on this class\u0027s methods)\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L1400-L1406","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        oneview_client.validate_node_server_profile_template("},{"line_number":67,"context_line":"            driver_info, node.uuid"},{"line_number":68,"context_line":"        )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":71,"context_line":"        return list(sorted(BOOT_DEVICE_MAPPING_TO_OV.keys()))"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_a3aaaf17","line":68,"in_reply_to":"da20952f_e2da2517","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f94d9b7739fbf9713a4f6c253f98f1aa4d901408","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                _(\"Invalid boot device %s specified.\") % device)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        node_has_server_profile \u003d ("},{"line_number":81,"context_line":"            oneview_client.get_server_profile_from_hardware(driver_info)"},{"line_number":82,"context_line":"        )"},{"line_number":83,"context_line":"        if not node_has_server_profile:"},{"line_number":84,"context_line":"            raise exception.OperationNotPermitted("}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_eeec19f5","line":81,"updated":"2015-09-03 14:11:46.000000000","message":"Exceptions from oneview_client (if any) should be converted to Ironic exception.","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                _(\"Invalid boot device %s specified.\") % device)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        node_has_server_profile \u003d ("},{"line_number":81,"context_line":"            oneview_client.get_server_profile_from_hardware(driver_info)"},{"line_number":82,"context_line":"        )"},{"line_number":83,"context_line":"        if not node_has_server_profile:"},{"line_number":84,"context_line":"            raise exception.OperationNotPermitted("}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_3ed476bb","line":81,"in_reply_to":"da20952f_eeec19f5","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f94d9b7739fbf9713a4f6c253f98f1aa4d901408","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return boot_device"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def get_sensors_data(self, task):"},{"line_number":109,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_6e38093e","line":109,"updated":"2015-09-03 14:11:46.000000000","message":"Should raise NotImplementedError.","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        return boot_device"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def get_sensors_data(self, task):"},{"line_number":109,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_d74445b8","line":109,"in_reply_to":"da20952f_6e38093e","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        oneview_info \u003d common.get_oneview_info(node)"},{"line_number":71,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            oneview_client.validate_node_server_hardware("},{"line_number":74,"context_line":"                oneview_info, node.uuid, node.properties.get(\u0027memory_mb\u0027),"},{"line_number":75,"context_line":"                node.properties.get(\u0027cpus\u0027)"},{"line_number":76,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_8770a041","line":73,"updated":"2015-09-04 20:36:51.000000000","message":"Does it make sense to move this logic to oneview client, smth like oneview_client.validate_server_info? (A lot of function calls here :) )","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        oneview_info \u003d common.get_oneview_info(node)"},{"line_number":71,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            oneview_client.validate_node_server_hardware("},{"line_number":74,"context_line":"                oneview_info, node.uuid, node.properties.get(\u0027memory_mb\u0027),"},{"line_number":75,"context_line":"                node.properties.get(\u0027cpus\u0027)"},{"line_number":76,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_64fb7c48","line":73,"in_reply_to":"da20952f_8770a041","updated":"2015-09-09 17:15:18.000000000","message":"I think it\u0027s better to keep it like this, so we are more \"explicit\" about the validation workload of the driver. By putting it all in a method in the oneview_client we kinda lose this. So for now we prefer to make it more easy to understand, from a reader perspective, since the calls describe what the validation is about.","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            oneview_client.validate_node_server_profile_template(oneview_info,"},{"line_number":92,"context_line":"                                                                 node.uuid)"},{"line_number":93,"context_line":"        except Exception as e:"},{"line_number":94,"context_line":"            raise exception.InvalidParameterValue(e.message)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":97,"context_line":"        \"\"\"Get a list of the supported boot devices."}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_87f6605b","line":94,"updated":"2015-09-04 20:36:51.000000000","message":"six.text_type(e)","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            oneview_client.validate_node_server_profile_template(oneview_info,"},{"line_number":92,"context_line":"                                                                 node.uuid)"},{"line_number":93,"context_line":"        except Exception as e:"},{"line_number":94,"context_line":"            raise exception.InvalidParameterValue(e.message)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":97,"context_line":"        \"\"\"Get a list of the supported boot devices."}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_a11f4608","line":94,"in_reply_to":"da20952f_87f6605b","updated":"2015-09-09 17:15:18.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                  in :mod:`ironic.common.boot_devices`."},{"line_number":102,"context_line":"        \"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return list(sorted(BOOT_DEVICE_MAPPING_TO_OV.keys()))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":107,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_a727e410","line":104,"updated":"2015-09-04 20:36:51.000000000","message":"sorted(...) will be a list already, no need to convert.","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                  in :mod:`ironic.common.boot_devices`."},{"line_number":102,"context_line":"        \"\"\""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return list(sorted(BOOT_DEVICE_MAPPING_TO_OV.keys()))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":107,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_c11a7a18","line":104,"in_reply_to":"da20952f_a727e410","updated":"2015-09-09 17:15:18.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                           Default: False."},{"line_number":118,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":119,"context_line":"                 specified."},{"line_number":120,"context_line":"        :raises: IloOperationError on an error from IloClient library."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_c724580e","line":120,"updated":"2015-09-04 20:36:51.000000000","message":"Ilo?","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"e0778f10e8c15394f70e9907ef2cf6f238f5755c","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                           Default: False."},{"line_number":118,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":119,"context_line":"                 specified."},{"line_number":120,"context_line":"        :raises: IloOperationError on an error from IloClient library."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba15a1d1_ca74e8fe","line":120,"in_reply_to":"da20952f_811482e9","updated":"2015-09-14 17:29:17.000000000","message":"We need to point at the docstring the raising of OperationNotPermitted inside this method.","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                           Default: False."},{"line_number":118,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":119,"context_line":"                 specified."},{"line_number":120,"context_line":"        :raises: IloOperationError on an error from IloClient library."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_811482e9","line":120,"in_reply_to":"da20952f_c724580e","updated":"2015-09-09 17:15:18.000000000","message":"Removed that, probably missed it in a copy and paste. Thanks for noticing (:","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":136,"context_line":"        try:"},{"line_number":137,"context_line":"            node_has_server_profile \u003d ("},{"line_number":138,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":139,"context_line":"            )"},{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            LOG.error(e.message)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_a755a450","line":138,"updated":"2015-09-04 20:36:51.000000000","message":"Maybe introduce a decorator to check this?","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":139,"context_line":"            )"},{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            LOG.error(e.message)"},{"line_number":142,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":143,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_c76bf81c","line":141,"updated":"2015-09-04 20:36:51.000000000","message":"six.text_type(e)","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":139,"context_line":"            )"},{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            LOG.error(e.message)"},{"line_number":142,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":143,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_21d25635","line":141,"in_reply_to":"da20952f_c76bf81c","updated":"2015-09-09 17:15:18.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":147,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        LOG.debug(_(\"Setting boot device to %s\") % device)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        device_to_oneview \u003d BOOT_DEVICE_MAPPING_TO_OV.get(device)"},{"line_number":152,"context_line":"        oneview_client.set_boot_device(oneview_info, device_to_oneview)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_47660852","line":149,"updated":"2015-09-04 20:36:51.000000000","message":"s/%/,/","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"193ff8dc989470a56ecb53d2de328c3b75d59a2b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":147,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        LOG.debug(_(\"Setting boot device to %s\") % device)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        device_to_oneview \u003d BOOT_DEVICE_MAPPING_TO_OV.get(device)"},{"line_number":152,"context_line":"        oneview_client.set_boot_device(oneview_info, device_to_oneview)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba15a1d1_65e94d1a","line":149,"in_reply_to":"da20952f_47660852","updated":"2015-09-14 17:36:19.000000000","message":"The formatting doesn\u0027t works with comma AFAIK.","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":176,"context_line":"            )"},{"line_number":177,"context_line":"        except Exception as e:"},{"line_number":178,"context_line":"            LOG.error(e.message)"},{"line_number":179,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":180,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_e7cddc30","line":178,"updated":"2015-09-04 20:36:51.000000000","message":"ditto","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":176,"context_line":"            )"},{"line_number":177,"context_line":"        except Exception as e:"},{"line_number":178,"context_line":"            LOG.error(e.message)"},{"line_number":179,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":180,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_81eb22dc","line":178,"in_reply_to":"da20952f_e7cddc30","updated":"2015-09-09 17:15:18.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_9df92c83","line":18,"updated":"2015-09-28 07:05:43.000000000","message":"six is a third party module.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_c2150f9c","line":18,"in_reply_to":"9a1a9d01_9df92c83","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        resources in OneView"},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        node \u003d task.node"},{"line_number":67,"context_line":"        node_ports \u003d ports.list_by_node_id(task.context, node.id)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        common.parse_driver_info(node)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_7d4a18ae","line":66,"updated":"2015-09-28 07:05:43.000000000","message":"Same 30 lines of code as in power.py. Can we just put it into a common method ?","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        resources in OneView"},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        node \u003d task.node"},{"line_number":67,"context_line":"        node_ports \u003d ports.list_by_node_id(task.context, node.id)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        common.parse_driver_info(node)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_58a82b8d","line":66,"in_reply_to":"9a1a9d01_7d4a18ae","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        node \u003d task.node"},{"line_number":67,"context_line":"        node_ports \u003d ports.list_by_node_id(task.context, node.id)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        common.parse_driver_info(node)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1d619c39","line":67,"updated":"2015-09-28 07:05:43.000000000","message":"task.ports ?","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        node \u003d task.node"},{"line_number":67,"context_line":"        node_ports \u003d ports.list_by_node_id(task.context, node.id)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        common.parse_driver_info(node)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_9e5d4b17","line":67,"in_reply_to":"9a1a9d01_1d619c39","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            LOG.error(exc_message)"},{"line_number":93,"context_line":"            raise exception.InvalidParameterValue(exc_message)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":96,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1dc8bc21","line":95,"updated":"2015-09-28 07:05:43.000000000","message":"We need to take the task argument as well.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            LOG.error(exc_message)"},{"line_number":93,"context_line":"            raise exception.InvalidParameterValue(exc_message)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":96,"context_line":"        \"\"\"Get a list of the supported boot devices."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        :param task: a task from TaskManager."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_e1fcd0b9","line":95,"in_reply_to":"9a1a9d01_1dc8bc21","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            node_has_server_profile \u003d ("},{"line_number":132,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"        except Exception as e:"},{"line_number":135,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":136,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_9d260ccd","line":134,"updated":"2015-09-28 07:05:43.000000000","message":"Missing test cases for this path","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            node_has_server_profile \u003d ("},{"line_number":132,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"        except Exception as e:"},{"line_number":135,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":136,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_fb11d552","line":134,"in_reply_to":"9a1a9d01_9d260ccd","updated":"2015-09-30 20:58:39.000000000","message":"I think that this test case is important, but, once that the \"node_has_server_profile\" is returned from \"oneview_client.get_server_profile_from_hardware(oneview_info)\" and the oneview_client is a external library, we would mock it to raise the Exception. I\u0027m not seeing why this test should be on the driver side, and actually I think it is covered on python-oneviewclient tests. Maybe I\u0027m missing something, let me know if you disagree.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"11658cd65c8e73b27e686d410ba495c382f9b16c","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            node_has_server_profile \u003d ("},{"line_number":132,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"        except Exception as e:"},{"line_number":135,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":136,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_a2ba04bf","line":134,"in_reply_to":"9a1a9d01_fb11d552","updated":"2015-10-02 04:20:58.000000000","message":"Well, I am not sure about when this path is done, but what I meant to say is that no unit test covers this path now.  I think it should covered to prove that the code in this patch works.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"        except Exception as e:"},{"line_number":135,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":136,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_bdd750be","line":135,"updated":"2015-09-28 07:05:43.000000000","message":"Logging without node.uuid. Also need _LE()","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"        except Exception as e:"},{"line_number":135,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":136,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_db968c3e","line":135,"in_reply_to":"9a1a9d01_bdd750be","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if not node_has_server_profile:"},{"line_number":140,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":141,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        LOG.debug(_(\"Setting boot device to %s\") % device)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_7d2bf894","line":140,"updated":"2015-09-28 07:05:43.000000000","message":"Missing test cases for this path.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if not node_has_server_profile:"},{"line_number":140,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":141,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        LOG.debug(_(\"Setting boot device to %s\") % device)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_6e617bd2","line":140,"in_reply_to":"9a1a9d01_7d2bf894","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":141,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        LOG.debug(_(\"Setting boot device to %s\") % device)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        device_to_oneview \u003d BOOT_DEVICE_MAPPING_TO_OV.get(device)"},{"line_number":146,"context_line":"        oneview_client.set_boot_device(oneview_info, device_to_oneview)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1def5c88","line":143,"updated":"2015-09-28 07:05:43.000000000","message":"Need to log node.uuid","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":141,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        LOG.debug(_(\"Setting boot device to %s\") % device)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        device_to_oneview \u003d BOOT_DEVICE_MAPPING_TO_OV.get(device)"},{"line_number":146,"context_line":"        oneview_client.set_boot_device(oneview_info, device_to_oneview)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1bc4045d","line":143,"in_reply_to":"9a1a9d01_1def5c88","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":170,"context_line":"            )"},{"line_number":171,"context_line":"        except Exception as e:"},{"line_number":172,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":173,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_3df26070","line":172,"updated":"2015-09-28 07:05:43.000000000","message":"Logging without node.uuid. Also need _LE()","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":170,"context_line":"            )"},{"line_number":171,"context_line":"        except Exception as e:"},{"line_number":172,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":173,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5bcefc82","line":172,"in_reply_to":"9a1a9d01_3df26070","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            )"},{"line_number":171,"context_line":"        except Exception as e:"},{"line_number":172,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":173,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1d967cf0","line":173,"updated":"2015-09-28 07:05:43.000000000","message":"Better to log node.uuid","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            )"},{"line_number":171,"context_line":"        except Exception as e:"},{"line_number":172,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":173,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5b027c3e","line":173,"in_reply_to":"9a1a9d01_1d967cf0","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        except Exception as e:"},{"line_number":172,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":173,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"},{"line_number":177,"context_line":"            raise exception.OperationNotPermitted("}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5dfdd438","line":174,"updated":"2015-09-28 07:05:43.000000000","message":"indentation.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        except Exception as e:"},{"line_number":172,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":173,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"},{"line_number":177,"context_line":"            raise exception.OperationNotPermitted("}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_3b054845","line":174,"in_reply_to":"9a1a9d01_5dfdd438","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"},{"line_number":177,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":178,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        boot_order \u003d oneview_client.get_boot_order(oneview_info)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_3d1ca076","line":177,"updated":"2015-09-28 07:05:43.000000000","message":"Missing test cases for this path.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                                            \"from OneView appliance\"))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"},{"line_number":177,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":178,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        boot_order \u003d oneview_client.get_boot_order(oneview_info)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_f6c24c84","line":177,"in_reply_to":"9a1a9d01_3d1ca076","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"},{"line_number":177,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":178,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        boot_order \u003d oneview_client.get_boot_order(oneview_info)"},{"line_number":181,"context_line":"        primary_device \u003d boot_order[0]"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_7df8d849","line":178,"updated":"2015-09-28 07:05:43.000000000","message":"Better to log node.uuid","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if not node_has_server_profile:"},{"line_number":177,"context_line":"            raise exception.OperationNotPermitted("},{"line_number":178,"context_line":"                _(\"A Server Profile is not associated with the node.\"))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        boot_order \u003d oneview_client.get_boot_order(oneview_info)"},{"line_number":181,"context_line":"        primary_device \u003d boot_order[0]"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1bf88448","line":178,"in_reply_to":"9a1a9d01_7df8d849","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        primary_device \u003d boot_order[0]"},{"line_number":182,"context_line":"        if primary_device not in BOOT_DEVICE_OV_TO_GENERIC.keys():"},{"line_number":183,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":184,"context_line":"                _(\"Unsupported boot device: %s\") % primary_device"},{"line_number":185,"context_line":"            )"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        boot_device \u003d {"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_3d990020","line":184,"updated":"2015-09-28 07:05:43.000000000","message":"Better to log node.uuid","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        primary_device \u003d boot_order[0]"},{"line_number":182,"context_line":"        if primary_device not in BOOT_DEVICE_OV_TO_GENERIC.keys():"},{"line_number":183,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":184,"context_line":"                _(\"Unsupported boot device: %s\") % primary_device"},{"line_number":185,"context_line":"            )"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        boot_device \u003d {"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_7b9d0009","line":184,"in_reply_to":"9a1a9d01_3d990020","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        boot_device \u003d {"},{"line_number":188,"context_line":"            \u0027boot_device\u0027: BOOT_DEVICE_OV_TO_GENERIC.get(primary_device),"},{"line_number":189,"context_line":"            \u0027persistent\u0027: False,"},{"line_number":190,"context_line":"        }"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        return boot_device"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_9d8a8cbe","line":189,"updated":"2015-09-28 07:05:43.000000000","message":"Question: Can\u0027t one view client set boot device persistently ?","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        boot_device \u003d {"},{"line_number":188,"context_line":"            \u0027boot_device\u0027: BOOT_DEVICE_OV_TO_GENERIC.get(primary_device),"},{"line_number":189,"context_line":"            \u0027persistent\u0027: False,"},{"line_number":190,"context_line":"        }"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        return boot_device"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_70d64450","line":189,"in_reply_to":"9a1a9d01_9d8a8cbe","updated":"2015-09-30 20:58:39.000000000","message":"That\u0027s true, i don\u0027t know why the False was returned, thanks. Done.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        Not implemented by this driver."},{"line_number":198,"context_line":"        :param task: a TaskManager instance."},{"line_number":199,"context_line":"        \"\"\""},{"line_number":200,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_9d0dac40","line":200,"updated":"2015-09-28 07:05:43.000000000","message":"May be add a single test case to check if we get this exception. To make sure there are no typos or anything.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        Not implemented by this driver."},{"line_number":198,"context_line":"        :param task: a TaskManager instance."},{"line_number":199,"context_line":"        \"\"\""},{"line_number":200,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_d0d4f0ec","line":200,"in_reply_to":"9a1a9d01_9d0dac40","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"1ff3ed6d4854f9a2adef2eff9a7a972685405ead","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_22ccc334","line":67,"updated":"2015-10-05 20:10:27.000000000","message":"Not a big fan of catching Exception. would be good to have more granularity.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_91cacb4e","line":67,"updated":"2015-10-05 18:39:39.000000000","message":"there are places throughout the code where you do except Exception, maybe better to add some base class to all oneview exceptions in oneviewclient and catch it instead of Exception.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"82b9924a86e7ae0624dd5db4e7c4ad40d4cb6a92","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_a26f7391","line":67,"in_reply_to":"7a2fa921_474b115a","updated":"2015-10-05 20:00:55.000000000","message":"Looking at how it is done in other drivers, you can just mock out this one new exception in third party driver mocks (e.g. look at irmc driver)","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_474b115a","line":67,"in_reply_to":"7a2fa921_91cacb4e","updated":"2015-10-05 19:24:47.000000000","message":"I think that by doing it we would let the code attached to have python-oneviewclient installed, even when the Ironic user is not using the driver. Thoughts?","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"},{"line_number":71,"context_line":"            LOG.error(msg)"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_d1e603e8","line":70,"updated":"2015-10-05 18:39:39.000000000","message":"ditto, messages passed to exception constructor should not use _LE, just _, use e instead of e.message.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"1ff3ed6d4854f9a2adef2eff9a7a972685405ead","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"},{"line_number":71,"context_line":"            LOG.error(msg)"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_e25ecb75","line":70,"in_reply_to":"7a2fa921_8c3f1025","updated":"2015-10-05 20:10:27.000000000","message":"Recommend to do:\n\n six.text_type(e)","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"},{"line_number":71,"context_line":"            LOG.error(msg)"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_8c3f1025","line":70,"in_reply_to":"7a2fa921_d1e603e8","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"1ff3ed6d4854f9a2adef2eff9a7a972685405ead","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"},{"line_number":71,"context_line":"            LOG.error(msg)"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_2265a344","line":70,"in_reply_to":"7a2fa921_d1e603e8","updated":"2015-10-05 20:10:27.000000000","message":"Vladyslav,\n\nhttps://review.openstack.org/215362\n\nOnce that patch gets merged it should catch e.message usage in the py34 tests.\n\nJohn","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"960866669f0096fe2c15b10c66740452eadd38bc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":69,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":70,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"},{"line_number":71,"context_line":"            LOG.error(msg)"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_8ab60d3c","line":70,"in_reply_to":"7a2fa921_e25ecb75","updated":"2015-10-05 21:16:09.000000000","message":"According to [1], we shouldn\u0027t be using six.text_type on translatable strings.\n\n[1] http://docs.openstack.org/developer/oslo.i18n/guidelines.html#avoid-forcing-the-translation-of-translatable-variables","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            node_has_server_profile \u003d ("},{"line_number":111,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        except Exception as e:"},{"line_number":114,"context_line":"            exc_message \u003d (_LE(\"%(message)s Node: %(node)s\") %"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_91f96bcb","line":111,"updated":"2015-10-05 18:39:39.000000000","message":"Might be good to move this validation to decorator, it seems almost the same in get_boot_device and set_boot_device","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            node_has_server_profile \u003d ("},{"line_number":111,"context_line":"                oneview_client.get_server_profile_from_hardware(oneview_info)"},{"line_number":112,"context_line":"            )"},{"line_number":113,"context_line":"        except Exception as e:"},{"line_number":114,"context_line":"            exc_message \u003d (_LE(\"%(message)s Node: %(node)s\") %"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_c71f215a","line":111,"in_reply_to":"7a2fa921_91f96bcb","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        if not node_has_server_profile:"},{"line_number":123,"context_line":"            exc_message \u003d _LE(\"A Server Profile is not associated \""},{"line_number":124,"context_line":"                              \"with the node.\")"},{"line_number":125,"context_line":"            e \u003d exception.OperationNotPermitted()"},{"line_number":126,"context_line":"            e.message \u003d exc_message"},{"line_number":127,"context_line":"            raise e"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_31a097f4","line":125,"updated":"2015-10-05 18:39:39.000000000","message":"This is strange :) Why not use raise directly, e.g. raise exception.OperationNotPermitted(_(\"A Server Profile is not associated with the node.\"))?\n\nAlso, exception messages should be translated only with _\n\nIt appears to be done this way on L165","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        if not node_has_server_profile:"},{"line_number":123,"context_line":"            exc_message \u003d _LE(\"A Server Profile is not associated \""},{"line_number":124,"context_line":"                              \"with the node.\")"},{"line_number":125,"context_line":"            e \u003d exception.OperationNotPermitted()"},{"line_number":126,"context_line":"            e.message \u003d exc_message"},{"line_number":127,"context_line":"            raise e"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_0cb6a0dc","line":125,"in_reply_to":"7a2fa921_31a097f4","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            )"},{"line_number":158,"context_line":"        except Exception as e:"},{"line_number":159,"context_line":"            exc_message \u003d (_LE(\"%(message)s Node: %(node)s\") %"},{"line_number":160,"context_line":"                           {\"message\": e.message, \"node\": task.node.uuid})"},{"line_number":161,"context_line":"            LOG.error(exc_message)"},{"line_number":162,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":163,"context_line":"                                              \"from OneView appliance\"))"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_b66c9d09","line":160,"updated":"2015-10-05 18:39:39.000000000","message":"ditto","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            )"},{"line_number":158,"context_line":"        except Exception as e:"},{"line_number":159,"context_line":"            exc_message \u003d (_LE(\"%(message)s Node: %(node)s\") %"},{"line_number":160,"context_line":"                           {\"message\": e.message, \"node\": task.node.uuid})"},{"line_number":161,"context_line":"            LOG.error(exc_message)"},{"line_number":162,"context_line":"            raise exception.IronicException(_(\"Failed to get server profile \""},{"line_number":163,"context_line":"                                              \"from OneView appliance\"))"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_0c1220b5","line":160,"in_reply_to":"7a2fa921_b66c9d09","updated":"2015-10-05 19:24:47.000000000","message":"Done","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":66,"context_line":"        except Exception as e:"},{"line_number":67,"context_line":"            msg \u003d (_("},{"line_number":68,"context_line":"                \"Node %(node_uuid)s validation failed. Error: %(error_msg)s\")"},{"line_number":69,"context_line":"                % {\"node_uuid\": task.node.uuid, \"error_msg\": e}"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_2993355d","line":66,"updated":"2015-10-06 09:46:18.000000000","message":"some more granularity here would be good","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":66,"context_line":"        except Exception as e:"},{"line_number":67,"context_line":"            msg \u003d (_("},{"line_number":68,"context_line":"                \"Node %(node_uuid)s validation failed. Error: %(error_msg)s\")"},{"line_number":69,"context_line":"                % {\"node_uuid\": task.node.uuid, \"error_msg\": e}"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_17abe475","line":66,"in_reply_to":"7a2fa921_2993355d","updated":"2015-10-06 18:05:11.000000000","message":"I\u0027m going to indicate this is a OneView exception by using except OneViewException instead of just Exception.","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        :param task: a task from TaskManager."},{"line_number":60,"context_line":"        :raises: InvalidParameterValue if parameters set are inconsistent with"},{"line_number":61,"context_line":"        resources in OneView"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        common.verify_node_info(task.node)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_4c4a0ac7","line":61,"updated":"2015-10-07 10:22:13.000000000","message":"nit: indentation.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        :param task: a task from TaskManager."},{"line_number":60,"context_line":"        :raises: InvalidParameterValue if parameters set are inconsistent with"},{"line_number":61,"context_line":"        resources in OneView"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        common.verify_node_info(task.node)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_1f6ae8b3","line":61,"in_reply_to":"7a2fa921_4c4a0ac7","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                % {\"node_uuid\": task.node.uuid, \"error_msg\": oneview_exc}"},{"line_number":72,"context_line":"            )"},{"line_number":73,"context_line":"            LOG.error(msg)"},{"line_number":74,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def get_supported_boot_devices(self, task):"},{"line_number":77,"context_line":"        \"\"\"Gets a list of the supported boot devices."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_cc261a68","line":74,"updated":"2015-10-07 10:22:13.000000000","message":"Just wondering if this should be OneViewError instead because we don\u0027t know what happened internally in oneview.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                % {\"node_uuid\": task.node.uuid, \"error_msg\": oneview_exc}"},{"line_number":72,"context_line":"            )"},{"line_number":73,"context_line":"            LOG.error(msg)"},{"line_number":74,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def get_supported_boot_devices(self, task):"},{"line_number":77,"context_line":"        \"\"\"Gets a list of the supported boot devices."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_5ff4e0f0","line":74,"in_reply_to":"7a2fa921_cc261a68","updated":"2015-10-07 20:10:30.000000000","message":"ditto as in power interface. Shall raise an expected exception.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                  in :mod:`ironic.common.boot_devices`."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return sorted(BOOT_DEVICE_MAPPING_TO_OV.keys())"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":87,"context_line":"    @common.node_has_server_profile"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_e7b3efe7","line":84,"updated":"2015-10-07 10:22:13.000000000","message":"super nit: if sorted() was to ease out test case and sorting here doesn\u0027t make sense otherwise, better to sort in test case itself :)","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                 specified."},{"line_number":101,"context_line":"        :raises: OperationNotPermitted if the server has no server profile or"},{"line_number":102,"context_line":"                 if the server is already powered on."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_2ced4e25","line":103,"updated":"2015-10-07 10:22:13.000000000","message":"and raises OneViewError too","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                 specified."},{"line_number":101,"context_line":"        :raises: OperationNotPermitted if the server has no server profile or"},{"line_number":102,"context_line":"                 if the server is already powered on."},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_df6310db","line":103,"in_reply_to":"7a2fa921_2ced4e25","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        the node"},{"line_number":133,"context_line":"        :raises: InvalidParameterValue if the boot device is unknown"},{"line_number":134,"context_line":"        :raises: IronicException if the communication with OneView fails"},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"},{"line_number":138,"context_line":"        oneview_client \u003d common.get_oneview_client()"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_ccf37a09","line":135,"updated":"2015-10-07 10:22:13.000000000","message":"and raises OneViewError too","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        the node"},{"line_number":133,"context_line":"        :raises: InvalidParameterValue if the boot device is unknown"},{"line_number":134,"context_line":"        :raises: IronicException if the communication with OneView fails"},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"},{"line_number":138,"context_line":"        oneview_client \u003d common.get_oneview_client()"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_77922659","line":135,"in_reply_to":"7a2fa921_ccf37a09","updated":"2015-10-07 20:10:30.000000000","message":"Will wrap the sensible part in a OneViewError. Thanks.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise exception.OneViewError(msg)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        primary_device \u003d boot_order[0]"},{"line_number":153,"context_line":"        if primary_device not in BOOT_DEVICE_OV_TO_GENERIC.keys():"},{"line_number":154,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":155,"context_line":"                _(\"Unsupported boot Device %(device)s for Node: %(node)s\")"},{"line_number":156,"context_line":"                % {\"device\": primary_device, \"node\": task.node.uuid}"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_6f97783a","line":153,"updated":"2015-10-08 13:53:48.000000000","message":"Nit: can drop keys() here, \"thing in dict\" will only check against keys.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            raise exception.OneViewError(msg)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        primary_device \u003d boot_order[0]"},{"line_number":153,"context_line":"        if primary_device not in BOOT_DEVICE_OV_TO_GENERIC.keys():"},{"line_number":154,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":155,"context_line":"                _(\"Unsupported boot Device %(device)s for Node: %(node)s\")"},{"line_number":156,"context_line":"                % {\"device\": primary_device, \"node\": task.node.uuid}"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_4025a9be","line":153,"in_reply_to":"7a2fa921_6f97783a","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                _(\"Invalid boot device %s specified.\") % device)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        LOG.debug(\"Setting boot device to %(device)s for node %(node)s\""},{"line_number":108,"context_line":"                  % {\"device\": device, \"node\": task.node.uuid})"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            oneview_client \u003d common.get_oneview_client()"},{"line_number":111,"context_line":"            device_to_oneview \u003d BOOT_DEVICE_MAPPING_TO_OV.get(device)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_d875f1ca","line":108,"updated":"2015-10-09 17:20:53.000000000","message":"nit - use comma instead of % to not force substitution.","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                _(\"Invalid boot device %s specified.\") % device)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        LOG.debug(\"Setting boot device to %(device)s for node %(node)s\""},{"line_number":108,"context_line":"                  % {\"device\": device, \"node\": task.node.uuid})"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            oneview_client \u003d common.get_oneview_client()"},{"line_number":111,"context_line":"            device_to_oneview \u003d BOOT_DEVICE_MAPPING_TO_OV.get(device)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_c68c2edc","line":108,"in_reply_to":"7a2fa921_d875f1ca","updated":"2015-10-09 18:14:50.000000000","message":"Done","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                % oneview_exc"},{"line_number":117,"context_line":"            )"},{"line_number":118,"context_line":"            LOG.error(msg)"},{"line_number":119,"context_line":"            raise exception.OneViewError(msg)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @common.node_has_server_profile"},{"line_number":122,"context_line":"    def get_boot_device(self, task):"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_18ea8974","line":119,"updated":"2015-10-09 17:20:53.000000000","message":"ditto error\u003dmsg","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                % oneview_exc"},{"line_number":117,"context_line":"            )"},{"line_number":118,"context_line":"            LOG.error(msg)"},{"line_number":119,"context_line":"            raise exception.OneViewError(msg)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @common.node_has_server_profile"},{"line_number":122,"context_line":"    def get_boot_device(self, task):"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_e687eab2","line":119,"in_reply_to":"7a2fa921_18ea8974","updated":"2015-10-09 18:14:50.000000000","message":"Done","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"}],"ironic/drivers/modules/oneview/power.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from ironic.conductor import task_manager"},{"line_number":24,"context_line":"from ironic.drivers import base"},{"line_number":25,"context_line":"from ironic.drivers.modules.oneview import common"},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"oneview_client \u003d common.get_oneview_client()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_e10e7f8b","line":26,"updated":"2015-08-24 22:42:24.000000000","message":"This should be above.\n\n import oslo_log ...\n\n import ironic.common ....","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from ironic.conductor import task_manager"},{"line_number":24,"context_line":"from ironic.drivers import base"},{"line_number":25,"context_line":"from ironic.drivers.modules.oneview import common"},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"oneview_client \u003d common.get_oneview_client()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_bea4014b","line":26,"in_reply_to":"fa1b9901_e10e7f8b","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if state !\u003d power_state:"},{"line_number":62,"context_line":"            raise exception.PowerStateFailure(pstate\u003dpower_state)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        task.node.power_state \u003d power_state"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":67,"context_line":"    def reboot(self, task):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_1bcaed6e","line":64,"updated":"2015-08-25 10:28:00.000000000","message":"This is something that the conductor will do, not the driver.\n\nhttps://github.com/openstack/ironic/blob/master/ironic/conductor/utils.py#L122-L129","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if state !\u003d power_state:"},{"line_number":62,"context_line":"            raise exception.PowerStateFailure(pstate\u003dpower_state)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        task.node.power_state \u003d power_state"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":67,"context_line":"    def reboot(self, task):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_195427fc","line":64,"in_reply_to":"fa1b9901_1bcaed6e","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        while power_state \u003d\u003d \"PoweringOff\":"},{"line_number":73,"context_line":"            LOG.debug(\"Node %(node_uuid)s is powering off\","},{"line_number":74,"context_line":"                      {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":75,"context_line":"            power_state \u003d oneview_client.get_node_power_state(driver_info)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        LOG.info(_LI(\"Node %(node_uuid)s power state is %(power_state)s\"),"},{"line_number":78,"context_line":"                 {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_a14f27bd","line":75,"updated":"2015-08-24 22:42:24.000000000","message":"Won\u0027t this spew a lot of debug messages?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        while power_state \u003d\u003d \"PoweringOff\":"},{"line_number":73,"context_line":"            LOG.debug(\"Node %(node_uuid)s is powering off\","},{"line_number":74,"context_line":"                      {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":75,"context_line":"            power_state \u003d oneview_client.get_node_power_state(driver_info)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        LOG.info(_LI(\"Node %(node_uuid)s power state is %(power_state)s\"),"},{"line_number":78,"context_line":"                 {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_399b2b68","line":75,"in_reply_to":"fa1b9901_3bab318b","updated":"2015-08-25 16:14:26.000000000","message":"Answer above^","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        while power_state \u003d\u003d \"PoweringOff\":"},{"line_number":73,"context_line":"            LOG.debug(\"Node %(node_uuid)s is powering off\","},{"line_number":74,"context_line":"                      {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":75,"context_line":"            power_state \u003d oneview_client.get_node_power_state(driver_info)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        LOG.info(_LI(\"Node %(node_uuid)s power state is %(power_state)s\"),"},{"line_number":78,"context_line":"                 {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_3bab318b","line":75,"in_reply_to":"fa1b9901_a14f27bd","updated":"2015-08-25 10:28:00.000000000","message":"+1\n\nIt seems that it will flood the system asking for power state, perhaps we need a quick sleep here folks ?","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        while power_state \u003d\u003d \"PoweringOff\":"},{"line_number":73,"context_line":"            LOG.debug(\"Node %(node_uuid)s is powering off\","},{"line_number":74,"context_line":"                      {\u0027node_uuid\u0027: task.node.uuid})"},{"line_number":75,"context_line":"            power_state \u003d oneview_client.get_node_power_state(driver_info)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        LOG.info(_LI(\"Node %(node_uuid)s power state is %(power_state)s\"),"},{"line_number":78,"context_line":"                 {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_798e832f","line":75,"in_reply_to":"fa1b9901_a14f27bd","updated":"2015-08-25 16:14:26.000000000","message":"We implemented a facility on python-oneviewclient to check it the node power state has changed. We\u0027ll remove that checking here.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"7c402d9506d31386ec08aa468d9dae9f40766044","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        oneview_client.validate_node_server_profile_template("},{"line_number":61,"context_line":"            driver_info, node.uuid"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_power_state(self, task):"},{"line_number":65,"context_line":"        driver_info \u003d common.parse_driver_info(task.node)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_85f7b3f4","line":62,"updated":"2015-09-02 13:33:17.000000000","message":"ditto what type of exception this is going to raise? (See comment at management.py)","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        oneview_client.validate_node_server_profile_template("},{"line_number":61,"context_line":"            driver_info, node.uuid"},{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_power_state(self, task):"},{"line_number":65,"context_line":"        driver_info \u003d common.parse_driver_info(task.node)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_5e636a1a","line":62,"in_reply_to":"da20952f_85f7b3f4","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f94d9b7739fbf9713a4f6c253f98f1aa4d901408","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_power_state(self, task):"},{"line_number":65,"context_line":"        driver_info \u003d common.parse_driver_info(task.node)"},{"line_number":66,"context_line":"        return oneview_client.get_node_power_state(driver_info)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @task_manager.require_exclusive_lock"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_11fad2bd","line":65,"updated":"2015-09-03 14:11:46.000000000","message":"common.parse_driver_info() does validation, and I\u0027m not sure that it\u0027s 100% the same as validate l38. You should only validate parameters which are required for power actions, and validations must be the same.","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_power_state(self, task):"},{"line_number":65,"context_line":"        driver_info \u003d common.parse_driver_info(task.node)"},{"line_number":66,"context_line":"        return oneview_client.get_node_power_state(driver_info)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @task_manager.require_exclusive_lock"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_183e618b","line":65,"in_reply_to":"da20952f_11fad2bd","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            oneview_client.validate_node_server_hardware("},{"line_number":63,"context_line":"                oneview_info, node.uuid, node.properties.get(\u0027memory_mb\u0027),"},{"line_number":64,"context_line":"                node.properties.get(\u0027cpus\u0027)"},{"line_number":65,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_27ef5488","line":62,"updated":"2015-09-04 20:36:51.000000000","message":"ditto about moving this to oneviewclient","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                oneview_info, node.uuid"},{"line_number":82,"context_line":"            )"},{"line_number":83,"context_line":"        except Exception as e:"},{"line_number":84,"context_line":"            raise exception.InvalidParameterException(e.message)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def get_power_state(self, task):"},{"line_number":87,"context_line":"        \"\"\"Gets the current power state."}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_279674f0","line":84,"updated":"2015-09-04 20:36:51.000000000","message":"ditto","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"e0778f10e8c15394f70e9907ef2cf6f238f5755c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                oneview_info, node.uuid"},{"line_number":82,"context_line":"            )"},{"line_number":83,"context_line":"        except Exception as e:"},{"line_number":84,"context_line":"            raise exception.InvalidParameterException(e.message)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def get_power_state(self, task):"},{"line_number":87,"context_line":"        \"\"\"Gets the current power state."}],"source_content_type":"text/x-python","patch_set":25,"id":"ba15a1d1_8accb036","line":84,"in_reply_to":"da20952f_279674f0","updated":"2015-09-14 17:29:17.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            power_state \u003d common.translate_oneview_power_state(power_state)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        except Exception as e:"},{"line_number":103,"context_line":"            LOG.error(e.message)"},{"line_number":104,"context_line":"            raise exception.IronicException(_(\"Error getting power state for \""},{"line_number":105,"context_line":"                                            \"node %s\") % task.node.uuid)"},{"line_number":106,"context_line":"        return power_state"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_c7ae982d","line":103,"updated":"2015-09-04 20:36:51.000000000","message":"six.text_type(e)","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            power_state \u003d common.translate_oneview_power_state(power_state)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        except Exception as e:"},{"line_number":103,"context_line":"            LOG.error(e.message)"},{"line_number":104,"context_line":"            raise exception.IronicException(_(\"Error getting power state for \""},{"line_number":105,"context_line":"                                            \"node %s\") % task.node.uuid)"},{"line_number":106,"context_line":"        return power_state"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_e1b21e06","line":103,"in_reply_to":"da20952f_c7ae982d","updated":"2015-09-09 17:15:18.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"9267d13db54bc2a6cc3144e8cce1dca36205251d","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"},{"line_number":122,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        LOG.debug(_(\u0027Setting power state of node %(node_uuid)s to \u0027"},{"line_number":125,"context_line":"                    \u0027%(power_state)s\u0027)"},{"line_number":126,"context_line":"                  % {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_a77844c5","line":124,"updated":"2015-09-04 20:36:51.000000000","message":"debug logs should not be translated, s/%/,/","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"75d3d5da1cc81b70765af39b7a4134912b88f176","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"},{"line_number":122,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        LOG.debug(_(\u0027Setting power state of node %(node_uuid)s to \u0027"},{"line_number":125,"context_line":"                    \u0027%(power_state)s\u0027)"},{"line_number":126,"context_line":"                  % {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_41bc2adb","line":124,"in_reply_to":"da20952f_a77844c5","updated":"2015-09-09 17:15:18.000000000","message":"Done","commit_id":"be2fd37cd80746af231c40ca0fbf04dac2e1f931"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_bde3d004","line":18,"updated":"2015-09-28 07:05:43.000000000","message":"six is a third party module","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_c298af1e","line":18,"in_reply_to":"9a1a9d01_bde3d004","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        node \u003d task.node"},{"line_number":57,"context_line":"        node_ports \u003d ports.list_by_node_id(task.context, node.id)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        common.parse_driver_info(node)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1dbbdce6","line":57,"updated":"2015-09-28 07:05:43.000000000","message":"why not just use task.ports ?","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        node \u003d task.node"},{"line_number":57,"context_line":"        node_ports \u003d ports.list_by_node_id(task.context, node.id)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        common.parse_driver_info(node)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_e29b7316","line":57,"in_reply_to":"9a1a9d01_1dbbdce6","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            oneview_client.validate_node_server_profile_template(oneview_info)"},{"line_number":83,"context_line":"        except Exception as e:"},{"line_number":84,"context_line":"            exc_message \u003d six.text_type(e.message) + \"\\nNode: %s\" % node.uuid"},{"line_number":85,"context_line":"            LOG.error(exc_message)"},{"line_number":86,"context_line":"            raise exception.InvalidParameterValue(exc_message)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_bdc67047","line":84,"updated":"2015-09-28 07:05:43.000000000","message":"Also reading from e.message is deprecated for most of the libraries.\n\nNeeds translation.  Better\n\n  msg \u003d _(\"Node %s failed to validate oneview...... Error: %s\") % (node.uuid, e)\n\nAlso need _LE()","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            oneview_client.validate_node_server_profile_template(oneview_info)"},{"line_number":83,"context_line":"        except Exception as e:"},{"line_number":84,"context_line":"            exc_message \u003d six.text_type(e.message) + \"\\nNode: %s\" % node.uuid"},{"line_number":85,"context_line":"            LOG.error(exc_message)"},{"line_number":86,"context_line":"            raise exception.InvalidParameterValue(exc_message)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_b6140fa0","line":84,"in_reply_to":"9a1a9d01_bdc67047","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            LOG.error(exc_message)"},{"line_number":86,"context_line":"            raise exception.InvalidParameterValue(exc_message)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def get_power_state(self, task):"},{"line_number":89,"context_line":"        \"\"\"Gets the current power state."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        :param task: a TaskManager instance."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5004dbbe","line":88,"updated":"2015-09-28 07:05:43.000000000","message":"Missing test cases for this method.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            LOG.error(exc_message)"},{"line_number":86,"context_line":"            raise exception.InvalidParameterValue(exc_message)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def get_power_state(self, task):"},{"line_number":89,"context_line":"        \"\"\"Gets the current power state."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        :param task: a TaskManager instance."}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_ee582b8c","line":88,"in_reply_to":"9a1a9d01_5004dbbe","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":102,"context_line":"            power_state \u003d common.translate_oneview_power_state(power_state)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(six.text_type(e.message))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5ddcf411","line":102,"updated":"2015-09-28 07:05:43.000000000","message":"nit: \n\n  return common.translate_oneview_power_state(power_state)","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":102,"context_line":"            power_state \u003d common.translate_oneview_power_state(power_state)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(six.text_type(e.message))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_d667434b","line":102,"in_reply_to":"9a1a9d01_5ddcf411","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            power_state \u003d common.translate_oneview_power_state(power_state)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":106,"context_line":"            raise exception.IronicException(_(\"Error getting power state for \""},{"line_number":107,"context_line":"                                            \"node %s\") % task.node.uuid)"},{"line_number":108,"context_line":"        return power_state"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_3de100d1","line":105,"updated":"2015-09-28 07:05:43.000000000","message":"This logs with node.uuid.  Better to log it like above in line 84. Also need _LE()","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            power_state \u003d common.translate_oneview_power_state(power_state)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":106,"context_line":"            raise exception.IronicException(_(\"Error getting power state for \""},{"line_number":107,"context_line":"                                            \"node %s\") % task.node.uuid)"},{"line_number":108,"context_line":"        return power_state"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_76b43781","line":105,"in_reply_to":"9a1a9d01_3de100d1","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":106,"context_line":"            raise exception.IronicException(_(\"Error getting power state for \""},{"line_number":107,"context_line":"                                            \"node %s\") % task.node.uuid)"},{"line_number":108,"context_line":"        return power_state"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1dde7c11","line":106,"updated":"2015-09-28 07:05:43.000000000","message":"Can we put the actual exception also in the exception.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        except Exception as e:"},{"line_number":105,"context_line":"            LOG.error(six.text_type(e.message))"},{"line_number":106,"context_line":"            raise exception.IronicException(_(\"Error getting power state for \""},{"line_number":107,"context_line":"                                            \"node %s\") % task.node.uuid)"},{"line_number":108,"context_line":"        return power_state"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_96b9cb7b","line":106,"in_reply_to":"9a1a9d01_1dde7c11","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        new_state \u003d common.translate_oneview_power_state(new_state)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if new_state !\u003d power_state:"},{"line_number":140,"context_line":"            raise exception.PowerStateFailure(pstate\u003dpower_state)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":143,"context_line":"    def reboot(self, task):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_70ff9faa","line":140,"updated":"2015-09-28 07:05:43.000000000","message":"Missing test cases for this path.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        new_state \u003d common.translate_oneview_power_state(new_state)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if new_state !\u003d power_state:"},{"line_number":140,"context_line":"            raise exception.PowerStateFailure(pstate\u003dpower_state)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":143,"context_line":"    def reboot(self, task):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_aea6b3ab","line":140,"in_reply_to":"9a1a9d01_70ff9faa","updated":"2015-09-30 20:58:39.000000000","message":"Done, please see: \"test_set_power_on_fail\" and \"test_set_power_off_fail\"","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e77ba37f6997dca11e6a8311757211ce91be0340","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":77,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            exc_message \u003d (e.message + \"Error getting power state \""},{"line_number":80,"context_line":"                           \"for node %s\") % task.node.uuid"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_f15c5fef","line":77,"updated":"2015-10-05 18:39:39.000000000","message":"Why not move the dictionary translating states here as it is done e.g. with boot devices?","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"82b9924a86e7ae0624dd5db4e7c4ad40d4cb6a92","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":77,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            exc_message \u003d (e.message + \"Error getting power state \""},{"line_number":80,"context_line":"                           \"for node %s\") % task.node.uuid"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_42769f3f","line":77,"in_reply_to":"7a2fa921_a748e52e","updated":"2015-10-05 20:00:55.000000000","message":"If it is easier for you to do it this way then I\u0027m fine with it :)","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"b4f31cb31c4c11535f0a6aabffce854b1b0959de","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":77,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            exc_message \u003d (e.message + \"Error getting power state \""},{"line_number":80,"context_line":"                           \"for node %s\") % task.node.uuid"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a2fa921_a748e52e","line":77,"in_reply_to":"7a2fa921_f15c5fef","updated":"2015-10-05 19:24:47.000000000","message":"All that we import from python-oneviewclient is done through common.py since it eases the way we mock it on tests. For power, we import the power state strings from python-oneviewclient\u0027s \"states\" module.","commit_id":"1cb57c33a2fae946ccb66ac9de273aa565e58a5c"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":56,"context_line":"        except Exception as e:"},{"line_number":57,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":58,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":59,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_d4b9f82f","line":56,"updated":"2015-10-06 09:46:18.000000000","message":"ditto more granularity","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            common.validate_oneview_resources_compatibility(task)"},{"line_number":56,"context_line":"        except Exception as e:"},{"line_number":57,"context_line":"            msg \u003d (_LE(\"Node %(node_uuid)s validation failed. Error: \""},{"line_number":58,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":59,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": e.message})"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_770c9894","line":56,"in_reply_to":"7a2fa921_d4b9f82f","updated":"2015-10-06 18:05:11.000000000","message":"Done","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        :param node: The Node."},{"line_number":68,"context_line":"        :returns: one of :mod:`ironic.common.states` POWER_OFF,"},{"line_number":69,"context_line":"            POWER_ON or ERROR."},{"line_number":70,"context_line":"        :raises: IronicException"},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_0940b9a4","line":70,"updated":"2015-10-06 09:46:18.000000000","message":"nit: Usually drivers have their own exception for errors coming from their libs, e.g: IloOperationError, IPMIFailure, AMTFailure, etc... That makes the logs a bit better to diagnostic since they have a specific error messages such as \"IPMI call failed. Error ...\" and so on","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        :param node: The Node."},{"line_number":68,"context_line":"        :returns: one of :mod:`ironic.common.states` POWER_OFF,"},{"line_number":69,"context_line":"            POWER_ON or ERROR."},{"line_number":70,"context_line":"        :raises: IronicException"},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        oneview_info \u003d common.get_oneview_info(task.node)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_426e7830","line":70,"in_reply_to":"7a2fa921_0940b9a4","updated":"2015-10-06 18:05:11.000000000","message":"Cool, just created an OneViewError exception. Thanks!","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":77,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            exc_message \u003d (e.message + \"Error getting power state \""},{"line_number":80,"context_line":"                           \"for node %s\") % task.node.uuid"},{"line_number":81,"context_line":"            LOG.error(exc_message)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_f4b6743c","line":78,"updated":"2015-10-06 09:46:18.000000000","message":"ditto more granularity","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":77,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            exc_message \u003d (e.message + \"Error getting power state \""},{"line_number":80,"context_line":"                           \"for node %s\") % task.node.uuid"},{"line_number":81,"context_line":"            LOG.error(exc_message)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_027880f1","line":78,"in_reply_to":"7a2fa921_f4b6743c","updated":"2015-10-06 18:05:11.000000000","message":"Done","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":62,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": oneview_exc})"},{"line_number":63,"context_line":"            LOG.error(msg)"},{"line_number":64,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_power_state(self, task):"},{"line_number":67,"context_line":"        \"\"\"Gets the current power state."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_acf5decb","line":64,"updated":"2015-10-07 10:22:13.000000000","message":"Just wondering if this should be OneViewError instead because we don\u0027t know what happened internally in oneview.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                       \"%(error_msg)s\") %"},{"line_number":62,"context_line":"                   {\"node_uuid\": task.node.uuid, \"error_msg\": oneview_exc})"},{"line_number":63,"context_line":"            LOG.error(msg)"},{"line_number":64,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_power_state(self, task):"},{"line_number":67,"context_line":"        \"\"\"Gets the current power state."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_71da367a","line":64,"in_reply_to":"7a2fa921_acf5decb","updated":"2015-10-07 20:10:30.000000000","message":"According to Lucas, the validate method shall raise only expected exceptions in [1] to be considered as validation failure. Other exceptions could cause a internal server error.\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L417","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":81,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":82,"context_line":"        except oneview_error.OneViewException as oneview_exc:"},{"line_number":83,"context_line":"            LOG.error("},{"line_number":84,"context_line":"                _LE(\"Error getting power state for node %(node)s. Error:\""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_ecb756f3","line":81,"updated":"2015-10-07 10:22:13.000000000","message":"nit: better to move this line out of try/except block.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            power_state \u003d oneview_client.get_node_power_state(oneview_info)"},{"line_number":81,"context_line":"            return common.translate_oneview_power_state(power_state)"},{"line_number":82,"context_line":"        except oneview_error.OneViewException as oneview_exc:"},{"line_number":83,"context_line":"            LOG.error("},{"line_number":84,"context_line":"                _LE(\"Error getting power state for node %(node)s. Error:\""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_717476ce","line":81,"in_reply_to":"7a2fa921_ecb756f3","updated":"2015-10-07 20:10:30.000000000","message":"Done","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        :param task: a TaskManager instance."},{"line_number":91,"context_line":"        :param node: The Node."},{"line_number":92,"context_line":"        :param power_state: The desired power state POWER_ON,POWER_OFF or"},{"line_number":93,"context_line":"            REBOOT from :mod:`ironic.common.states`."},{"line_number":94,"context_line":"        :raises: InvalidParameterValue if an invalid power state was specified."},{"line_number":95,"context_line":"        :raises: PowerStateFailure if the power couldn\u0027t be set to power_state."}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_4f54fc51","line":92,"updated":"2015-10-08 13:53:48.000000000","message":"Nit: space after comma","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        :param task: a TaskManager instance."},{"line_number":91,"context_line":"        :param node: The Node."},{"line_number":92,"context_line":"        :param power_state: The desired power state POWER_ON,POWER_OFF or"},{"line_number":93,"context_line":"            REBOOT from :mod:`ironic.common.states`."},{"line_number":94,"context_line":"        :raises: InvalidParameterValue if an invalid power state was specified."},{"line_number":95,"context_line":"        :raises: PowerStateFailure if the power couldn\u0027t be set to power_state."}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_ea27f3b3","line":92,"in_reply_to":"7a2fa921_4f54fc51","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        else:"},{"line_number":110,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":111,"context_line":"                _(\"set_power_state called with invalid power state %s.\")"},{"line_number":112,"context_line":"                % power_state)"},{"line_number":113,"context_line":"        new_state \u003d common.translate_oneview_power_state(new_state)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if new_state !\u003d power_state:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_cf67ac4b","line":112,"updated":"2015-10-08 13:53:48.000000000","message":"Why don\u0027t we support REBOOT?","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        else:"},{"line_number":110,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":111,"context_line":"                _(\"set_power_state called with invalid power state %s.\")"},{"line_number":112,"context_line":"                % power_state)"},{"line_number":113,"context_line":"        new_state \u003d common.translate_oneview_power_state(new_state)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if new_state !\u003d power_state:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_ed614d3a","line":112,"in_reply_to":"7a2fa921_cf67ac4b","updated":"2015-10-08 21:59:22.000000000","message":"Why not? Good question. Implemented.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.debug(\u0027Setting power state of node %(node_uuid)s to \u0027"},{"line_number":103,"context_line":"                  \u0027%(power_state)s\u0027"},{"line_number":104,"context_line":"                  % {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            if power_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_1b0b6325","line":104,"updated":"2015-10-09 17:20:53.000000000","message":"ditto comma instead of %","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        LOG.debug(\u0027Setting power state of node %(node_uuid)s to \u0027"},{"line_number":103,"context_line":"                  \u0027%(power_state)s\u0027"},{"line_number":104,"context_line":"                  % {\u0027node_uuid\u0027: task.node.uuid, \u0027power_state\u0027: power_state})"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            if power_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_e6ae0a2d","line":104,"in_reply_to":"7a2fa921_1b0b6325","updated":"2015-10-09 18:14:50.000000000","message":"Done","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"}],"ironic/drivers/modules/oneview/vendor.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa1b9901_41dbab1b","updated":"2015-08-24 22:42:24.000000000","message":"I don\u0027t see a corresponding unittest for this file.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa1b9901_f1faa7bc","in_reply_to":"fa1b9901_41dbab1b","updated":"2015-08-25 16:14:26.000000000","message":"True. We are going to implement that inside test_agent since all tests for reboot_to_instance are there.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # should expect a whole disk image and clean-up the tftp files"},{"line_number":59,"context_line":"        # on-disk incase the node is disregarding the boot preference."},{"line_number":60,"context_line":"        if node.driver_internal_info.get(\u0027is_whole_disk_image\u0027):"},{"line_number":61,"context_line":"            agent._clean_up_pxe(task)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_3bd1f1cd","line":61,"updated":"2015-08-25 10:28:00.000000000","message":"Apparently something like this should not be called for drivers using virtual media. Not sure if you want to look at it now or later when/if you gyus add the virtual media support: https://review.openstack.org/#/c/205998/2/ironic/drivers/modules/agent.py","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # should expect a whole disk image and clean-up the tftp files"},{"line_number":59,"context_line":"        # on-disk incase the node is disregarding the boot preference."},{"line_number":60,"context_line":"        if node.driver_internal_info.get(\u0027is_whole_disk_image\u0027):"},{"line_number":61,"context_line":"            agent._clean_up_pxe(task)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_797f63e0","line":61,"in_reply_to":"fa1b9901_3bd1f1cd","updated":"2015-08-25 16:14:26.000000000","message":"I think we can take care of it when the virtual media support will be implemented. For now, we have just pxe and we also need to take a look on how Ramesh plans to take care of it on the boot interface.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class AgentVendorInterface(agent.AgentVendorInterface):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def reboot_to_instance(self, task, **kwargs):"},{"line_number":33,"context_line":"        task.process_event(\u0027resume\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_8296a94a","line":30,"updated":"2015-10-07 10:22:13.000000000","message":"We don\u0027t have test cases for this.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        LOG.info(_LI(\u0027Image successfully written to node %s\u0027), node.uuid)"},{"line_number":46,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":49,"context_line":"        manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":50,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_cc837acb","line":48,"updated":"2015-10-07 10:22:13.000000000","message":"Did you have to implement this full method only because we can\u0027t set the boot device when machine is powered on ?  It\u0027s hard to maintain such a code. Any time we make a change to reboot_to_instance(), it should be copied here as well.  \n\nWe anyway power off and power on the system today for agent based deploy.  Do you think we can move the set_boot_device() call there ?\n\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/agent_base_vendor.py#L599-L617","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"6393f11f87ebffd3d374ba754b69f4be96d9c08a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        LOG.info(_LI(\u0027Image successfully written to node %s\u0027), node.uuid)"},{"line_number":46,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":49,"context_line":"        manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":50,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_8d86c063","line":48,"in_reply_to":"7a2fa921_cc837acb","updated":"2015-10-07 20:10:30.000000000","message":"Yes. I did send a patch [1] to do that, but I\u0027m worried about other drivers that uses the reboot_and_finish_deploy method.\n\nI\u0027ll keep this interface on the review to allow people to look at the code while we understand if [1] will work for everybody.\n\n[1] https://review.openstack.org/#/c/232186/","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"30279e5ea6a0e32e51114e3c948fd548cbc4d46b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # TODO(rameshg87): Not all in-tree drivers using reboot_to_instance"},{"line_number":56,"context_line":"        # have a boot interface. So include a check for now. Remove this"},{"line_number":57,"context_line":"        # check once all in-tree drivers have a boot interface."},{"line_number":58,"context_line":"        if task.driver.boot:"},{"line_number":59,"context_line":"            task.driver.boot.clean_up_ramdisk(task)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a2fa921_4c4f6abd","line":58,"updated":"2015-10-07 10:22:13.000000000","message":"You have self.boot in your driver. So we don\u0027t need this.","commit_id":"ff3552563019acb15ace4b1dd1d62154eab64878"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        LOG.info(_LI(\u0027Image successfully written to node %s\u0027), node.uuid)"},{"line_number":46,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":49,"context_line":"        manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":50,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_aa01fe06","line":48,"updated":"2015-10-08 13:53:48.000000000","message":"Seems like we might want to try a soft power off first, like reboot_and_finish_deploy does? https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/agent_base_vendor.py#L576","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":49,"context_line":"        manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":50,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        # NOTE(TheJulia): If we deployed a whole disk image, we"},{"line_number":53,"context_line":"        # should expect a whole disk image and clean-up the tftp files"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_ef2dc8a8","line":50,"updated":"2015-10-08 13:53:48.000000000","message":"This won\u0027t be optimal, as it will try to do an in-band shutdown first, which will time out as we can\u0027t talk to the agent. I\u0027m not sure if we want to refactor or reimplement this method to avoid that, or just document settings to reduce the time spent trying to talk to the agent.\n\nFor now, I\u0027m inclined to think we should just reimplement reboot_and_finish_deploy in this subclass until we decide the best way to refactor it.","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":49,"context_line":"        manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":50,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        # NOTE(TheJulia): If we deployed a whole disk image, we"},{"line_number":53,"context_line":"        # should expect a whole disk image and clean-up the tftp files"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_9f71db78","line":50,"in_reply_to":"7a2fa921_ef2dc8a8","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"bbde6a8284088e55412c4edbf4629779eaf0c475","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027,"},{"line_number":71,"context_line":"                                               persistent\u003dTrue)"},{"line_number":72,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":73,"context_line":"        except Exception as e:"},{"line_number":74,"context_line":"            msg \u003d (_(\u0027Error rebooting node %(node)s after deploy. \u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"7a2fa921_b8a29c97","line":71,"updated":"2015-10-09 00:17:15.000000000","message":"So this looks fine, but my thought was that we would implement this method *and* reboot_to_instance. If we set the boot device while power is on, that will error, right? reboot_to_instance does that: https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/agent.py#L420\n\nAt which point, I believe the deployment will fail. However, if OneView just ignores the command and does not throw an error, then this code should work as expected.\n\nIn any case, I think this file needs a note or TODO describing the problem and why we\u0027re re-implementing this code here, and preferably a link to the patch that solves the problem and removes this code (if you have that already).","commit_id":"e93fe227e078c32ad337d2c38f533bcc5c3562d5"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"2ff6ade5591b9f59f3f12780680c7c6dad610e5b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027,"},{"line_number":71,"context_line":"                                               persistent\u003dTrue)"},{"line_number":72,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":73,"context_line":"        except Exception as e:"},{"line_number":74,"context_line":"            msg \u003d (_(\u0027Error rebooting node %(node)s after deploy. \u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"7a2fa921_b0437aae","line":71,"in_reply_to":"7a2fa921_b8a29c97","updated":"2015-10-09 12:58:27.000000000","message":"Holy cow, you\u0027re right. I totally missed it.","commit_id":"e93fe227e078c32ad337d2c38f533bcc5c3562d5"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        @retrying.retry("},{"line_number":75,"context_line":"            stop_max_attempt_number\u003dattempts,"},{"line_number":76,"context_line":"            retry_on_result\u003dlambda state: state !\u003d states.POWER_OFF,"},{"line_number":77,"context_line":"            wait_fixed\u003dwait"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        def _wait_until_powered_off(task):"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_db7acb23","line":76,"updated":"2015-10-09 17:20:53.000000000","message":"Maybe you should also add retry_on_exception\u003dlambda _: False so as not to retry on any exception?","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        @retrying.retry("},{"line_number":75,"context_line":"            stop_max_attempt_number\u003dattempts,"},{"line_number":76,"context_line":"            retry_on_result\u003dlambda state: state !\u003d states.POWER_OFF,"},{"line_number":77,"context_line":"            wait_fixed\u003dwait"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        def _wait_until_powered_off(task):"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_86571625","line":76,"in_reply_to":"7a2fa921_db7acb23","updated":"2015-10-09 18:14:50.000000000","message":"That\u0027s copy\u0027n\u0027paste from agent_base_vendor.py. We reimplement it just because of line 97. I\u0027ll add a note on this file to document it.","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"}],"ironic/drivers/oneview.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"fa1b9901_61ed8fb6","updated":"2015-08-24 22:42:24.000000000","message":"I don\u0027t see a corresponding unit test for this file.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    merely the glue between them."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self):"},{"line_number":48,"context_line":"        self.power \u003d power.OneViewPower()"},{"line_number":49,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":50,"context_line":"        self.boot \u003d pxe.PXEBoot()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_0642903e","line":47,"updated":"2015-08-25 10:28:00.000000000","message":"This should fail if the oneview library is not installed, e.g: https://github.com/openstack/ironic/blob/master/ironic/drivers/irmc.py#L42-L45","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    merely the glue between them."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self):"},{"line_number":48,"context_line":"        self.power \u003d power.OneViewPower()"},{"line_number":49,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":50,"context_line":"        self.boot \u003d pxe.PXEBoot()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_994b57b1","line":47,"in_reply_to":"fa1b9901_0642903e","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"c9046d953c9f6b256e150933fbf5f2f532ae115c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    merely the glue between them."},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __init__(self):"},{"line_number":71,"context_line":"        self.power \u003d power.OneViewPower()"},{"line_number":72,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":73,"context_line":"        self.boot \u003d pxe.PXEBoot()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_e6467c4e","line":70,"updated":"2015-08-25 10:28:00.000000000","message":"ditto","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    merely the glue between them."},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def __init__(self):"},{"line_number":71,"context_line":"        self.power \u003d power.OneViewPower()"},{"line_number":72,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":73,"context_line":"        self.boot \u003d pxe.PXEBoot()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_79cd2330","line":70,"in_reply_to":"fa1b9901_e6467c4e","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"class FakeOneViewDriver(base.BaseDriver):"},{"line_number":83,"context_line":"    \"\"\"Fake OneView driver. For testing purposes. \"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __init__(self):"},{"line_number":86,"context_line":"        self.power \u003d power.OneViewPower()"},{"line_number":87,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":88,"context_line":"        self.boot \u003d fake.FakeBoot()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_d9030f41","line":85,"updated":"2015-08-25 16:14:26.000000000","message":"I think we need to fail here too since the fake is just for Boot and Deploy.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f94d9b7739fbf9713a4f6c253f98f1aa4d901408","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        if not importutils.try_import(\u0027oneview_client.client\u0027):"},{"line_number":51,"context_line":"            raise exception.DriverLoadError("},{"line_number":52,"context_line":"                driver\u003dself.__class__.__name__,"},{"line_number":53,"context_line":"                reason\u003d_(\"Unable to import python-oneviewclient library\"))"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_2bca036f","line":50,"updated":"2015-09-03 14:11:46.000000000","message":"This library should be added to driver-requirements.txt","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"ce2cadfc652ab79a5c7881d333d2615382697b94","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        if not importutils.try_import(\u0027oneview_client.client\u0027):"},{"line_number":51,"context_line":"            raise exception.DriverLoadError("},{"line_number":52,"context_line":"                driver\u003dself.__class__.__name__,"},{"line_number":53,"context_line":"                reason\u003d_(\"Unable to import python-oneviewclient library\"))"}],"source_content_type":"text/x-python","patch_set":23,"id":"da20952f_d47c43b7","line":50,"in_reply_to":"da20952f_2bca036f","updated":"2015-09-03 20:11:13.000000000","message":"Done","commit_id":"77ad228fcd23cc069e274ac99e8b87110529d6b3"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.vendor \u003d vendor.AgentVendorInterface()"},{"line_number":58,"context_line":"        # Checks connectivity to OneView and version compatibility on driver"},{"line_number":59,"context_line":"        # initialization"},{"line_number":60,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":61,"context_line":"        oneview_client.verify_oneview_version()"},{"line_number":62,"context_line":"        oneview_client.verify_credentials()"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_ddb6c489","line":60,"updated":"2015-09-28 07:05:43.000000000","message":"Better to move this to the top after importing client ? Why create all the objects if verification fails. Ditto for others.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.vendor \u003d vendor.AgentVendorInterface()"},{"line_number":58,"context_line":"        # Checks connectivity to OneView and version compatibility on driver"},{"line_number":59,"context_line":"        # initialization"},{"line_number":60,"context_line":"        oneview_client \u003d common.get_oneview_client()"},{"line_number":61,"context_line":"        oneview_client.verify_oneview_version()"},{"line_number":62,"context_line":"        oneview_client.verify_credentials()"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_06da684c","line":60,"in_reply_to":"9a1a9d01_ddb6c489","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f7a14a97cfa955eb1756e0021d8b7c9db56b8a7a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":109,"context_line":"        self.boot \u003d fake.FakeBoot()"},{"line_number":110,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":111,"context_line":"        self.vendor \u003d vendor.AgentVendorInterface()"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_3b7c1feb","line":111,"updated":"2015-10-09 17:20:53.000000000","message":"Not sure that fake driver needs vendor interface.","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1c93a152de0d527eda230ff97d26f83e72517e2a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":109,"context_line":"        self.boot \u003d fake.FakeBoot()"},{"line_number":110,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":111,"context_line":"        self.vendor \u003d vendor.AgentVendorInterface()"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_a166bcb8","line":111,"in_reply_to":"7a2fa921_3b7c1feb","updated":"2015-10-09 17:55:54.000000000","message":"It needs to be tested, ignore this :)","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"8812085b1b5eede8c69f747891b21d5ee611372d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.management \u003d management.OneViewManagement()"},{"line_number":109,"context_line":"        self.boot \u003d fake.FakeBoot()"},{"line_number":110,"context_line":"        self.deploy \u003d fake.FakeDeploy()"},{"line_number":111,"context_line":"        self.vendor \u003d vendor.AgentVendorInterface()"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a2fa921_4c9effb9","line":111,"in_reply_to":"7a2fa921_a166bcb8","updated":"2015-10-09 18:14:50.000000000","message":"We settled it by removing this line and setting the test_vendor to use the agent_pxe_oneview on these tests, since the vendor method is only used by the agent deploy interface.","commit_id":"311e639c4728926f2fef9f86ff323ac41d5eacd1"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"2de785c0058c1f232c14b806298b1c0e7cc00127","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class FakeOneViewDriver(base.BaseDriver):"},{"line_number":94,"context_line":"    \"\"\"Fake OneView driver. For testing purposes. \"\"\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def __init__(self):"},{"line_number":97,"context_line":"        if not importutils.try_import(\u0027oneview_client.client\u0027):"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a2fa921_5a999c1e","line":94,"updated":"2015-10-12 16:27:14.000000000","message":"All other drivers usually add their Fake() driver to the ironic/drivers/fake.py file, that\u0027s more consistent with the rest but I don\u0027t want to -1 this patch because of it, so I will add a following patch fixing it.","commit_id":"460b9f1f5ffc39e24950f8246d04a760d8631c81"}],"ironic/drivers/utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4e39623ae1c42ea218c846f73728eff24ddbff37","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    :param capabilities: the capabilities of the node as a formatted string"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    \"\"\""},{"line_number":181,"context_line":"    capabilities_dict \u003d {}"},{"line_number":182,"context_line":"    if capabilities:"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            for capability in capabilities.split(\u0027,\u0027):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bf2cea02","line":181,"updated":"2015-08-25 21:41:10.000000000","message":"Maybe raise a ValueError if \u0027capabilities\u0027 is not a string type?\n\n if isinstance(capabilities, six.string_types):\n    raise ValueError(\u0027capabilities must be a string type\u0027)\n\nOr something like that.  Maybe  print what type was received?","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"bb43ce77f08eaa2c89f2599e21ad25e7c52e7574","unresolved":false,"context_lines":[{"line_number":178,"context_line":"    :param capabilities: the capabilities of the node as a formatted string"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    \"\"\""},{"line_number":181,"context_line":"    capabilities_dict \u003d {}"},{"line_number":182,"context_line":"    if capabilities:"},{"line_number":183,"context_line":"        try:"},{"line_number":184,"context_line":"            for capability in capabilities.split(\u0027,\u0027):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_be236cbc","line":181,"in_reply_to":"fa1b9901_bf2cea02","updated":"2015-08-26 16:18:02.000000000","message":"Done","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"11658cd65c8e73b27e686d410ba495c382f9b16c","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    \"\"\"Parse the capabilities string into a dictionary"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    :param capabilities: the capabilities of the node as a formatted string"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    \"\"\""},{"line_number":228,"context_line":"    capabilities_dict \u003d {}"},{"line_number":229,"context_line":"    if capabilities:"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_02a3b09f","line":226,"updated":"2015-10-02 04:20:58.000000000","message":"Please document the return value and exception as well.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                key, value \u003d capability.split(\u0027:\u0027)"},{"line_number":236,"context_line":"                capabilities_dict[key] \u003d value"},{"line_number":237,"context_line":"        except ValueError:"},{"line_number":238,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":239,"context_line":"                _(\"Malformed capabilities value: %s\") % capability"},{"line_number":240,"context_line":"            )"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_5dc95477","line":238,"updated":"2015-09-28 07:05:43.000000000","message":"I think both the exceptions above and below should be of same type.  ValueError seems better to me because capabilties is passed as an argument to this method and not read from node.  Therefore we don\u0027t know whether we read from node.properties[\u0027capabilities\u0027] or we got it from somewhere else.  So IMO, both should be ValueError.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                key, value \u003d capability.split(\u0027:\u0027)"},{"line_number":236,"context_line":"                capabilities_dict[key] \u003d value"},{"line_number":237,"context_line":"        except ValueError:"},{"line_number":238,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":239,"context_line":"                _(\"Malformed capabilities value: %s\") % capability"},{"line_number":240,"context_line":"            )"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_a6adbc85","line":238,"in_reply_to":"9a1a9d01_5dc95477","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"f0dca3438ac1ca8b04baf93316e26e9209e9de29","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    :param capabilities: the capabilities of the node as a formatted string."},{"line_number":226,"context_line":"    :raises: ValueError if capabilities are not instance of six.string_types."},{"line_number":227,"context_line":"    :raises: ValueError if capabilities has malformed value."},{"line_number":228,"context_line":"    \"\"\""},{"line_number":229,"context_line":"    capabilities_dict \u003d {}"},{"line_number":230,"context_line":"    if capabilities:"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_d4bed8fe","line":227,"updated":"2015-10-06 09:46:18.000000000","message":"nit: This should raise InvalidParameterValue right?\n\n:raises: InvalidParameterValue if capabilities is not an string or has a malformed value","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"c9db518ebd33d2c8ad33d3c5856292085a03bfd8","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    :param capabilities: the capabilities of the node as a formatted string."},{"line_number":226,"context_line":"    :raises: ValueError if capabilities are not instance of six.string_types."},{"line_number":227,"context_line":"    :raises: ValueError if capabilities has malformed value."},{"line_number":228,"context_line":"    \"\"\""},{"line_number":229,"context_line":"    capabilities_dict \u003d {}"},{"line_number":230,"context_line":"    if capabilities:"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a2fa921_c8bcf16e","line":227,"in_reply_to":"7a2fa921_d4bed8fe","updated":"2015-10-06 18:05:11.000000000","message":"Done","commit_id":"cb02bda0fc6c70705b31c693c819b27c1ed5f1cb"}],"ironic/tests/drivers/oneview/test_common.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        capabilities_exactly_one_item \u003d \u0027e:f\u0027"},{"line_number":62,"context_line":"        capabilities_without_items \u003d \u0027\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":65,"context_line":"            capabilities_without_items), {}"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        self.assertEqual(common._capabilities_to_dict("}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_66fe05b0","line":64,"updated":"2015-08-24 22:02:04.000000000","message":"On asserts the expected value should come first.\n\n self.assertEqual(expected, result)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        capabilities_exactly_one_item \u003d \u0027e:f\u0027"},{"line_number":62,"context_line":"        capabilities_without_items \u003d \u0027\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":65,"context_line":"            capabilities_without_items), {}"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        self.assertEqual(common._capabilities_to_dict("}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_1f55e7c0","line":64,"in_reply_to":"fa1b9901_66fe05b0","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            capabilities_without_items), {}"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":68,"context_line":"            capabilities_exactly_one_item), {\u0027e\u0027: \u0027f\u0027}"},{"line_number":69,"context_line":"        )"},{"line_number":70,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":71,"context_line":"            capabilities_more_than_one_item), {\u0027a\u0027: \u0027b\u0027, \u0027c\u0027: \u0027d\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c625915c","line":68,"updated":"2015-08-24 22:02:04.000000000","message":"Same a L64","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            capabilities_without_items), {}"},{"line_number":66,"context_line":"        )"},{"line_number":67,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":68,"context_line":"            capabilities_exactly_one_item), {\u0027e\u0027: \u0027f\u0027}"},{"line_number":69,"context_line":"        )"},{"line_number":70,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":71,"context_line":"            capabilities_more_than_one_item), {\u0027a\u0027: \u0027b\u0027, \u0027c\u0027: \u0027d\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_bf663bb9","line":68,"in_reply_to":"fa1b9901_c625915c","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":68,"context_line":"            capabilities_exactly_one_item), {\u0027e\u0027: \u0027f\u0027}"},{"line_number":69,"context_line":"        )"},{"line_number":70,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":71,"context_line":"            capabilities_more_than_one_item), {\u0027a\u0027: \u0027b\u0027, \u0027c\u0027: \u0027d\u0027}"},{"line_number":72,"context_line":"        )"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_8620f94a","line":70,"updated":"2015-08-24 22:02:04.000000000","message":"Same a L64","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":68,"context_line":"            capabilities_exactly_one_item), {\u0027e\u0027: \u0027f\u0027}"},{"line_number":69,"context_line":"        )"},{"line_number":70,"context_line":"        self.assertEqual(common._capabilities_to_dict("},{"line_number":71,"context_line":"            capabilities_more_than_one_item), {\u0027a\u0027: \u0027b\u0027, \u0027c\u0027: \u0027d\u0027}"},{"line_number":72,"context_line":"        )"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_1f0c07eb","line":70,"in_reply_to":"fa1b9901_8620f94a","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test__capabilities_to_dict_with_only_key_or_value_fail(self):"},{"line_number":75,"context_line":"        capabilities_only_key_or_value \u003d \u0027xpto\u0027"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            common._capabilities_to_dict(capabilities_only_key_or_value)"},{"line_number":78,"context_line":"            self.fail()"},{"line_number":79,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_06d38939","line":76,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test__capabilities_to_dict_with_only_key_or_value_fail(self):"},{"line_number":75,"context_line":"        capabilities_only_key_or_value \u003d \u0027xpto\u0027"},{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            common._capabilities_to_dict(capabilities_only_key_or_value)"},{"line_number":78,"context_line":"            self.fail()"},{"line_number":79,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_bffddbb2","line":76,"in_reply_to":"fa1b9901_06d38939","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        capabilities_invalid_character_end \u003d \u0027xpto:a,\u0027"},{"line_number":84,"context_line":"        capabilities_invalid_character_beggining \u003d \u0027,xpto:a\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            common._capabilities_to_dict(capabilities_invalid_character_end)"},{"line_number":88,"context_line":"            self.fail()"},{"line_number":89,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_86e79911","line":86,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        capabilities_invalid_character_end \u003d \u0027xpto:a,\u0027"},{"line_number":84,"context_line":"        capabilities_invalid_character_beggining \u003d \u0027,xpto:a\u0027"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            common._capabilities_to_dict(capabilities_invalid_character_end)"},{"line_number":88,"context_line":"            self.fail()"},{"line_number":89,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_7f32e3a8","line":86,"in_reply_to":"fa1b9901_86e79911","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        capabilities_incomplete_value \u003d \u0027xpto:,\u0027"},{"line_number":103,"context_line":"        capabilities_incomplete_key_and_value \u003d \u0027:,\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            common._capabilities_to_dict(capabilities_incomplete_key)"},{"line_number":107,"context_line":"            self.fail()"},{"line_number":108,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_26bd6dd7","line":105,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        capabilities_incomplete_value \u003d \u0027xpto:,\u0027"},{"line_number":103,"context_line":"        capabilities_incomplete_key_and_value \u003d \u0027:,\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            common._capabilities_to_dict(capabilities_incomplete_key)"},{"line_number":107,"context_line":"            self.fail()"},{"line_number":108,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_7fd98356","line":105,"in_reply_to":"fa1b9901_26bd6dd7","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":109,"context_line":"            self.assertEqual(\u0027Malformed capabilities value: \u0027, str(e))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            common._capabilities_to_dict(capabilities_incomplete_value)"},{"line_number":113,"context_line":"            self.fail()"},{"line_number":114,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_e6b695f8","line":111,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":109,"context_line":"            self.assertEqual(\u0027Malformed capabilities value: \u0027, str(e))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            common._capabilities_to_dict(capabilities_incomplete_value)"},{"line_number":113,"context_line":"            self.fail()"},{"line_number":114,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_dfe8cfe4","line":111,"in_reply_to":"fa1b9901_e6b695f8","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027Malformed capabilities value: \u0027, str(e))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        try:"},{"line_number":118,"context_line":"            common._capabilities_to_dict(capabilities_incomplete_key_and_value)"},{"line_number":119,"context_line":"            self.fail()"},{"line_number":120,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_86ceb981","line":117,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":115,"context_line":"            self.assertEqual(\u0027Malformed capabilities value: \u0027, str(e))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        try:"},{"line_number":118,"context_line":"            common._capabilities_to_dict(capabilities_incomplete_key_and_value)"},{"line_number":119,"context_line":"            self.fail()"},{"line_number":120,"context_line":"        except exception.InvalidParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_5fbb5fe5","line":117,"in_reply_to":"fa1b9901_86ceb981","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            \"capabilities\": \"enclosure_group_uri:fake_eg_uri\""},{"line_number":144,"context_line":"        }"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            common.parse_driver_info(self.node)"},{"line_number":148,"context_line":"            self.fail()"},{"line_number":149,"context_line":"        except exception.MissingParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_66c36558","line":146,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            \"capabilities\": \"enclosure_group_uri:fake_eg_uri\""},{"line_number":144,"context_line":"        }"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        try:"},{"line_number":147,"context_line":"            common.parse_driver_info(self.node)"},{"line_number":148,"context_line":"            self.fail()"},{"line_number":149,"context_line":"        except exception.MissingParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_1f7f2718","line":146,"in_reply_to":"fa1b9901_66c36558","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            \u0027server_hardware_uri\u0027: \u0027fake_sh_uri\u0027"},{"line_number":157,"context_line":"        }"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            common.parse_driver_info(self.node)"},{"line_number":161,"context_line":"            self.fail()"},{"line_number":162,"context_line":"        except exception.MissingParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_26a48db7","line":159,"updated":"2015-08-24 22:02:04.000000000","message":"Use:\n exc \u003d self.assertRaises(...)","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            \u0027server_hardware_uri\u0027: \u0027fake_sh_uri\u0027"},{"line_number":157,"context_line":"        }"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            common.parse_driver_info(self.node)"},{"line_number":161,"context_line":"            self.fail()"},{"line_number":162,"context_line":"        except exception.MissingParameterValue as e:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_3f846b09","line":159,"in_reply_to":"fa1b9901_26a48db7","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4e39623ae1c42ea218c846f73728eff24ddbff37","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \"capabilities\": \"enclosure_group_uri:fake_eg_uri\""},{"line_number":79,"context_line":"        }"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.assertRaises("},{"line_number":82,"context_line":"            exception.MissingParameterValue,"},{"line_number":83,"context_line":"            common.parse_driver_info,"},{"line_number":84,"context_line":"            self.node"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_1fa87676","line":81,"updated":"2015-08-25 21:41:10.000000000","message":"Can do:\n exc \u003d self.assertRaises(...)\n\n self.assertEqual(\u0027some message\u0027, str(e))\n\nI noticed messages being checked in previous patch sets.","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"bb43ce77f08eaa2c89f2599e21ad25e7c52e7574","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \"capabilities\": \"enclosure_group_uri:fake_eg_uri\""},{"line_number":79,"context_line":"        }"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.assertRaises("},{"line_number":82,"context_line":"            exception.MissingParameterValue,"},{"line_number":83,"context_line":"            common.parse_driver_info,"},{"line_number":84,"context_line":"            self.node"}],"source_content_type":"text/x-python","patch_set":20,"id":"da20952f_9fc97baf","line":81,"in_reply_to":"fa1b9901_1fa87676","updated":"2015-08-26 16:18:02.000000000","message":"Done","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(OneViewCommonTestCase, self).tearDown()"},{"line_number":49,"context_line":"        self.node.properties \u003d PROPERTIES_DICT"},{"line_number":50,"context_line":"        self.node.driver_info \u003d DRIVER_INFO_DICT"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_parse_driver_info(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_bdac3036","line":49,"updated":"2015-09-28 07:05:43.000000000","message":"Not required to have tear down because every time in setUp() we create a new node.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(OneViewCommonTestCase, self).tearDown()"},{"line_number":49,"context_line":"        self.node.properties \u003d PROPERTIES_DICT"},{"line_number":50,"context_line":"        self.node.driver_info \u003d DRIVER_INFO_DICT"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_parse_driver_info(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_fb057e10","line":49,"in_reply_to":"9a1a9d01_bdac3036","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"}],"ironic/tests/drivers/oneview/test_management.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from ironic.tests.db import base as db_base"},{"line_number":29,"context_line":"from ironic.tests.objects import utils as obj_utils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from oslo_utils import uuidutils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"oneview_client \u003d common.get_oneview_client()"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_21b9d7cb","line":31,"updated":"2015-08-24 22:42:24.000000000","message":"This should be before ironic.*\n\n import mock\n\n import oslo_utils ....\n\n import ironic.....\n ....","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from ironic.tests.db import base as db_base"},{"line_number":29,"context_line":"from ironic.tests.objects import utils as obj_utils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from oslo_utils import uuidutils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"oneview_client \u003d common.get_oneview_client()"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_64d4961f","line":31,"in_reply_to":"fa1b9901_21b9d7cb","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.config(username\u003d\u0027user\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":56,"context_line":"        self.config(password\u003d\u0027password\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        mock_check_ov_status.return_value \u003d 200"},{"line_number":59,"context_line":"        mock_verify_ov_version.return_value \u003d 120"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_oneview\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_e19bdf64","line":58,"updated":"2015-08-24 22:42:24.000000000","message":"Use http_client.OK","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.config(username\u003d\u0027user\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":56,"context_line":"        self.config(password\u003d\u0027password\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        mock_check_ov_status.return_value \u003d 200"},{"line_number":59,"context_line":"        mock_verify_ov_version.return_value \u003d 120"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_oneview\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_64a256b0","line":58,"in_reply_to":"fa1b9901_e19bdf64","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_validate(self, mock_get_ov_client):"},{"line_number":63,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":64,"context_line":"            task.driver.management.validate(task)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_validate_fail(self, mock_get_ov_client):"},{"line_number":67,"context_line":"        node \u003d obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_1d32fc10","line":64,"updated":"2015-09-28 07:05:43.000000000","message":"May be better to do some assertions if all the required calls on oneview client were made.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def test_validate(self, mock_get_ov_client):"},{"line_number":63,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":64,"context_line":"            task.driver.management.validate(task)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_validate_fail(self, mock_get_ov_client):"},{"line_number":67,"context_line":"        node \u003d obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_15711ea8","line":64,"in_reply_to":"9a1a9d01_1d32fc10","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"}],"ironic/tests/drivers/oneview/test_power.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   \"local_gb\": \"10\","},{"line_number":38,"context_line":"                   \"memory_mb\": \"4096\","},{"line_number":39,"context_line":"                   \"capabilities\": \"server_hardware_type_uri:fake_sht_uri,\""},{"line_number":40,"context_line":"                                   \"enclosure_group_uri:fake_eg_uri\"}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"DRIVER_INFO_DICT \u003d {\u0027server_hardware_uri\u0027: \u0027fake_uri\u0027,"},{"line_number":43,"context_line":"                    \u0027server_profile_template_uri\u0027: \u0027fake_spt_uri\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_ab686822","line":40,"updated":"2015-08-24 22:02:04.000000000","message":"nit: add trailing comma and put \u0027}\u0027 on next line.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                   \"local_gb\": \"10\","},{"line_number":38,"context_line":"                   \"memory_mb\": \"4096\","},{"line_number":39,"context_line":"                   \"capabilities\": \"server_hardware_type_uri:fake_sht_uri,\""},{"line_number":40,"context_line":"                                   \"enclosure_group_uri:fake_eg_uri\"}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"DRIVER_INFO_DICT \u003d {\u0027server_hardware_uri\u0027: \u0027fake_uri\u0027,"},{"line_number":43,"context_line":"                    \u0027server_profile_template_uri\u0027: \u0027fake_spt_uri\u0027}"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_f40db53e","line":40,"in_reply_to":"fa1b9901_ab686822","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"89a99ef1e96aece944c243169cbb731045ee520d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                   \"enclosure_group_uri:fake_eg_uri\"}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"DRIVER_INFO_DICT \u003d {\u0027server_hardware_uri\u0027: \u0027fake_uri\u0027,"},{"line_number":43,"context_line":"                    \u0027server_profile_template_uri\u0027: \u0027fake_spt_uri\u0027}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class OneViewPowerDriverTestCase(db_base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_6b725013","line":43,"updated":"2015-08-24 22:02:04.000000000","message":"nit: add trailing comma and put \u0027}\u0027 on next line.","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                   \"enclosure_group_uri:fake_eg_uri\"}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"DRIVER_INFO_DICT \u003d {\u0027server_hardware_uri\u0027: \u0027fake_uri\u0027,"},{"line_number":43,"context_line":"                    \u0027server_profile_template_uri\u0027: \u0027fake_spt_uri\u0027}"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class OneViewPowerDriverTestCase(db_base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_440b9224","line":43,"in_reply_to":"fa1b9901_6b725013","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"34aebb0eba34c81fd5fd995d4ff2196fc197f64f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.config(username\u003d\u0027user\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":55,"context_line":"        self.config(password\u003d\u0027password\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        mock_check_ov_status.return_value \u003d 200"},{"line_number":58,"context_line":"        mock_verify_ov_version.return_value \u003d 120"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_oneview\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_01ee138b","line":57,"updated":"2015-08-24 22:42:24.000000000","message":"use http_client.OK\n\nUse import six.moves.http_client as http_client","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"4f72c0545b127c9883f1083b3c0c9b7b7372bb3c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.config(username\u003d\u0027user\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":55,"context_line":"        self.config(password\u003d\u0027password\u0027, group\u003d\u0027oneview\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        mock_check_ov_status.return_value \u003d 200"},{"line_number":58,"context_line":"        mock_verify_ov_version.return_value \u003d 120"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\"fake_oneview\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_840bead5","line":57,"in_reply_to":"fa1b9901_01ee138b","updated":"2015-08-25 16:14:26.000000000","message":"Done","commit_id":"7caaaa6ac3b9a5756cc9105f1711b57d963474db"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_power_interface_validate(self, mock_get_ov_client):"},{"line_number":68,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":69,"context_line":"            task.driver.power.validate(task)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def test_power_interface_validate_fail(self, mock_get_ov_client):"},{"line_number":72,"context_line":"        node \u003d obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_90fa73bc","line":69,"updated":"2015-09-28 07:05:43.000000000","message":"Ditto better to make assertions on oneview client.","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_power_interface_validate(self, mock_get_ov_client):"},{"line_number":68,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":69,"context_line":"            task.driver.power.validate(task)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def test_power_interface_validate_fail(self, mock_get_ov_client):"},{"line_number":72,"context_line":"        node \u003d obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_b5c63298","line":69,"in_reply_to":"9a1a9d01_90fa73bc","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"}],"ironic/tests/drivers/test_utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4e39623ae1c42ea218c846f73728eff24ddbff37","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.assertEqual("},{"line_number":124,"context_line":"            {},"},{"line_number":125,"context_line":"            driver_utils.capabilities_to_dict(capabilities_without_items)"},{"line_number":126,"context_line":"        )"},{"line_number":127,"context_line":"        self.assertEqual("},{"line_number":128,"context_line":"            {\u0027e\u0027: \u0027f\u0027},"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_1f8e36d0","line":125,"updated":"2015-08-25 21:41:10.000000000","message":"nit: seems like could just pass empty string and not need to create a variable holding an empty string.","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"bb43ce77f08eaa2c89f2599e21ad25e7c52e7574","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.assertEqual("},{"line_number":124,"context_line":"            {},"},{"line_number":125,"context_line":"            driver_utils.capabilities_to_dict(capabilities_without_items)"},{"line_number":126,"context_line":"        )"},{"line_number":127,"context_line":"        self.assertEqual("},{"line_number":128,"context_line":"            {\u0027e\u0027: \u0027f\u0027},"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_9e40e8a6","line":125,"in_reply_to":"fa1b9901_1f8e36d0","updated":"2015-08-26 16:18:02.000000000","message":"Done","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4e39623ae1c42ea218c846f73728eff24ddbff37","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_capabilities_to_dict_with_invalid_character_fail(self):"},{"line_number":145,"context_line":"        capabilities_invalid_character_end \u003d \u0027xpto:a,\u0027"},{"line_number":146,"context_line":"        capabilities_invalid_character_beggining \u003d \u0027,xpto:a\u0027"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.assertRaises("},{"line_number":149,"context_line":"            exception.InvalidParameterValue,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_ff9ca26b","line":146,"updated":"2015-08-25 21:41:10.000000000","message":"nit: s/beggining/beginning/\n\nhttp://www.merriam-webster.com/dictionary/beginning","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"bb43ce77f08eaa2c89f2599e21ad25e7c52e7574","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def test_capabilities_to_dict_with_invalid_character_fail(self):"},{"line_number":145,"context_line":"        capabilities_invalid_character_end \u003d \u0027xpto:a,\u0027"},{"line_number":146,"context_line":"        capabilities_invalid_character_beggining \u003d \u0027,xpto:a\u0027"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.assertRaises("},{"line_number":149,"context_line":"            exception.InvalidParameterValue,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_de08a082","line":146,"in_reply_to":"fa1b9901_ff9ca26b","updated":"2015-08-26 16:18:02.000000000","message":"Haha. Thanks for noting. Done.","commit_id":"6348b157450bb8e06b3ec9b57d8ff9e47155ca3a"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        capabilities_invalid_character_end \u003d \u0027xpto:a,\u0027"},{"line_number":196,"context_line":"        capabilities_invalid_character_beginning \u003d \u0027,xpto:a\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        exc \u003d self.assertRaises("},{"line_number":199,"context_line":"            exception.InvalidParameterValue,"},{"line_number":200,"context_line":"            driver_utils.capabilities_to_dict,"},{"line_number":201,"context_line":"            capabilities_invalid_character_end"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_b091b754","line":198,"updated":"2015-09-28 07:05:43.000000000","message":"nit:\n\n  for capabilities in (\u0027xpto:a,\u0027, \u0027,xpto:a\u0027):\n    exc \u003d self.assertRaises(.....\n    .\n    .","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        capabilities_invalid_character_end \u003d \u0027xpto:a,\u0027"},{"line_number":196,"context_line":"        capabilities_invalid_character_beginning \u003d \u0027,xpto:a\u0027"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        exc \u003d self.assertRaises("},{"line_number":199,"context_line":"            exception.InvalidParameterValue,"},{"line_number":200,"context_line":"            driver_utils.capabilities_to_dict,"},{"line_number":201,"context_line":"            capabilities_invalid_character_end"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_80ae53e4","line":198,"in_reply_to":"9a1a9d01_b091b754","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"16bbb3881d1e54ba6aab2c676ad77accb338b42c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        capabilities_incomplete_value \u003d \u0027xpto:,\u0027"},{"line_number":215,"context_line":"        capabilities_incomplete_key_and_value \u003d \u0027:,\u0027"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        exc \u003d self.assertRaises("},{"line_number":218,"context_line":"            exception.InvalidParameterValue,"},{"line_number":219,"context_line":"            driver_utils.capabilities_to_dict,"},{"line_number":220,"context_line":"            capabilities_incomplete_key"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_d37c7574","line":217,"updated":"2015-09-28 07:05:43.000000000","message":"nit:\n\n  for capabilities in (\u0027:xpto,,\u0027, \u0027,xpto:\u0027, \u0027:,\u0027):\n    exc \u003d self.assertRaises(.....\n    .\n    .","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"},{"author":{"_account_id":14923,"name":"Sinval Vieira Mendes Neto","email":"sinvalneto01@gmail.com","username":"sinvalvieira"},"change_message_id":"771d23790c1b585b15a251ff59147d08e430068d","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        capabilities_incomplete_value \u003d \u0027xpto:,\u0027"},{"line_number":215,"context_line":"        capabilities_incomplete_key_and_value \u003d \u0027:,\u0027"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        exc \u003d self.assertRaises("},{"line_number":218,"context_line":"            exception.InvalidParameterValue,"},{"line_number":219,"context_line":"            driver_utils.capabilities_to_dict,"},{"line_number":220,"context_line":"            capabilities_incomplete_key"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a1a9d01_20b7473b","line":217,"in_reply_to":"9a1a9d01_d37c7574","updated":"2015-09-30 20:58:39.000000000","message":"Done","commit_id":"b07c17868d9163d12869df8d445ef4e3c46e65ac"}],"ironic/tests/unit/drivers/modules/oneview/test_management.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"oneview_exceptions \u003d importutils.try_import(\u0027oneview_client.exceptions\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# TODO(any): move this variable to db_utils.get_test_oneview_properties()"},{"line_number":36,"context_line":"PROPERTIES_DICT \u003d {\"cpu_arch\": \"x86_64\","},{"line_number":37,"context_line":"                   \"cpus\": \"8\","},{"line_number":38,"context_line":"                   \"local_gb\": \"10\","}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_2a572e59","line":35,"updated":"2015-10-08 13:53:48.000000000","message":"Nit: this should be the name of the person that added the TODO, for example TODO(thiagop). Anybody can take care of it, no matter whose name is on it.\n\nAlso, why not just do this now? :)","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"oneview_exceptions \u003d importutils.try_import(\u0027oneview_client.exceptions\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# TODO(any): move this variable to db_utils.get_test_oneview_properties()"},{"line_number":36,"context_line":"PROPERTIES_DICT \u003d {\"cpu_arch\": \"x86_64\","},{"line_number":37,"context_line":"                   \"cpus\": \"8\","},{"line_number":38,"context_line":"                   \"local_gb\": \"10\","}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_7f04ff48","line":35,"in_reply_to":"7a2fa921_2a572e59","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9b4a18a7f4ce5c888d26541f48fb7c2f3d0b1dab","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                task"},{"line_number":185,"context_line":"            )"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def test_get_sensors_data_not_implemmented(self, mock_get_ov_client):"},{"line_number":188,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":189,"context_line":"            self.assertRaises("},{"line_number":190,"context_line":"                NotImplementedError,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_45413b37","line":187,"updated":"2015-10-08 13:53:48.000000000","message":"Nit: s/implemmented/implemented/ :P","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"},{"author":{"_account_id":10697,"name":"Thiago Paiva Brito","email":"thiagop@lsd.ufcg.edu.br","username":"thiagop","inactive":true},"change_message_id":"65efe8175110bed38c11213bcfccaaa7a4c592a4","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                task"},{"line_number":185,"context_line":"            )"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def test_get_sensors_data_not_implemmented(self, mock_get_ov_client):"},{"line_number":188,"context_line":"        with task_manager.acquire(self.context, self.node.uuid) as task:"},{"line_number":189,"context_line":"            self.assertRaises("},{"line_number":190,"context_line":"                NotImplementedError,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a2fa921_dfeaf373","line":187,"in_reply_to":"7a2fa921_45413b37","updated":"2015-10-08 21:59:22.000000000","message":"Done","commit_id":"69ef2385d660d37ce2d5a5f2d64088b2cff07baa"}]}
