)]}'
{"ironic/api/controllers/v1/driver.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"1ed4aa66a17fc34ff50c0f80a9457321b073e992","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"The name of the driver\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    hosts \u003d [wtypes.text]"},{"line_number":41,"context_line":"    \"A list of active conductors that supports this driver\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def convert(cls, name, hosts):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9llY%3D","line":41,"updated":"2013-12-09 22:46:40.000000000","message":"small nit - I think it is \u0027support\u0027 not \u0027supports\u0027","commit_id":"72f35398e8580a4cd46fb9916a0b52be4b13768b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"de2ea44002cf7f7975ca750227ebc66307183efd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"The name of the driver\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    hosts \u003d [wtypes.text]"},{"line_number":41,"context_line":"    \"A list of active conductors that supports this driver\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def convert(cls, name, hosts):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9jh4%3D","line":41,"in_reply_to":"AAAATn%2F9llY%3D","updated":"2013-12-10 10:09:01.000000000","message":"Thanks, will fix :)","commit_id":"72f35398e8580a4cd46fb9916a0b52be4b13768b"}],"ironic/tests/api/test_drivers.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"1ed4aa66a17fc34ff50c0f80a9457321b073e992","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestListDrivers(base.FunctionalTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_drivers(self):"},{"line_number":27,"context_line":"        d1 \u003d \u0027fake-driver1\u0027"},{"line_number":28,"context_line":"        d2 \u003d \u0027fake-driver2\u0027"},{"line_number":29,"context_line":"        h1 \u003d \u0027fake-host1\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9lhs%3D","line":26,"updated":"2013-12-09 22:46:40.000000000","message":"This is outside the scope of your change, but I was wondering why there isn\u0027t an eg test_one_driver, test_no_drivers, and can you have drivers with no active conductors?","commit_id":"72f35398e8580a4cd46fb9916a0b52be4b13768b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7c997a14e8869561e324c7367a7ad9fccf609152","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestListDrivers(base.FunctionalTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_drivers(self):"},{"line_number":27,"context_line":"        d1 \u003d \u0027fake-driver1\u0027"},{"line_number":28,"context_line":"        d2 \u003d \u0027fake-driver2\u0027"},{"line_number":29,"context_line":"        h1 \u003d \u0027fake-host1\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9h98%3D","line":26,"in_reply_to":"AAAATn%2F9jf0%3D","updated":"2013-12-10 14:52:45.000000000","message":"Thanks for explaining. We might want to query about non-active conductors (\u0026 drivers) too, but maybe later ;)","commit_id":"72f35398e8580a4cd46fb9916a0b52be4b13768b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"de2ea44002cf7f7975ca750227ebc66307183efd","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestListDrivers(base.FunctionalTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_drivers(self):"},{"line_number":27,"context_line":"        d1 \u003d \u0027fake-driver1\u0027"},{"line_number":28,"context_line":"        d2 \u003d \u0027fake-driver2\u0027"},{"line_number":29,"context_line":"        h1 \u003d \u0027fake-host1\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9jf0%3D","line":26,"in_reply_to":"AAAATn%2F9lhs%3D","updated":"2013-12-10 10:09:01.000000000","message":"Hi Ruby,\n\nYou can not have drivers without conductors. The conductor has the drivers, when a conductor starts it will register its hostname + a list of drivers it supports[1] on the db. Time to time the conductors also have to \"touch\" the db saying it\u0027s alive[2] (there\u0027s a periodic task to do it).\n\n\ntest_one_driver(), I think that would be redundant.\n\ntest_no_drivers(), that\u0027s a good one, we get the output of the list_active_conductor_drivers() and re-format it, and if it returns an empty list. I will add a test of it :)\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L96\n\n[2] https://github.com/openstack/ironic/blob/master/ironic/conductor/manager.py#L329","commit_id":"72f35398e8580a4cd46fb9916a0b52be4b13768b"}]}
