)]}'
{"ironic/drivers/modules/ipminative.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9bfb3f3bf88a4a8229cf2bb4bde37a0a8dfc8965","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                          % {\u0027node_id\u0027: driver_info[\u0027uuid\u0027], \u0027error\u0027: str(e)})"},{"line_number":297,"context_line":"            raise exception.IPMIFailure(cmd\u003dstr(e))"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def validate(self, node, **kwargs):"},{"line_number":300,"context_line":"        method \u003d kwargs[\u0027method\u0027]"},{"line_number":301,"context_line":"        if method \u003d\u003d \u0027set_boot_device\u0027:"},{"line_number":302,"context_line":"            device \u003d kwargs.get(\u0027device\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BjMU%3D","line":299,"updated":"2014-02-20 15:32:42.000000000","message":"It would be good to add docstrings to this and vendor_passthru() since the rest of the file seems to have docstrings.","commit_id":"f3a226876c92369841fb25d7b962e5d1bdde3aef"},{"author":{"_account_id":1726,"name":"Ghe Rivero","email":"ghe.rivero@gmail.com","username":"ghe.rivero"},"change_message_id":"bbe64966c69378cea3979b108fa837d50b5022e7","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                          % {\u0027node_id\u0027: driver_info[\u0027uuid\u0027], \u0027error\u0027: str(e)})"},{"line_number":297,"context_line":"            raise exception.IPMIFailure(cmd\u003dstr(e))"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def validate(self, node, **kwargs):"},{"line_number":300,"context_line":"        method \u003d kwargs[\u0027method\u0027]"},{"line_number":301,"context_line":"        if method \u003d\u003d \u0027set_boot_device\u0027:"},{"line_number":302,"context_line":"            device \u003d kwargs.get(\u0027device\u0027, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2Bi4g%3D","line":299,"in_reply_to":"AAAAUX%2F%2BjMU%3D","updated":"2014-02-20 15:58:24.000000000","message":"Done","commit_id":"f3a226876c92369841fb25d7b962e5d1bdde3aef"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9bfb3f3bf88a4a8229cf2bb4bde37a0a8dfc8965","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def validate(self, node, **kwargs):"},{"line_number":300,"context_line":"        method \u003d kwargs[\u0027method\u0027]"},{"line_number":301,"context_line":"        if method \u003d\u003d \u0027set_boot_device\u0027:"},{"line_number":302,"context_line":"            device \u003d kwargs.get(\u0027device\u0027, None)"},{"line_number":303,"context_line":"            if device not in ipmi_command.boot_devices:"},{"line_number":304,"context_line":"                raise exception.InvalidParameterValue(_("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BjMw%3D","line":301,"updated":"2014-02-20 15:32:42.000000000","message":"_set_boot_device() calls _parse_driver_info() to check for valid parameters. As part of this validation, should _parse_driver_info() also be called?","commit_id":"f3a226876c92369841fb25d7b962e5d1bdde3aef"},{"author":{"_account_id":1726,"name":"Ghe Rivero","email":"ghe.rivero@gmail.com","username":"ghe.rivero"},"change_message_id":"bbe64966c69378cea3979b108fa837d50b5022e7","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    def validate(self, node, **kwargs):"},{"line_number":300,"context_line":"        method \u003d kwargs[\u0027method\u0027]"},{"line_number":301,"context_line":"        if method \u003d\u003d \u0027set_boot_device\u0027:"},{"line_number":302,"context_line":"            device \u003d kwargs.get(\u0027device\u0027, None)"},{"line_number":303,"context_line":"            if device not in ipmi_command.boot_devices:"},{"line_number":304,"context_line":"                raise exception.InvalidParameterValue(_("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2Bi4c%3D","line":301,"in_reply_to":"AAAAUX%2F%2BjMw%3D","updated":"2014-02-20 15:58:24.000000000","message":"Done","commit_id":"f3a226876c92369841fb25d7b962e5d1bdde3aef"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9988ea49c8778c4574ff46320cc41b9e11a49bbb","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        :param kwargs: the keyword arguments supplied"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is specified,"},{"line_number":305,"context_line":"                 required ipmi credentials are missing or and invalid method"},{"line_number":306,"context_line":"                 is requested to the driver."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":"        method \u003d kwargs[\u0027method\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2Bf8M%3D","line":305,"updated":"2014-02-20 20:58:12.000000000","message":"\u0027and\u0027 -\u003e \u0027an\u0027","commit_id":"fd59c909636536c2c9847d22242db484c488b7ce"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"740f0ebbe373924bc558f79eb9c42546ce04a231","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                \"Unsupported method (%s) passed to IPMINative driver.\")"},{"line_number":317,"context_line":"                % method)"},{"line_number":318,"context_line":"        _parse_driver_info(node)"},{"line_number":319,"context_line":"        return True"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def vendor_passthru(self, task, node, **kwargs):"},{"line_number":322,"context_line":"        \"\"\"Receive requests for vendor-specific actions."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2Fzk0%3D","line":319,"updated":"2014-02-24 18:09:23.000000000","message":"I think this return value is not needed, as we won\u0027t check it anywhere. AFAIR current strategy is None OR Exception. We don\u0027t have any paths returning False right? Therefore don\u0027t need to split True/False at all, just return None all the time, or exception\n\nOld implementation (not checking what returned):\n\nhttps://github.com/openstack/ironic/blob/master/ironic/conductor/rpcapi.py#L166-L180\n\nNew implementation (same):\n\nhttps://review.openstack.org/#/c/74063/\n\nAlso there\u0027s inconsistency with other vendor passthru:\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ipmitool.py#L347-L357 (not doing _parse_driver_info in validate, returning bool - ignore that, I\u0027ll fix that in a separate patch)","commit_id":"fd59c909636536c2c9847d22242db484c488b7ce"}],"ironic/tests/drivers/test_ipminative.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"a7c3da9ead9c52615b578b21655a03eb06cd3f10","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                                  shared\u003dTrue) as task:"},{"line_number":268,"context_line":"            self.assertRaises(exception.InvalidParameterValue,"},{"line_number":269,"context_line":"                              task.resources[0].driver.vendor.validate,"},{"line_number":270,"context_line":"                              self.node, method\u003d\u0027fake_method\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2FjSg%3D","line":270,"updated":"2014-02-12 12:29:30.000000000","message":"Also need to cover vendor_passthru method (mock _set_boot_device and check that it\u0027s called with correct parameters)","commit_id":"57aeae1ddd13ac904bca845cef2baaaf4d067cea"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"740f0ebbe373924bc558f79eb9c42546ce04a231","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                                    method\u003d\u0027set_boot_device\u0027,"},{"line_number":247,"context_line":"                                    device\u003d\u0027pxe\u0027)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def test_vendor_passthru_validate__set_boot_device_fail(self):"},{"line_number":250,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":251,"context_line":"                          self.driver.vendor.validate,"},{"line_number":252,"context_line":"                          self.node, method\u003d\u0027set_boot_device\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2FzWc%3D","line":249,"updated":"2014-02-24 18:09:23.000000000","message":"__set_boot_device_fail_unknown_device","commit_id":"fd59c909636536c2c9847d22242db484c488b7ce"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"740f0ebbe373924bc558f79eb9c42546ce04a231","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":251,"context_line":"                          self.driver.vendor.validate,"},{"line_number":252,"context_line":"                          self.node, method\u003d\u0027set_boot_device\u0027,"},{"line_number":253,"context_line":"                          device\u003d\u0027fake\u0027)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def test_vendor_passthru_validate__set_boot_device_fail_no_device(self):"},{"line_number":256,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2Fzco%3D","line":253,"updated":"2014-02-24 18:09:23.000000000","message":"would you please change \u0027fake\u0027 to \u0027non-existent\u0027 because we have a valid driver name \u0027fake\u0027 which is used in some tests, so this one may mislead a little.","commit_id":"fd59c909636536c2c9847d22242db484c488b7ce"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"740f0ebbe373924bc558f79eb9c42546ce04a231","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                          self.node, method\u003d\u0027set_boot_device\u0027,"},{"line_number":253,"context_line":"                          device\u003d\u0027fake\u0027)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def test_vendor_passthru_validate__set_boot_device_fail_no_device(self):"},{"line_number":256,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":257,"context_line":"                          self.driver.vendor.validate,"},{"line_number":258,"context_line":"                          self.node, method\u003d\u0027set_boot_device\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2FzXE%3D","line":255,"updated":"2014-02-24 18:09:23.000000000","message":"__set_boot_device_fail_missed_device_arg","commit_id":"fd59c909636536c2c9847d22242db484c488b7ce"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"740f0ebbe373924bc558f79eb9c42546ce04a231","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    def test_vendor_passthru_validate_method_notmatch(self):"},{"line_number":261,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":262,"context_line":"                          self.driver.vendor.validate,"},{"line_number":263,"context_line":"                          self.node, method\u003d\u0027fake_method\u0027)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def test_vendor_passthru_call__set_boot_device(self):"},{"line_number":266,"context_line":"        with task_manager.acquire(self.context, [self.node[\u0027uuid\u0027]],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2FzWE%3D","line":263,"updated":"2014-02-24 18:09:23.000000000","message":"non-existent-method would be great","commit_id":"fd59c909636536c2c9847d22242db484c488b7ce"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"8169fe95612d07378f5a6bcc01e4049180fdcb10","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                          self.driver.vendor.validate,"},{"line_number":264,"context_line":"                          self.node, method\u003d\u0027fake_method\u0027)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def test_vendor_passthru_call__set_boot_device(self):"},{"line_number":267,"context_line":"        with task_manager.acquire(self.context, [self.node[\u0027uuid\u0027]],"},{"line_number":268,"context_line":"                                  shared\u003dFalse) as task:"},{"line_number":269,"context_line":"            with mock.patch.object(ipminative.VendorPassthru,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F41M%3D","line":266,"updated":"2014-02-27 15:32:46.000000000","message":"Better to use a decorator. \u003d)\n\n    @mock.patch.object(ipmi.VendorPassthru, \u0027_set_boot_device\u0027)","commit_id":"ccb4267f4245c3e659cf818c093f7200baeaec62"},{"author":{"_account_id":6623,"name":"Roman Prykhodchenko","email":"me@romcheg.me","username":"prykhodchenko"},"change_message_id":"ef81d7ea73a6dc6691d71c8af396c1e6fb5c5a91","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                          self.driver.vendor.validate,"},{"line_number":264,"context_line":"                          self.node, method\u003d\u0027fake_method\u0027)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def test_vendor_passthru_call__set_boot_device(self):"},{"line_number":267,"context_line":"        with task_manager.acquire(self.context, [self.node[\u0027uuid\u0027]],"},{"line_number":268,"context_line":"                                  shared\u003dFalse) as task:"},{"line_number":269,"context_line":"            with mock.patch.object(ipminative.VendorPassthru,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVX%2F%2F3PE%3D","line":266,"in_reply_to":"AAAAVX%2F%2F41M%3D","updated":"2014-02-27 18:34:37.000000000","message":"I think we will fix mocks in a separate patch.","commit_id":"ccb4267f4245c3e659cf818c093f7200baeaec62"}]}
