)]}'
{"ironic/conductor/manager.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"426068696137fea30ce6defc2cc34a6f64710d24","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                                        **info)"},{"line_number":278,"context_line":"            task.spawn_after(self._spawn_worker,"},{"line_number":279,"context_line":"                             task.driver.vendor.vendor_passthru, task,"},{"line_number":280,"context_line":"                             task.node, method\u003ddriver_method, **info)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @messaging.expected_exceptions(exception.InvalidParameterValue,"},{"line_number":283,"context_line":"                                   exception.UnsupportedDriverExtension,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_76948d37","line":280,"updated":"2014-04-29 12:55:32.000000000","message":"Shouldn\u0027t \u0027task.node\u0027 be removed from arguments?","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"95a15f24d45e41116a9a56e777277baaab478c3f","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                                        **info)"},{"line_number":278,"context_line":"            task.spawn_after(self._spawn_worker,"},{"line_number":279,"context_line":"                             task.driver.vendor.vendor_passthru, task,"},{"line_number":280,"context_line":"                             task.node, method\u003ddriver_method, **info)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @messaging.expected_exceptions(exception.InvalidParameterValue,"},{"line_number":283,"context_line":"                                   exception.UnsupportedDriverExtension,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_7888f722","line":280,"in_reply_to":"bad4c104_76948d37","updated":"2014-04-29 15:12:16.000000000","message":"+1 it came with the rebased. Thank you for pointing it out.","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"651b8e6b213912f9eda9ea987cd5b3272631a40b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    driver\u003dtask.node.driver,"},{"line_number":274,"context_line":"                    extension\u003d\u0027vendor passthru\u0027)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            task.driver.vendor.validate(task, method\u003ddriver_method,"},{"line_number":277,"context_line":"                                        **info)"},{"line_number":278,"context_line":"            task.spawn_after(self._spawn_worker,"},{"line_number":279,"context_line":"                             task.driver.vendor.vendor_passthru, task,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_2ec70047","line":276,"updated":"2014-04-30 18:38:47.000000000","message":"Nit: This line wrap should be unnecessary now.","commit_id":"73b02ec9b1afe2b5cb1d123b067ed60e582fdffc"}],"ironic/conductor/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"426068696137fea30ce6defc2cc34a6f64710d24","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        pass"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@task_manager.require_exclusive_lock"},{"line_number":46,"context_line":"def node_power_action(task, node, state):"},{"line_number":47,"context_line":"    \"\"\"Change power state or reset for a node."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_36aa0571","line":45,"updated":"2014-04-29 12:55:32.000000000","message":"Btw, what about this group of methods, is `node` required here?","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"95a15f24d45e41116a9a56e777277baaab478c3f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        pass"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@task_manager.require_exclusive_lock"},{"line_number":46,"context_line":"def node_power_action(task, node, state):"},{"line_number":47,"context_line":"    \"\"\"Change power state or reset for a node."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_b8b0bfde","line":45,"in_reply_to":"bad4c104_36aa0571","updated":"2014-04-29 15:12:16.000000000","message":"It doesn\u0027t require the node attribute, but this function is not related to the VendorPassthru (since no methods in the VendorPassthru touches it) so it needs to be changed in another patch (probably the one removing the node parameter from the Power interface)","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"}],"ironic/drivers/modules/ipminative.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"426068696137fea30ce6defc2cc34a6f64710d24","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                 required ipmi credentials are missing or an invalid method"},{"line_number":305,"context_line":"                 is requested to the driver."},{"line_number":306,"context_line":"        \"\"\""},{"line_number":307,"context_line":"        node \u003d task.node"},{"line_number":308,"context_line":"        method \u003d kwargs[\u0027method\u0027]"},{"line_number":309,"context_line":"        if method \u003d\u003d \u0027set_boot_device\u0027:"},{"line_number":310,"context_line":"            device \u003d kwargs.get(\u0027device\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_96e751e4","line":307,"updated":"2014-04-29 12:55:32.000000000","message":"node is used only once in this method, you may get rid of temporary variable","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"95a15f24d45e41116a9a56e777277baaab478c3f","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                 required ipmi credentials are missing or an invalid method"},{"line_number":305,"context_line":"                 is requested to the driver."},{"line_number":306,"context_line":"        \"\"\""},{"line_number":307,"context_line":"        node \u003d task.node"},{"line_number":308,"context_line":"        method \u003d kwargs[\u0027method\u0027]"},{"line_number":309,"context_line":"        if method \u003d\u003d \u0027set_boot_device\u0027:"},{"line_number":310,"context_line":"            device \u003d kwargs.get(\u0027device\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_d83ae335","line":307,"in_reply_to":"bad4c104_96e751e4","updated":"2014-04-29 15:12:16.000000000","message":"done","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"}],"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"426068696137fea30ce6defc2cc34a6f64710d24","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        :raises: IPMIFailure on an error from ipmitool."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        \"\"\""},{"line_number":357,"context_line":"        node \u003d task.node"},{"line_number":358,"context_line":"        if device not in VALID_BOOT_DEVICES:"},{"line_number":359,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":360,"context_line":"                \"Invalid boot device %s specified.\") % device)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_f6f41d89","line":357,"updated":"2014-04-29 12:55:32.000000000","message":"ditto, you don\u0027t actually need temporary variable here","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"95a15f24d45e41116a9a56e777277baaab478c3f","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        :raises: IPMIFailure on an error from ipmitool."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        \"\"\""},{"line_number":357,"context_line":"        node \u003d task.node"},{"line_number":358,"context_line":"        if device not in VALID_BOOT_DEVICES:"},{"line_number":359,"context_line":"            raise exception.InvalidParameterValue(_("},{"line_number":360,"context_line":"                \"Invalid boot device %s specified.\") % device)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_98305b58","line":357,"in_reply_to":"bad4c104_f6f41d89","updated":"2014-04-29 15:12:16.000000000","message":"done","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"}],"ironic/drivers/modules/seamicro.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"426068696137fea30ce6defc2cc34a6f64710d24","unresolved":false,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        @kwargs device: Boot device. One of [pxe, disk]"},{"line_number":473,"context_line":"        \"\"\""},{"line_number":474,"context_line":"        node \u003d task.node"},{"line_number":475,"context_line":"        boot_device \u003d kwargs.get(\u0027device\u0027)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        if boot_device is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_562b09eb","line":474,"updated":"2014-04-29 12:55:32.000000000","message":"ditto, about node","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"95a15f24d45e41116a9a56e777277baaab478c3f","unresolved":false,"context_lines":[{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        @kwargs device: Boot device. One of [pxe, disk]"},{"line_number":473,"context_line":"        \"\"\""},{"line_number":474,"context_line":"        node \u003d task.node"},{"line_number":475,"context_line":"        boot_device \u003d kwargs.get(\u0027device\u0027)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        if boot_device is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_58efb3b0","line":474,"in_reply_to":"bad4c104_562b09eb","updated":"2014-04-29 15:12:16.000000000","message":"done","commit_id":"855ceb81589c4ab29b9077a48284d3a19c7e2cbf"}],"ironic/tests/drivers/test_ipminative.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"774511eb50139d19970eceff733bb1a4ed4d8ae9","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    def test_vendor_passthru_validate__set_boot_device_good(self):"},{"line_number":244,"context_line":"        with task_manager.acquire(self.context,"},{"line_number":245,"context_line":"                                 [self.node[\u0027uuid\u0027]]) as task:"},{"line_number":246,"context_line":"            self.driver.vendor.validate(task,"},{"line_number":247,"context_line":"                                        method\u003d\u0027set_boot_device\u0027,"},{"line_number":248,"context_line":"                                        device\u003d\u0027pxe\u0027)"},{"line_number":249,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2F46w%3D","line":246,"updated":"2014-04-25 14:28:30.000000000","message":"These must not be really being tested correctly, since we were calling them with the wrong args before. :)","commit_id":"f78a7e32478d666b6a580e43f8dc7f7b5503795e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"219c3c2f07a7e8ad37a98cd1ea353a4a909d766c","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    def test_vendor_passthru_validate__set_boot_device_good(self):"},{"line_number":244,"context_line":"        with task_manager.acquire(self.context,"},{"line_number":245,"context_line":"                                 [self.node[\u0027uuid\u0027]]) as task:"},{"line_number":246,"context_line":"            self.driver.vendor.validate(task,"},{"line_number":247,"context_line":"                                        method\u003d\u0027set_boot_device\u0027,"},{"line_number":248,"context_line":"                                        device\u003d\u0027pxe\u0027)"},{"line_number":249,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bad4c104_36bbe50f","line":246,"in_reply_to":"AAAAXX%2F%2F46w%3D","updated":"2014-04-29 12:43:03.000000000","message":"Hi Chris, so they were being right tested, the problem is that the driver interface was actually expecting a node parameter instead of \u0027taks\u0027, the interface implementation was wrong and consequently the tests.\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ipminative.py#L298\n\n[2] https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/ipmitool.py#L371","commit_id":"f78a7e32478d666b6a580e43f8dc7f7b5503795e"}],"ironic/tests/drivers/test_ipmitool.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"774511eb50139d19970eceff733bb1a4ed4d8ae9","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                self.assertEqual(manager.mock_calls, expected)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def test_vendor_passthru_validate__set_boot_device_good(self):"},{"line_number":431,"context_line":"        with task_manager.acquire(self.context, self.node[\u0027uuid\u0027]) as task:"},{"line_number":432,"context_line":"            self.driver.vendor.validate(task,"},{"line_number":433,"context_line":"                                        method\u003d\u0027set_boot_device\u0027,"},{"line_number":434,"context_line":"                                        device\u003d\u0027pxe\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2F46g%3D","line":431,"updated":"2014-04-25 14:28:30.000000000","message":"heh... same here.","commit_id":"f78a7e32478d666b6a580e43f8dc7f7b5503795e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"219c3c2f07a7e8ad37a98cd1ea353a4a909d766c","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                self.assertEqual(manager.mock_calls, expected)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def test_vendor_passthru_validate__set_boot_device_good(self):"},{"line_number":431,"context_line":"        with task_manager.acquire(self.context, self.node[\u0027uuid\u0027]) as task:"},{"line_number":432,"context_line":"            self.driver.vendor.validate(task,"},{"line_number":433,"context_line":"                                        method\u003d\u0027set_boot_device\u0027,"},{"line_number":434,"context_line":"                                        device\u003d\u0027pxe\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bad4c104_d64ab926","line":431,"in_reply_to":"AAAAXX%2F%2F46g%3D","updated":"2014-04-29 12:43:03.000000000","message":"ditto... The interface wasn\u0027t implemented correctly","commit_id":"f78a7e32478d666b6a580e43f8dc7f7b5503795e"}],"ironic/tests/drivers/test_seamicro.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0e235ac8e906bd4f7713e96240c910ea375eedb3","unresolved":false,"context_lines":[{"line_number":405,"context_line":"                                  shared\u003dFalse) as task:"},{"line_number":406,"context_line":"            kwargs \u003d {\u0027vlan_id\u0027: vlan_id, \u0027method\u0027: \u0027set_node_vlan_id\u0027}"},{"line_number":407,"context_line":"            task.resources[0].driver.vendor.\\"},{"line_number":408,"context_line":"                vendor_passthru(task, **kwargs)"},{"line_number":409,"context_line":"        mock_get_server.assert_called_once_with(info)"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"    def test_set_node_vlan_id_no_input(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_3f4ba85a","line":408,"updated":"2014-04-30 20:44:41.000000000","message":"it looks like it\u0027ll all fit on one line now?","commit_id":"73b02ec9b1afe2b5cb1d123b067ed60e582fdffc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0e235ac8e906bd4f7713e96240c910ea375eedb3","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                                  shared\u003dFalse) as task:"},{"line_number":449,"context_line":"            kwargs \u003d {\u0027volume_id\u0027: volume_id, \u0027method\u0027: \u0027attach_volume\u0027}"},{"line_number":450,"context_line":"            task.resources[0].driver.vendor.\\"},{"line_number":451,"context_line":"                vendor_passthru(task, **kwargs)"},{"line_number":452,"context_line":"        mock_get_server.assert_called_once_with(info)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    @mock.patch.object(seamicro, \u0027_get_server\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_3f62c8d8","line":451,"updated":"2014-04-30 20:44:41.000000000","message":"combine into one line?","commit_id":"73b02ec9b1afe2b5cb1d123b067ed60e582fdffc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0e235ac8e906bd4f7713e96240c910ea375eedb3","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                                  shared\u003dFalse) as task:"},{"line_number":506,"context_line":"            kwargs \u003d {\u0027volume_size\u0027: volume_size, \u0027method\u0027: \"attach_volume\"}"},{"line_number":507,"context_line":"            task.resources[0].driver.vendor.\\"},{"line_number":508,"context_line":"                vendor_passthru(task, **kwargs)"},{"line_number":509,"context_line":"        mock_get_server.assert_called_once_with(info)"},{"line_number":510,"context_line":"        mock_create_volume.assert_called_once_with(info, volume_size)"},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_1f9344a4","line":508,"updated":"2014-04-30 20:44:41.000000000","message":"one line?","commit_id":"73b02ec9b1afe2b5cb1d123b067ed60e582fdffc"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0e235ac8e906bd4f7713e96240c910ea375eedb3","unresolved":false,"context_lines":[{"line_number":527,"context_line":"                                  shared\u003dFalse) as task:"},{"line_number":528,"context_line":"            kwargs \u003d {\u0027device\u0027: boot_device, \u0027method\u0027: \u0027set_boot_device\u0027}"},{"line_number":529,"context_line":"            task.resources[0].driver.vendor.\\"},{"line_number":530,"context_line":"                vendor_passthru(task, **kwargs)"},{"line_number":531,"context_line":"        mock_get_server.assert_called_once_with(info)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def test_set_boot_device_no_input(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_7fe9b019","line":530,"updated":"2014-04-30 20:44:41.000000000","message":"one line?","commit_id":"73b02ec9b1afe2b5cb1d123b067ed60e582fdffc"}]}
