)]}'
{"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"617c88a35f9cfe8d701943135fa33de3013063f5","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        driver_info \u003d _parse_driver_info(node)"},{"line_number":195,"context_line":"        error_msg \u003d _(\"BMC unaccessible for node %s.\") % node.uuid"},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":200,"context_line":"        if len(out_err[0]) \u003c 3:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BerE%3D","line":197,"updated":"2014-01-25 08:27:35.000000000","message":"This _exec_ipmitool() method(will attempt 3 times(L101) if the command fail, so for our validate method, that is no need to have try with 3 times, so how do you think if we add new parameter for _exec_ipmitool() method, default is 3 as below?\n\n    def _exec_ipmitool(driver_info, command, attempts\u003d3):\n         ...\n\nso we just call it with \"attempts\u003d1\" here for validation action:\n    \n    _exec_ipmitool(driver_info, \"mc info\", attempts\u003d1)","commit_id":"2dab41ce0de1e3fcb90870b445c87419b0fa6f7a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"20f8588d3152187823cb9b45053047b4ae648334","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        driver_info \u003d _parse_driver_info(node)"},{"line_number":195,"context_line":"        error_msg \u003d _(\"BMC unaccessible for node %s.\") % node.uuid"},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":200,"context_line":"        if len(out_err[0]) \u003c 3:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BeNI%3D","line":197,"in_reply_to":"AAAAUH%2F%2BerE%3D","updated":"2014-01-25 15:17:11.000000000","message":"Haomeng, I think that we should not change this w/o test in real environment. And this attempts run w/o delay.","commit_id":"2dab41ce0de1e3fcb90870b445c87419b0fa6f7a"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"617c88a35f9cfe8d701943135fa33de3013063f5","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":200,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":201,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Beqk%3D","line":199,"updated":"2014-01-25 08:27:35.000000000","message":"How do you think if we pass the exception message to user, then we can see the error details directly from client, such as which parameter is wrong, and what is the error message returned by ipmitool command, that is very important message for user to root cause the issue.","commit_id":"2dab41ce0de1e3fcb90870b445c87419b0fa6f7a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"20f8588d3152187823cb9b45053047b4ae648334","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":200,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":201,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BeNk%3D","line":199,"in_reply_to":"AAAAUH%2F%2Beqk%3D","updated":"2014-01-25 15:17:11.000000000","message":"Good point.","commit_id":"2dab41ce0de1e3fcb90870b445c87419b0fa6f7a"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"617c88a35f9cfe8d701943135fa33de3013063f5","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":200,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":201,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Beq4%3D","line":200,"updated":"2014-01-25 08:27:35.000000000","message":"Here is very confusing:\n\nI understand the out_err[0] should be command strout message [1], so why we check this?\nWhy this logic - if the len is less than 3 then it is InvalidParameterValue exception?\n\n\n[1] https://github.com/openstack/oslo-incubator/blob/master/openstack/common/processutils.py#L116","commit_id":"2dab41ce0de1e3fcb90870b445c87419b0fa6f7a"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"20f8588d3152187823cb9b45053047b4ae648334","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":198,"context_line":"        except Exception:"},{"line_number":199,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":200,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":201,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BeN0%3D","line":200,"in_reply_to":"AAAAUH%2F%2Beq4%3D","updated":"2014-01-25 15:17:11.000000000","message":"Because \u0027mc info\u0027 should return some vendor-specific info about BMC http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic\u003d%2Fliaai.ipmi%2Fliaaiipmiconsid.htm","commit_id":"2dab41ce0de1e3fcb90870b445c87419b0fa6f7a"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"9b13cc9a10a6ed92ea3d73b72777750bdfa9e386","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":213,"context_line":"        except Exception as e:"},{"line_number":214,"context_line":"            error_msg \u003d msg + str(e)"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":216,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":217,"context_line":"            error_msg \u003d msg + out_err[1]"},{"line_number":218,"context_line":"            raise exception.InvalidParameterValue(error_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BWDo%3D","line":215,"updated":"2014-01-27 20:43:52.000000000","message":"Maybe defining a BMCUnaccessible exception is better?","commit_id":"ef8a9978a106210a92abf0503fa5e6198179e3cf"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"18189992c96313e0de7ddb30dad7e3b22c89fe4f","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            out_err \u003d _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":213,"context_line":"        except Exception as e:"},{"line_number":214,"context_line":"            error_msg \u003d msg + str(e)"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":216,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":217,"context_line":"            error_msg \u003d msg + out_err[1]"},{"line_number":218,"context_line":"            raise exception.InvalidParameterValue(error_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BTNk%3D","line":215,"in_reply_to":"AAAAUH%2F%2BWDo%3D","updated":"2014-01-28 08:37:31.000000000","message":"Roman, validate() method should raise InvalidParameterValue.","commit_id":"ef8a9978a106210a92abf0503fa5e6198179e3cf"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b18e8d2ad72bc7b3fe78d5d89cce95534f18587d","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        except Exception as e:"},{"line_number":214,"context_line":"            error_msg \u003d msg + str(e)"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":216,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":217,"context_line":"            error_msg \u003d msg + out_err[1]"},{"line_number":218,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BRyw%3D","line":216,"updated":"2014-01-28 13:48:07.000000000","message":"Thanks Roman, Haomeng. After investigating ipmitool source code I think that best way for errors handling is check exit code which is enabled by default.","commit_id":"ef8a9978a106210a92abf0503fa5e6198179e3cf"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"9b13cc9a10a6ed92ea3d73b72777750bdfa9e386","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        except Exception as e:"},{"line_number":214,"context_line":"            error_msg \u003d msg + str(e)"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":216,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":217,"context_line":"            error_msg \u003d msg + out_err[1]"},{"line_number":218,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BWCI%3D","line":216,"updated":"2014-01-27 20:43:52.000000000","message":"What is that magic 3? Could you please add a comment for it?","commit_id":"ef8a9978a106210a92abf0503fa5e6198179e3cf"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"da08e009f758b83ac7c0d1bc935b31c9cd342a44","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        except Exception as e:"},{"line_number":214,"context_line":"            error_msg \u003d msg + str(e)"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":216,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":217,"context_line":"            error_msg \u003d msg + out_err[1]"},{"line_number":218,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BTDw%3D","line":216,"in_reply_to":"AAAAUH%2F%2BTMw%3D","updated":"2014-01-28 09:12:47.000000000","message":"Can you add more comments into the code here, so we can understand this special logic with inline comments?","commit_id":"ef8a9978a106210a92abf0503fa5e6198179e3cf"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"18189992c96313e0de7ddb30dad7e3b22c89fe4f","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        except Exception as e:"},{"line_number":214,"context_line":"            error_msg \u003d msg + str(e)"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":216,"context_line":"        if len(out_err[0]) \u003c 3:"},{"line_number":217,"context_line":"            error_msg \u003d msg + out_err[1]"},{"line_number":218,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BTMw%3D","line":216,"in_reply_to":"AAAAUH%2F%2BWCI%3D","updated":"2014-01-28 08:37:31.000000000","message":"\u0027mc info\u0027 should return some vendor-specific info about BMC, for example: http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic\u003d%2Fliaai.ipmi%2Fliaaiipmiconsid.htm\nAnd if specific info does not return LF symbol can be present in stdout.","commit_id":"ef8a9978a106210a92abf0503fa5e6198179e3cf"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d7443e987bcf8252956570ebb5f98e91a19ba946","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        \"\"\"Validate driver_info for ipmitool driver."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        Check that node[\u0027driver_info\u0027] contains IPMI credentials and BMC is"},{"line_number":204,"context_line":"        accessible with this credentials."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        :param node: Single node object."},{"line_number":207,"context_line":"        :raises: InvalidParameterValue"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2FfTc%3D","line":204,"updated":"2014-02-12 20:35:48.000000000","message":"small nit (if you do another version). s/this/these/.","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":7411,"name":"Matt Wagner","email":"matt.wagner@redhat.com","username":"matty_dubs"},"change_message_id":"d0ab572bcd8dc9d51b59a7425ef42a1407fe329c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BO2M%3D","line":214,"updated":"2014-01-28 21:04:45.000000000","message":"In the event that you specify an unreachable host, this won\u0027t raise until ipmitool times out, which seems to be 30-60 seconds. Fairly annoying. I don\u0027t know that there\u0027s an easy fix, though -- the only solution I\u0027m aware of would be to lower the timeout, and that risks false negatives.\n\nSo I don\u0027t think you should do anything different, just noting it as something people might complain about if they give an incorrect IPMI address.","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"0061913fc6aebd4505b68e0b6821fe358b9879a8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BMO4%3D","line":214,"updated":"2014-01-29 08:47:11.000000000","message":"Ipmitool sources contain long timeouts only for some FW operations. I think tests with real hardware will be useful.","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"9a1d3f224a464d5ff7d688bd15486756e0599704","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F92Vk%3D","line":214,"in_reply_to":"AAAAUH%2F%2BMO4%3D","updated":"2014-02-03 10:47:32.000000000","message":"Isn\u0027t there a way to specify the timeout explicitly?","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"a3276ae37f3524b890620487c0fda5d50cce9378","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BNoA%3D","line":214,"in_reply_to":"AAAAUH%2F%2BO2M%3D","updated":"2014-01-29 01:02:29.000000000","message":"And _exec_ipmitool() method(will attempt 3 times(L101) in case of unreachable host, so long time delay/blocking here, will have potential performance issue I think.","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2913f20354faf6014692956e8ea1cc4fb095e3ec","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2FF20%3D","line":214,"in_reply_to":"AAAAUH%2F92C4%3D","updated":"2014-02-17 07:32:54.000000000","message":"Yes, for the online ipmi, it will return quickly with MAC address, however for the  offline ipmi node, about 2 or 3 minutes are required for running this command 3 times (Line 101) with IP address.\n\nhttp://paste.openstack.org/show/66375/\n\nSo I suggest to run command just one time, and add a new parameter with default value  \u0027attempts\u003d1\u0027 to control the default times. For such \u0027mc info\u0027 ping, one time command run is enough for us, eventhrough we get can not establish the connection with target IPMI.\n\nStill have concern that we will try to run 3 times and got 2 or 3 minutes delay for getting response if can not connect to IPMI node or other error with ipmitool command call.","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"e6a8bde86e4536a19159888159e5950932b6fbf9","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F92C4%3D","line":214,"in_reply_to":"AAAAUH%2F92Go%3D","updated":"2014-02-03 12:02:34.000000000","message":"I tried to run ipmitool for a fake mac address (aka, unreachable host). The timings seem to be just fine: http://paste.openstack.org/show/62375/","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"29776f9d0f30fa93863dea7f1b0779cf86484eb4","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":212,"context_line":"        except Exception as e:"},{"line_number":213,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":214,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":215,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_power_state(self, task, node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F92Go%3D","line":214,"in_reply_to":"AAAAUH%2F92Vk%3D","updated":"2014-02-03 11:38:01.000000000","message":"New ipmitool version 1.8.13 (not widely used 1.8.11) has \u0027-N\u0027 option for specify timeout for lan. Even in this case many other timeouts are hardcoded in ipmitool.","commit_id":"a79f672a455f22d7df3e866430a40972bf4c192f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"4f25adb64026eb0c114a9bf3aacd3e5eedcd099b","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \"\"\""},{"line_number":249,"context_line":"        driver_info \u003d _parse_driver_info(node)"},{"line_number":250,"context_line":"        try:"},{"line_number":251,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":254,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAVn%2F%2FgUE%3D","line":251,"updated":"2014-03-05 18:01:00.000000000","message":"Hi yuriy, I tested \"mc info\" and it returns a good bit of info, maybe we should go for something \"smaller\"? I would suggest using the \"mc guid\" command, because it will only returns something like:\n\nSystem GUID  : \u003cuuid\u003e\nTimestamp    : 03/28/2050 21:50:17\n\nThoughts?","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ea3d74d996738522340b92db0113a3012fdbf85","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \"\"\""},{"line_number":249,"context_line":"        driver_info \u003d _parse_driver_info(node)"},{"line_number":250,"context_line":"        try:"},{"line_number":251,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":254,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2F2aw%3D","line":251,"in_reply_to":"AAAAVn%2F%2FgUE%3D","updated":"2014-03-13 11:52:49.000000000","message":"Agree.","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0c4ac737837fec93d803e95d57271c0bff25608","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        try:"},{"line_number":251,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":254,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":255,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2FoQE%3D","line":253,"updated":"2014-02-25 15:26:12.000000000","message":"I think the more correct term is \u0027inaccessible\u0027, but this is good enough :-)","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ea3d74d996738522340b92db0113a3012fdbf85","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        try:"},{"line_number":251,"context_line":"            _exec_ipmitool(driver_info, \"mc info\")"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            msg \u003d _(\"BMC unaccessible for node %(node)s: \""},{"line_number":254,"context_line":"                    \"%(error)s\") % {\u0027node\u0027: node.uuid, \u0027error\u0027: e}"},{"line_number":255,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2F2Z0%3D","line":253,"in_reply_to":"AAAAU3%2F%2FoQE%3D","updated":"2014-03-13 11:52:49.000000000","message":"Done","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"}],"ironic/tests/drivers/test_ipmitool.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"f3c80a67cf6091d1fa2b350135d155973bbc2a69","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            boot_mock.assert_called_once_with(task, self.node,"},{"line_number":443,"context_line":"                                              \u0027pxe\u0027, False)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def test_validate_ok(self):"},{"line_number":446,"context_line":"        with mock.patch.object(ipmi, \u0027_exec_ipmitool\u0027) as exec_mock:"},{"line_number":447,"context_line":"            exec_mock.return_value \u003d (\u0027Fake BMC info\u0027, \u0027\u0027)"},{"line_number":448,"context_line":"            with task_manager.acquire(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2F%2BY0%3D","line":445,"updated":"2014-03-12 15:54:00.000000000","message":"Please use mock-decorators","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ea3d74d996738522340b92db0113a3012fdbf85","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            boot_mock.assert_called_once_with(task, self.node,"},{"line_number":443,"context_line":"                                              \u0027pxe\u0027, False)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def test_validate_ok(self):"},{"line_number":446,"context_line":"        with mock.patch.object(ipmi, \u0027_exec_ipmitool\u0027) as exec_mock:"},{"line_number":447,"context_line":"            exec_mock.return_value \u003d (\u0027Fake BMC info\u0027, \u0027\u0027)"},{"line_number":448,"context_line":"            with task_manager.acquire(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2F2T8%3D","line":445,"in_reply_to":"AAAAWH%2F%2F%2BY0%3D","updated":"2014-03-13 11:52:49.000000000","message":"Done","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"f3c80a67cf6091d1fa2b350135d155973bbc2a69","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                task.driver.power.validate(task, task.node)"},{"line_number":451,"context_line":"                exec_mock.assert_called_once()"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_validate_fail(self):"},{"line_number":454,"context_line":"        with mock.patch.object(ipmi, \u0027_exec_ipmitool\u0027) as exec_mock:"},{"line_number":455,"context_line":"            exec_mock.side_effect \u003d Exception"},{"line_number":456,"context_line":"            with task_manager.acquire(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2F%2BYs%3D","line":453,"updated":"2014-03-12 15:54:00.000000000","message":"ditto","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"4ea3d74d996738522340b92db0113a3012fdbf85","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                task.driver.power.validate(task, task.node)"},{"line_number":451,"context_line":"                exec_mock.assert_called_once()"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_validate_fail(self):"},{"line_number":454,"context_line":"        with mock.patch.object(ipmi, \u0027_exec_ipmitool\u0027) as exec_mock:"},{"line_number":455,"context_line":"            exec_mock.side_effect \u003d Exception"},{"line_number":456,"context_line":"            with task_manager.acquire(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2F2T4%3D","line":453,"in_reply_to":"AAAAWH%2F%2F%2BYs%3D","updated":"2014-03-13 11:52:49.000000000","message":"Done","commit_id":"fa13ab75574990fcd2f0a995243674dc2afc6d6d"}]}
