)]}'
{"climate/exceptions.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ServiceClient(ClimateException):"},{"line_number":86,"context_line":"    msg_fmt \u003d _(\"Service %(service)s don\u0027t support Climate\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F883c%3D","line":86,"updated":"2013-12-18 13:34:34.000000000","message":"typo : doesn\u0027t","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    msg_fmt \u003d _(\"Unenxpectable object format\")"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class ServiceClient(ClimateException):"},{"line_number":90,"context_line":"    msg_fmt \u003d _(\"Service %(service)s have some problems\")"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2FmI%3D","line":89,"updated":"2014-01-19 22:18:09.000000000","message":"As said here https://review.openstack.org/#/c/52296/33/climate/exceptions.py this exception needs to be defined in a separate Manager Exceptions file for being raised to the API.","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"7ad820e8124d71ff785d5bb6498db6368f6cb44a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    msg_fmt \u003d _(\"Unenxpectable object format\")"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class ServiceClient(ClimateException):"},{"line_number":90,"context_line":"    msg_fmt \u003d _(\"Service %(service)s have some problems\")"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B7HE%3D","line":89,"in_reply_to":"AAAAUH%2F%2B%2FmI%3D","updated":"2014-01-20 17:54:45.000000000","message":"Not really - this exception is raised not when user is asking for smth, but when some manager\u0027s internal task (on_start, etc.) is happening. In this case we have no need in placing it in manager\u0027s exception file. Although, it might be placed there not to have manager related exceptions in file not connected with manager.","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"}],"climate/plugins/basic/vm_plugin.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"fdaffab8c2c589def37a4da9b5b31447aa5895d7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        return description"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def wake_up(self, resource_id, ctx):"},{"line_number":43,"context_line":"        nova.wake_up(resource_id, ctx)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Fxrs%3D","line":42,"updated":"2013-10-29 08:09:58.000000000","message":"please rename to on_start, Nick","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1021cb04d0386da2e14bfe381dbcfd44b001f4c9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        return description"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def wake_up(self, resource_id, ctx):"},{"line_number":43,"context_line":"        nova.wake_up(resource_id, ctx)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FSTA%3D","line":43,"updated":"2013-10-18 12:27:47.000000000","message":"I would propose a try/except clause for making sure that the client is up to date and raise a more acceptable error if wake_up isn\u0027t yet implemented.","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a014afac4f9f4f2c740be01ab7b3cf3127290292","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        return description"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def wake_up(self, resource_id, ctx):"},{"line_number":43,"context_line":"        nova.wake_up(resource_id, ctx)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FyBg%3D","line":43,"in_reply_to":"AAAATH%2F%2FSTA%3D","updated":"2013-10-29 06:28:49.000000000","message":"It\u0027s a good idea, I\u0027ll do it.","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"fdaffab8c2c589def37a4da9b5b31447aa5895d7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def wake_up(self, resource_id, ctx):"},{"line_number":43,"context_line":"        nova.wake_up(resource_id, ctx)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova.create_image(resource_id, ctx)"},{"line_number":48,"context_line":"            eventlet.sleep(5)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Fxrk%3D","line":45,"updated":"2013-10-29 08:09:58.000000000","message":"the same - on_end","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1021cb04d0386da2e14bfe381dbcfd44b001f4c9","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova.create_image(resource_id, ctx)"},{"line_number":48,"context_line":"            eventlet.sleep(5)"},{"line_number":49,"context_line":"            while not self.check_active(resource_id, ctx):"},{"line_number":50,"context_line":"                eventlet.sleep(1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FSS8%3D","line":47,"updated":"2013-10-18 12:27:47.000000000","message":"Well, shouldn\u0027t it be flagconf managed ?","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a014afac4f9f4f2c740be01ab7b3cf3127290292","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova.create_image(resource_id, ctx)"},{"line_number":48,"context_line":"            eventlet.sleep(5)"},{"line_number":49,"context_line":"            while not self.check_active(resource_id, ctx):"},{"line_number":50,"context_line":"                eventlet.sleep(1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FyBU%3D","line":47,"in_reply_to":"AAAATH%2F%2FSS8%3D","updated":"2013-10-29 06:28:49.000000000","message":"Well, it\u0027s \"basic\". So we just show what we can do with VMs - I think it redundantly to use configurable objects here","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"221b02fb37de9280f6d8ae2a45a2e678acf60b7d","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def delete(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova.create_image(resource_id, ctx)"},{"line_number":48,"context_line":"            eventlet.sleep(5)"},{"line_number":49,"context_line":"            while not self.check_active(resource_id, ctx):"},{"line_number":50,"context_line":"                eventlet.sleep(1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FxkE%3D","line":47,"in_reply_to":"AAAATn%2F%2FyBU%3D","updated":"2013-10-29 08:49:34.000000000","message":"My point was to say : if I\u0027m an operator, I maybe don\u0027t want to have this behaviour. People should know that at the end of the lease, the VM will get terminated, that\u0027s it.\n\nThat\u0027s why I\u0027m saying we should leave this decision as as configuration variable (with a default value set, of course)","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"221b02fb37de9280f6d8ae2a45a2e678acf60b7d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            nova.create_image(resource_id, ctx)"},{"line_number":48,"context_line":"            eventlet.sleep(5)"},{"line_number":49,"context_line":"            while not self.check_active(resource_id, ctx):"},{"line_number":50,"context_line":"                eventlet.sleep(1)"},{"line_number":51,"context_line":"            nova.delete(resource_id, ctx)"},{"line_number":52,"context_line":"        except nova_exceptions.NotFound:"},{"line_number":53,"context_line":"            LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Fxkg%3D","line":50,"updated":"2013-10-29 08:49:34.000000000","message":"Well, there is high hazard in letting an active loop doing the check. As there is only one running thread at the moment performing the _event() method, it will block until the VM is dumped.\n\nI would definitely prefer creating an event for VM deletion instead so the Manager would handle it directly.","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"de8a8f96cc2534090596dcb2d33c9dd8436dce55","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":54,"context_line":"                        resource_id)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def check_active(self, resource_id, ctx):"},{"line_number":57,"context_line":"        instance \u003d nova.get(resource_id, ctx)"},{"line_number":58,"context_line":"        if instance.task_state is None:"},{"line_number":59,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2F6Fc%3D","line":56,"updated":"2013-10-25 12:30:39.000000000","message":"should be a private method","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"03521d7ed0efb25502ab5db80327cab42c4f5ffe","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":54,"context_line":"                        resource_id)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def check_active(self, resource_id, ctx):"},{"line_number":57,"context_line":"        instance \u003d nova.get(resource_id, ctx)"},{"line_number":58,"context_line":"        if instance.task_state is None:"},{"line_number":59,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Fx5g%3D","line":56,"in_reply_to":"AAAATn%2F%2F6Fc%3D","updated":"2013-10-29 07:12:46.000000000","message":"okay","commit_id":"5ec1fa3b97883aa54f566c0fa0d05e73e7038405"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F883I%3D","line":1,"updated":"2013-12-18 13:34:34.000000000","message":"module name should not be \"basic\", but rather \"servers\" or instances","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":35,"context_line":"CONF.register_opts(plugin_opts)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class VMPlugin(base.BasePlugin):"},{"line_number":39,"context_line":"    \"\"\"Base plugin for VM reservation.\"\"\""},{"line_number":40,"context_line":"    resource_type \u003d \u0027virtual:instance\u0027"},{"line_number":41,"context_line":"    title \u003d \"Basic VM Plugin\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88xE%3D","line":38,"updated":"2013-12-18 13:34:34.000000000","message":"Unittests are missing","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def on_start(self, resource_id, ctx):"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova.unshelve(resource_id, ctx)"},{"line_number":48,"context_line":"        except climate_exceptions.ServiceClient:"},{"line_number":49,"context_line":"            LOG.warning(\"Nova client don\u0027t support Climate\")"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F880Y%3D","line":47,"updated":"2013-12-18 13:34:34.000000000","message":"How can we be sure the instance is in shelved state before ?\n\nAs per I understand, it would require a patch to Nova for shelving instances ?\n\nCan we check the status of the instance before unshelving it ?","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova.unshelve(resource_id, ctx)"},{"line_number":48,"context_line":"        except climate_exceptions.ServiceClient:"},{"line_number":49,"context_line":"            LOG.warning(\"Nova client don\u0027t support Climate\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def on_end(self, resource_id, ctx):"},{"line_number":52,"context_line":"        actions \u003d self.split_actions(CONF.on_end_actions)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F881A%3D","line":49,"updated":"2013-12-18 13:34:34.000000000","message":"you should not only LOG but raise something. If not, you\u0027ll hide an issue","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            LOG.warning(\"Nova client don\u0027t support Climate\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def on_end(self, resource_id, ctx):"},{"line_number":52,"context_line":"        actions \u003d self.split_actions(CONF.on_end_actions)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":55,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F880Q%3D","line":52,"updated":"2013-12-18 13:34:34.000000000","message":"Typo : _split_actions. Don\u0027t forget to write unittests ;-)","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            try:"},{"line_number":56,"context_line":"                nova.create_image(resource_id, ctx)"},{"line_number":57,"context_line":"                eventlet.sleep(5)"},{"line_number":58,"context_line":"                while not self.check_active(resource_id, ctx):"},{"line_number":59,"context_line":"                    eventlet.sleep(1)"},{"line_number":60,"context_line":"            except nova_exceptions.NotFound:"},{"line_number":61,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88zY%3D","line":58,"updated":"2013-12-18 13:34:34.000000000","message":"Typo : _check_active. Don\u0027t forget to write unittests ;-)","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                while not self.check_active(resource_id, ctx):"},{"line_number":59,"context_line":"                    eventlet.sleep(1)"},{"line_number":60,"context_line":"            except nova_exceptions.NotFound:"},{"line_number":61,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":62,"context_line":"                            resource_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        if \u0027suspend\u0027 in actions:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88x8%3D","line":61,"updated":"2013-12-18 13:34:34.000000000","message":"again, don\u0027t hide exceptions","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        if \u0027suspend\u0027 in actions:"},{"line_number":65,"context_line":"            try:"},{"line_number":66,"context_line":"                nova.suspend(resource_id, ctx)"},{"line_number":67,"context_line":"            except nova_exceptions.NotFound:"},{"line_number":68,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":69,"context_line":"                            resource_id)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88x4%3D","line":67,"updated":"2013-12-18 13:34:34.000000000","message":"see above about hiding","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                nova.delete(resource_id, ctx)"},{"line_number":74,"context_line":"            except nova_exceptions.NotFound:"},{"line_number":75,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":76,"context_line":"                            resource_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _check_active(self, resource_id, ctx):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88x0%3D","line":75,"updated":"2013-12-18 13:34:34.000000000","message":"see above about hiding","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                            resource_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _check_active(self, resource_id, ctx):"},{"line_number":79,"context_line":"        instance \u003d nova.get(resource_id, ctx)"},{"line_number":80,"context_line":"        if instance.task_state is None:"},{"line_number":81,"context_line":"            return True"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88xg%3D","line":79,"updated":"2013-12-18 13:34:34.000000000","message":"catch Nova exception please","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                   \u0027IMAGE_UPLOADING\u0027]:"},{"line_number":85,"context_line":"            return False"},{"line_number":86,"context_line":"        else:"},{"line_number":87,"context_line":"            LOG.exception(\u0027Nova reported unexpected task status %s for \u0027"},{"line_number":88,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _split_actions(self, actions):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88xc%3D","line":87,"updated":"2013-12-18 13:34:34.000000000","message":"please return either True or False here","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8f4029f0b50041004d09f2a86b54e5346c8fac41","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _split_actions(self, actions):"},{"line_number":91,"context_line":"        return actions.split()"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F88xQ%3D","line":91,"updated":"2013-12-18 13:34:34.000000000","message":"please catch AttributeError here\n\nalso ensure that actions is not empty and correct (which type do we wait for ?)","commit_id":"acf94a7f3defbb477b12cb968a59dbcff9709562"}],"climate/plugins/instances/vm_plugin.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"a7721ca199cfeae75182e926f108db7e81785453","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def __init__(self):"},{"line_number":46,"context_line":"        super(VMPlugin, self).__init__()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"#        self.nova_client \u003d nova.ClimateNovaClient()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def on_start(self, resource_id):"},{"line_number":51,"context_line":"        self.nova_client \u003d nova.ClimateNovaClient()"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAUH%2F%2FRpc%3D","line":48,"updated":"2014-01-15 15:42:52.000000000","message":"please remove that or return back :) Decide :)","commit_id":"318a943e1d1b9a939ed4cdcee1fe6a726776eb14"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self):"},{"line_number":57,"context_line":"        super(VMPlugin, self).__init__()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.client \u003d nova.ClimateNovaClient("},{"line_number":60,"context_line":"            auth_url\u003dCONF[\u0027virtual:instance\u0027].auth_url,"},{"line_number":61,"context_line":"            username\u003dCONF[\u0027virtual:instance\u0027].username,"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2Flc%3D","line":58,"updated":"2014-01-19 22:18:09.000000000","message":"Instead of instanciating the client at the __init__ stage, I prefer that you keep the same way as for physical reservations, ie. using setup(conf) method","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1a73225c8b8bd562c29dcbadf302fa980a153ea3","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def __init__(self):"},{"line_number":57,"context_line":"        super(VMPlugin, self).__init__()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.client \u003d nova.ClimateNovaClient("},{"line_number":60,"context_line":"            auth_url\u003dCONF[\u0027virtual:instance\u0027].auth_url,"},{"line_number":61,"context_line":"            username\u003dCONF[\u0027virtual:instance\u0027].username,"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2BC4%3D","line":58,"in_reply_to":"AAAAUH%2F%2B%2Flc%3D","updated":"2014-01-20 09:20:51.000000000","message":"forget my previous comment, just checked the code and we instanciate the client on the same place. Leave it in __init__","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def __init__(self):"},{"line_number":57,"context_line":"        super(VMPlugin, self).__init__()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.client \u003d nova.ClimateNovaClient("},{"line_number":60,"context_line":"            auth_url\u003dCONF[\u0027virtual:instance\u0027].auth_url,"},{"line_number":61,"context_line":"            username\u003dCONF[\u0027virtual:instance\u0027].username,"},{"line_number":62,"context_line":"            password\u003dCONF[\u0027virtual:instance\u0027].password,"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2Flg%3D","line":59,"updated":"2014-01-19 22:18:09.000000000","message":"please put a note that the context is not present here, so that\u0027s why you\u0027re passing args to this method","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            raise climate_exceptions.ServiceClient()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def on_end(self, resource_id):"},{"line_number":73,"context_line":"        actions \u003d self._split_actions(CONF[\u0027virtual:instance\u0027].on_end)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":76,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2Flk%3D","line":73,"updated":"2014-01-19 22:18:09.000000000","message":"why splitting from a CONF file ? This is extremely dangerous as it\u0027s user input.\nI would preferely vote for different flags, one per action, with default values","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                self.client.create_image(resource_id)"},{"line_number":78,"context_line":"                eventlet.sleep(5)"},{"line_number":79,"context_line":"                while not self._check_active(resource_id):"},{"line_number":80,"context_line":"                    eventlet.sleep(1)"},{"line_number":81,"context_line":"            except self.client.exceptions.NotFound:"},{"line_number":82,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":83,"context_line":"                            resource_id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2FlY%3D","line":80,"updated":"2014-01-19 22:18:09.000000000","message":"infinite loop here, please add a exit clause","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                while not self._check_active(resource_id):"},{"line_number":80,"context_line":"                    eventlet.sleep(1)"},{"line_number":81,"context_line":"            except self.client.exceptions.NotFound:"},{"line_number":82,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":83,"context_line":"                            resource_id)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if \u0027suspend\u0027 in actions:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2FlE%3D","line":82,"updated":"2014-01-19 22:18:09.000000000","message":"ditto to L89","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6b706e64ecdb14719d53a16941108f59e4438b95","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                while not self._check_active(resource_id):"},{"line_number":80,"context_line":"                    eventlet.sleep(1)"},{"line_number":81,"context_line":"            except self.client.exceptions.NotFound:"},{"line_number":82,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":83,"context_line":"                            resource_id)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if \u0027suspend\u0027 in actions:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B9y4%3D","line":82,"in_reply_to":"AAAAUH%2F%2B%2FlE%3D","updated":"2014-01-20 10:25:03.000000000","message":"nevermind my previous comment","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        if \u0027suspend\u0027 in actions:"},{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                self.client.servers.suspend(resource_id)"},{"line_number":88,"context_line":"            except self.self.client.exceptions.NotFound:"},{"line_number":89,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":90,"context_line":"                            resource_id)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2FlQ%3D","line":88,"updated":"2014-01-19 22:18:09.000000000","message":"typo, I guess this branch has not been tested yet","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                self.client.servers.suspend(resource_id)"},{"line_number":88,"context_line":"            except self.self.client.exceptions.NotFound:"},{"line_number":89,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":90,"context_line":"                            resource_id)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if \u0027delete\u0027 in actions:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2FlI%3D","line":89,"updated":"2014-01-19 22:18:09.000000000","message":"please return something to the API instead only obfuscating the exception (possibly a Climate Manager Exception)","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6b706e64ecdb14719d53a16941108f59e4438b95","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            try:"},{"line_number":87,"context_line":"                self.client.servers.suspend(resource_id)"},{"line_number":88,"context_line":"            except self.self.client.exceptions.NotFound:"},{"line_number":89,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":90,"context_line":"                            resource_id)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if \u0027delete\u0027 in actions:"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B9zA%3D","line":89,"in_reply_to":"AAAAUH%2F%2B%2FlI%3D","updated":"2014-01-20 10:25:03.000000000","message":"Nevermind, this is not coming from the API, I\u0027m OK for leaving it as it is.","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            try:"},{"line_number":94,"context_line":"                self.client.servers.delete(resource_id)"},{"line_number":95,"context_line":"            except self.client.exceptions.NotFound:"},{"line_number":96,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":97,"context_line":"                            resource_id)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _check_active(self, resource_id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2Fk4%3D","line":96,"updated":"2014-01-19 22:18:09.000000000","message":"ditto to L89","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6b706e64ecdb14719d53a16941108f59e4438b95","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            try:"},{"line_number":94,"context_line":"                self.client.servers.delete(resource_id)"},{"line_number":95,"context_line":"            except self.client.exceptions.NotFound:"},{"line_number":96,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":97,"context_line":"                            resource_id)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _check_active(self, resource_id):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B9y0%3D","line":96,"in_reply_to":"AAAAUH%2F%2B%2Fk4%3D","updated":"2014-01-20 10:25:03.000000000","message":"nevermind my previous comment","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                          \u0027IMAGE_UPLOADING\u0027]:"},{"line_number":107,"context_line":"            return False"},{"line_number":108,"context_line":"        else:"},{"line_number":109,"context_line":"            LOG.exception(\u0027Nova reported unexpected task status %s for \u0027"},{"line_number":110,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _split_actions(self, actions):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2Fks%3D","line":109,"updated":"2014-01-19 22:18:09.000000000","message":"why only logging ? you should raise a Climate Manager exception too","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6b706e64ecdb14719d53a16941108f59e4438b95","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                          \u0027IMAGE_UPLOADING\u0027]:"},{"line_number":107,"context_line":"            return False"},{"line_number":108,"context_line":"        else:"},{"line_number":109,"context_line":"            LOG.exception(\u0027Nova reported unexpected task status %s for \u0027"},{"line_number":110,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _split_actions(self, actions):"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B9yw%3D","line":109,"in_reply_to":"AAAAUH%2F%2B%2Fks%3D","updated":"2014-01-20 10:25:03.000000000","message":"nevermind my previous comment","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7c2a49bb21ae398a47c5bcf4ec8f68ec8f529567","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            LOG.exception(\u0027Nova reported unexpected task status %s for \u0027"},{"line_number":110,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _split_actions(self, actions):"},{"line_number":113,"context_line":"        return actions.split()"}],"source_content_type":"text/x-python","patch_set":32,"id":"AAAAUH%2F%2B%2Flw%3D","line":112,"updated":"2014-01-19 22:18:09.000000000","message":"this method is either useless or needs to be having a try:except: clause.","commit_id":"0e426b6d9b9b7bd6af94c92daa650c2c2f376747"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ccf96a6ded208b0056cfcf92b5b33456c9226763","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bj0c%3D","line":1,"updated":"2014-01-24 11:51:36.000000000","message":"we need to modify manager/service.py for raising the right exception http://paste.openstack.org/show/61810/","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a02dc6889b91dd4745344af0c6349a565877135f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2BjqQ%3D","line":1,"in_reply_to":"AAAAUH%2F%2Bj0c%3D","updated":"2014-01-24 12:29:02.000000000","message":"Can you describe how you get this?","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f006f74671229b6419aeb8e5a136a901aa32e8a5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjc8%3D","line":1,"in_reply_to":"AAAAUH%2F%2BjqQ%3D","updated":"2014-01-24 13:02:00.000000000","message":"Just pulling your branch, it appears when the lease starts if climate.conf is not mentioning the right resource.\n\nThat\u0027s not related to your patch, but needs to be updated.","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ccf96a6ded208b0056cfcf92b5b33456c9226763","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"It can start, snapshot and suspend VMs\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def on_start(self, resource_id):"},{"line_number":45,"context_line":"        nova_client \u003d nova.ClimateNovaClient()"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bj0Q%3D","line":45,"updated":"2014-01-24 11:51:36.000000000","message":"error : http://paste.openstack.org/show/61812/","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a02dc6889b91dd4745344af0c6349a565877135f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"It can start, snapshot and suspend VMs\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def on_start(self, resource_id):"},{"line_number":45,"context_line":"        nova_client \u003d nova.ClimateNovaClient()"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjp4%3D","line":45,"in_reply_to":"AAAAUH%2F%2Bj0Q%3D","updated":"2014-01-24 12:29:02.000000000","message":"Looks loke you have old version of novaclient\nhttps://github.com/openstack/python-novaclient/blob/master/novaclient/v1_1/client.py","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"43e317caae2a1c4f820b13e7c49151f16912f1a1","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"It can start, snapshot and suspend VMs\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def on_start(self, resource_id):"},{"line_number":45,"context_line":"        nova_client \u003d nova.ClimateNovaClient()"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2BjWY%3D","line":45,"in_reply_to":"AAAAUH%2F%2BjXI%3D","updated":"2014-01-24 13:22:38.000000000","message":"fix it here https://github.com/stackforge/climate/blob/master/climate/utils/openstack/nova.py#L78","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"8910de470cb5a4a1e48323d5a25c065e57ed9b09","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"It can start, snapshot and suspend VMs\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def on_start(self, resource_id):"},{"line_number":45,"context_line":"        nova_client \u003d nova.ClimateNovaClient()"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2BjXI%3D","line":45,"in_reply_to":"AAAAUH%2F%2BjYE%3D","updated":"2014-01-24 13:19:27.000000000","message":"try using proxy_token here - it seems like for v2 nova it uses it as auth_token for authentication\n\nhttps://github.com/openstack/python-novaclient/blob/2.15.0/novaclient/v1_1/client.py#L71","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"cd4c69da05d276e10fab8d82f8dd8ca6e06dece5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"It can start, snapshot and suspend VMs\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def on_start(self, resource_id):"},{"line_number":45,"context_line":"        nova_client \u003d nova.ClimateNovaClient()"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2BjYE%3D","line":45,"in_reply_to":"AAAAUH%2F%2Bjd0%3D","updated":"2014-01-24 13:15:40.000000000","message":"if so there will be some problems here - i mean, to authorise we need password/token - token is really not supported in that version of nova_client. dunno what password to use here - where we\u0027re using ctx from trust. Using service user creds here is not really a good idea.","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f006f74671229b6419aeb8e5a136a901aa32e8a5","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"It can start, snapshot and suspend VMs\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def on_start(self, resource_id):"},{"line_number":45,"context_line":"        nova_client \u003d nova.ClimateNovaClient()"},{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjd0%3D","line":45,"in_reply_to":"AAAAUH%2F%2Bjp4%3D","updated":"2014-01-24 13:02:00.000000000","message":"That\u0027s because I\u0027m using novaclient-2.15.0 as per the reqs, and this version doesn\u0027t include it :\nhttps://github.com/openstack/python-novaclient/blob/2.15.0/novaclient/v1_1/client.py#L69\n\nYou need to fix the call params, that\u0027s because we haven\u0027t tested correctly with ctx.","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ccf96a6ded208b0056cfcf92b5b33456c9226763","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            except nova_client.exceptions.NotFound:"},{"line_number":77,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":78,"context_line":"                            resource_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _check_active(self, resource_id, curr_client):"},{"line_number":81,"context_line":"        instance \u003d curr_client.servers.get(resource_id)"},{"line_number":82,"context_line":"        task_state \u003d getattr(instance, \u0027OS-EXT-STS:task_state\u0027, None)"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bj0E%3D","line":79,"updated":"2014-01-24 11:51:36.000000000","message":"please leave a note about the fact these 3 actions will be done one after the other","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a02dc6889b91dd4745344af0c6349a565877135f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            except nova_client.exceptions.NotFound:"},{"line_number":77,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":78,"context_line":"                            resource_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _check_active(self, resource_id, curr_client):"},{"line_number":81,"context_line":"        instance \u003d curr_client.servers.get(resource_id)"},{"line_number":82,"context_line":"        task_state \u003d getattr(instance, \u0027OS-EXT-STS:task_state\u0027, None)"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjpg%3D","line":79,"in_reply_to":"AAAAUH%2F%2Bj0E%3D","updated":"2014-01-24 12:29:02.000000000","message":"They\u0027ll be done in order they specified","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f006f74671229b6419aeb8e5a136a901aa32e8a5","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            except nova_client.exceptions.NotFound:"},{"line_number":77,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted.\u0027 %"},{"line_number":78,"context_line":"                            resource_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _check_active(self, resource_id, curr_client):"},{"line_number":81,"context_line":"        instance \u003d curr_client.servers.get(resource_id)"},{"line_number":82,"context_line":"        task_state \u003d getattr(instance, \u0027OS-EXT-STS:task_state\u0027, None)"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjcs%3D","line":79,"in_reply_to":"AAAAUH%2F%2Bjpg%3D","updated":"2014-01-24 13:02:00.000000000","message":"Indeed, I\u0027m just saying we should leave a note expliciting this.","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ccf96a6ded208b0056cfcf92b5b33456c9226763","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":92,"context_line":"            raise climate_exceptions.TaskFailed()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _split_actions(self, actions):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            return actions.split()"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bj0A%3D","line":94,"updated":"2014-01-24 11:51:36.000000000","message":"why do you need a method for only splitting ? please remove it","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a02dc6889b91dd4745344af0c6349a565877135f","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":92,"context_line":"            raise climate_exceptions.TaskFailed()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _split_actions(self, actions):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            return actions.split()"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2BjpI%3D","line":94,"in_reply_to":"AAAAUH%2F%2Bj0A%3D","updated":"2014-01-24 12:29:02.000000000","message":"I like it and also don\u0027t want another try: except: in on_end So, why not?","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f006f74671229b6419aeb8e5a136a901aa32e8a5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                          \u0027instance %s\u0027 % (instance.task_state, resource_id))"},{"line_number":92,"context_line":"            raise climate_exceptions.TaskFailed()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _split_actions(self, actions):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            return actions.split()"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjcg%3D","line":94,"in_reply_to":"AAAAUH%2F%2BjpI%3D","updated":"2014-01-24 13:02:00.000000000","message":"OK, nevermind.","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ccf96a6ded208b0056cfcf92b5b33456c9226763","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def _split_actions(self, actions):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            return actions.split()"},{"line_number":98,"context_line":"        except AttributeError:"},{"line_number":99,"context_line":"            raise climate_exceptions.WrongFormat"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjz8%3D","line":97,"updated":"2014-01-24 11:51:36.000000000","message":"I would prefer passing extra options separated by a comma instead of a whitespace","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a02dc6889b91dd4745344af0c6349a565877135f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def _split_actions(self, actions):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"},{"line_number":97,"context_line":"            return actions.split()"},{"line_number":98,"context_line":"        except AttributeError:"},{"line_number":99,"context_line":"            raise climate_exceptions.WrongFormat"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2Bjo4%3D","line":97,"in_reply_to":"AAAAUH%2F%2Bjz8%3D","updated":"2014-01-24 12:29:02.000000000","message":"yeap, it looks better. +1 for it","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"ad75bb1237d2425f58cb62c290d4a6dd516dd1cb","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            nova_client.servers.unshelve(resource_id)"},{"line_number":48,"context_line":"        except nova_client.exceptions.Conflict:"},{"line_number":49,"context_line":"            LOG.warning(\"Instance have been unshelved\")"},{"line_number":50,"context_line":"            raise climate_exceptions.ServiceClient()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def on_end(self, resource_id):"}],"source_content_type":"text/x-python","patch_set":46,"id":"AAAAUH%2F%2BaG4%3D","line":49,"updated":"2014-01-27 09:13:39.000000000","message":"may be use LOG.exception(\"Instance have been unshelved\")","commit_id":"91f769c5f08fd6e4dff4bf2f2f1b709085a224e9"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"ad75bb1237d2425f58cb62c290d4a6dd516dd1cb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # creating snapshot or suspending already deleted instance"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":66,"context_line":"                eventlet.sleep(5)"},{"line_number":67,"context_line":"                while not self._check_active(resource_id, nova_client):"}],"source_content_type":"text/x-python","patch_set":46,"id":"AAAAUH%2F%2BaGY%3D","line":64,"updated":"2014-01-27 09:13:39.000000000","message":"using a Timeout wouldn\u0027t be a luxury here, no?","commit_id":"91f769c5f08fd6e4dff4bf2f2f1b709085a224e9"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"11b911d605d38a23c5744b3d8cae39daa8899787","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # creating snapshot or suspending already deleted instance"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":66,"context_line":"                eventlet.sleep(5)"},{"line_number":67,"context_line":"                while not self._check_active(resource_id, nova_client):"}],"source_content_type":"text/x-python","patch_set":46,"id":"AAAAUH%2F%2BZ%2BM%3D","line":64,"in_reply_to":"AAAAUH%2F%2BaGY%3D","updated":"2014-01-27 09:36:32.000000000","message":"we think that if some problems with snapshot - it\u0027s nova side problem, and we don\u0027t need to catch it.","commit_id":"91f769c5f08fd6e4dff4bf2f2f1b709085a224e9"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # creating snapshot or suspending already deleted instance"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":66,"context_line":"                eventlet.sleep(5)"},{"line_number":67,"context_line":"                while not self._check_active(resource_id, nova_client):"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSbM%3D","line":64,"updated":"2014-01-28 11:26:41.000000000","message":"I reiterate my concerns here and I agree it\u0027s nova\u0027s stuff if something going wrong.\nBUT, shouldn\u0027t we wait indefinitely nova .. not sure .. a timeout on our side could help.\n\nOR may be I miss something..","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e1acd57f5399b5e350e9bcd9c4d90dfde4ff9819","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":66,"context_line":"                eventlet.sleep(5)"},{"line_number":67,"context_line":"                while not self._check_active(resource_id, nova_client):"},{"line_number":68,"context_line":"                    eventlet.sleep(1)"},{"line_number":69,"context_line":"            except nova_client.exceptions.NotFound:"},{"line_number":70,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted. \u0027"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BXP4%3D","line":67,"updated":"2014-01-28 13:18:09.000000000","message":"infinite loop, already discussed before.\nEven if it\u0027s Nova related, I think we should manage Nova unexpected errors for obvious reasons.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"77989a8979e00c7dd5b40223d1b4d848e0b06ca7","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":66,"context_line":"                eventlet.sleep(5)"},{"line_number":67,"context_line":"                while not self._check_active(resource_id, nova_client):"},{"line_number":68,"context_line":"                    eventlet.sleep(1)"},{"line_number":69,"context_line":"            except nova_client.exceptions.NotFound:"},{"line_number":70,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted. \u0027"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BRiI%3D","line":67,"in_reply_to":"AAAAUH%2F%2BRno%3D","updated":"2014-01-28 14:06:23.000000000","message":"I prefer bigger one only because creating image might be long operation (especially for large instances). Almost every error will be caught in check_active method, so timeout here is only one more checking for really unexpected things. Let\u0027s think about at least 10 mins timeout here - sometimes images might be REALLY big.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"b91d34342f388a73f1c29195fadbf7c3029b2f2c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":66,"context_line":"                eventlet.sleep(5)"},{"line_number":67,"context_line":"                while not self._check_active(resource_id, nova_client):"},{"line_number":68,"context_line":"                    eventlet.sleep(1)"},{"line_number":69,"context_line":"            except nova_client.exceptions.NotFound:"},{"line_number":70,"context_line":"                LOG.warning(\u0027Instance %s has been already deleted. \u0027"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BRno%3D","line":67,"in_reply_to":"AAAAUH%2F%2BXP4%3D","updated":"2014-01-28 13:51:50.000000000","message":"okay, I\u0027ll add here timeout for this reasons. 5 minutes will be okay, as for me.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"db4aa2ca9b9bd3a92670beb8edaf4059cdd72710","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # creating snapshot or suspending already deleted instance"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":65,"context_line":"            timeout"},{"line_number":66,"context_line":"            try:"},{"line_number":67,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":68,"context_line":"                eventlet.sleep(5)"}],"source_content_type":"text/x-python","patch_set":51,"id":"AAAAUH%2F%2BJzQ%3D","line":65,"updated":"2014-01-29 16:53:41.000000000","message":"I don\u0027t like so much instanciating this way. I would prefer having either a \u0027with\u0027 statement embedding all, or a decorator around the on_end method.","commit_id":"5b254210fe82e8fe22ae337190ed7a2e3cf8798e"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"2d06b1656e77d078f294d822d88b0d1bdb2f2174","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # creating snapshot or suspending already deleted instance"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        if \u0027create_image\u0027 in actions:"},{"line_number":65,"context_line":"            timeout"},{"line_number":66,"context_line":"            try:"},{"line_number":67,"context_line":"                nova_client.servers.create_image(resource_id)"},{"line_number":68,"context_line":"                eventlet.sleep(5)"}],"source_content_type":"text/x-python","patch_set":51,"id":"AAAAUH%2F%2BJZ4%3D","line":65,"in_reply_to":"AAAAUH%2F%2BJzQ%3D","updated":"2014-01-29 18:01:24.000000000","message":"Done","commit_id":"5b254210fe82e8fe22ae337190ed7a2e3cf8798e"}],"climate/tests/plugins/instances/test_vm_plugin.py":[{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"ad75bb1237d2425f58cb62c290d4a6dd516dd1cb","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.client.assert_called_once_with(\u00271\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_on_start_fail(self):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_on_end_all_ok(self):"}],"source_content_type":"text/x-python","patch_set":46,"id":"AAAAUH%2F%2BaIY%3D","line":36,"updated":"2014-01-27 09:13:39.000000000","message":"could you use instead the skip decorator and provide a reason to skip these tests.\n\nWill be better to track missing tests IMO","commit_id":"91f769c5f08fd6e4dff4bf2f2f1b709085a224e9"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"11b911d605d38a23c5744b3d8cae39daa8899787","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.client.assert_called_once_with(\u00271\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_on_start_fail(self):"},{"line_number":37,"context_line":"        pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_on_end_all_ok(self):"}],"source_content_type":"text/x-python","patch_set":46,"id":"AAAAUH%2F%2BZ%2BE%3D","line":36,"in_reply_to":"AAAAUH%2F%2BaIY%3D","updated":"2014-01-27 09:36:32.000000000","message":"I write tests right now :)","commit_id":"91f769c5f08fd6e4dff4bf2f2f1b709085a224e9"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.plugin \u003d vm_plugin"},{"line_number":27,"context_line":"        self.nova \u003d nova"},{"line_number":28,"context_line":"        self.exc \u003d climate_exceptions"},{"line_number":29,"context_line":"        self.logging \u003d logging"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        self.client \u003d self.patch(self.nova, \u0027ClimateNovaClient\u0027)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSfc%3D","line":29,"updated":"2014-01-28 11:26:41.000000000","message":"no need to put logging module in setUP since it\u0027s used only once.\n\nwithout speaking the utility of the thing.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                          self.plugin.on_start,"},{"line_number":46,"context_line":"                          self.fake_id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_on_end_all_ok(self):"},{"line_number":49,"context_line":"        self.patch(self.plugin, \u0027_split_actions\u0027).return_value \u003d\\"},{"line_number":50,"context_line":"            [\u0027create_image\u0027, \u0027suspend\u0027, \u0027delete\u0027]"},{"line_number":51,"context_line":"        self.plugin.on_end(self.fake_id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSf0%3D","line":48,"updated":"2014-01-28 11:26:41.000000000","message":"I think this test should be improved by covering all cases  : ie nova client calls (image_create, suspend and delete)","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.client.assert_has_calls([\u00271\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_on_end_instance_deleted(self):"},{"line_number":56,"context_line":"        logger \u003d self.patch(self.logging, \u0027getLogger\u0027)"},{"line_number":57,"context_line":"        self.client.side_effect \u003d\\"},{"line_number":58,"context_line":"            self.nova.ClimateNovaClient.exceptions.NotFound"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSik%3D","line":55,"updated":"2014-01-28 11:26:41.000000000","message":"this test is weird and incomplete.\n\nThe side_effect is never controled and you test the logger calls. never seen this before.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        logger.called_once_with([])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_check_active(self):"},{"line_number":65,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSk4%3D","line":64,"updated":"2014-01-28 11:26:41.000000000","message":"please use skip decorator or remove this one","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e1acd57f5399b5e350e9bcd9c4d90dfde4ff9819","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        logger.called_once_with([])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_check_active(self):"},{"line_number":65,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BXQc%3D","line":65,"updated":"2014-01-28 13:18:09.000000000","message":"please use skiptest for that test.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"db4aa2ca9b9bd3a92670beb8edaf4059cdd72710","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.client.return_value.servers.unshelve.assert_called_once_with(\u00271\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @testtools.skip(\u0027Will released later\u0027)"},{"line_number":44,"context_line":"    def test_on_start_fail(self):"},{"line_number":45,"context_line":"        self.client.side_effect \u003d\\"},{"line_number":46,"context_line":"            self.nova.ClimateNovaClient.exceptions.Conflict"}],"source_content_type":"text/x-python","patch_set":51,"id":"AAAAUH%2F%2BJyo%3D","line":43,"updated":"2014-01-29 16:53:41.000000000","message":"typo \"will *be* released later on\"","commit_id":"5b254210fe82e8fe22ae337190ed7a2e3cf8798e"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"2d06b1656e77d078f294d822d88b0d1bdb2f2174","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.client.return_value.servers.unshelve.assert_called_once_with(\u00271\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @testtools.skip(\u0027Will released later\u0027)"},{"line_number":44,"context_line":"    def test_on_start_fail(self):"},{"line_number":45,"context_line":"        self.client.side_effect \u003d\\"},{"line_number":46,"context_line":"            self.nova.ClimateNovaClient.exceptions.Conflict"}],"source_content_type":"text/x-python","patch_set":51,"id":"AAAAUH%2F%2BJZw%3D","line":43,"in_reply_to":"AAAAUH%2F%2BJyo%3D","updated":"2014-01-29 18:01:24.000000000","message":"Done","commit_id":"5b254210fe82e8fe22ae337190ed7a2e3cf8798e"}],"climate/utils/openstack/nova.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"9d4db43e3747f33b7f2e5d181051c9280cd74c31","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    client().servers.wake_up(instance_id)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def delete(instance_id):"},{"line_number":42,"context_line":"    #NOTE(N.S.): Uncomment this after dive into Heat"},{"line_number":43,"context_line":"    #client().servers.create_image(instance_id)"},{"line_number":44,"context_line":"    client().servers.suspend(instance_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2F9Mc%3D","line":41,"updated":"2013-10-07 14:22:35.000000000","message":"call this method suspend, please. It just proxies nova\u0027s suspend to make working with it more comfortable","commit_id":"e763bbf71211d8b2dc14a519ff9b16fd6c289746"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"83ac17d405a07cb706d1cb1f7b58ba579f92367a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    compute_url \u003d base.url_for(ctx.service_catalog, \u0027compute\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    nova \u003d nova_client.Client(ctx.user_name,"},{"line_number":25,"context_line":"                              ctx.token, ctx.tenant_id,"},{"line_number":26,"context_line":"                              auth_url\u003dcompute_url)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    nova.client.auth_token \u003d ctx.token"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATH%2F%2FfQI%3D","line":25,"updated":"2013-10-15 14:38:11.000000000","message":"Context\u0027 object has no attribute \u0027token\u0027","commit_id":"253024798b27cb5249d3288f211b9f098be4b6f6"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"383dfc3c506aba82df3a2d729218e57177227761","unresolved":false,"context_lines":[{"line_number":108,"context_line":"class ServerManager(servers.ServerManager):"},{"line_number":109,"context_line":"    resource_class \u003d ClimateServer"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def unshelve(self, server):"},{"line_number":112,"context_line":"        \"\"\"Unshelve the server.\"\"\""},{"line_number":113,"context_line":"        self._action(\u0027unshelve\u0027, server, None)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAAUH%2F%2Bes0%3D","line":111,"updated":"2014-01-25 07:49:43.000000000","message":"Not working, but I have a dirty hack for it.","commit_id":"859e941c7ea77a61bd3929c75d31ce421d01e93f"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"11f65140458be42d6e19b4e0959fa466d543a606","unresolved":false,"context_lines":[{"line_number":108,"context_line":"class ServerManager(servers.ServerManager):"},{"line_number":109,"context_line":"    resource_class \u003d ClimateServer"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def unshelve(self, server):"},{"line_number":112,"context_line":"        \"\"\"Unshelve the server.\"\"\""},{"line_number":113,"context_line":"        self._action(\u0027unshelve\u0027, server, None)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAAUH%2F%2BeMs%3D","line":111,"in_reply_to":"AAAAUH%2F%2Bes0%3D","updated":"2014-01-25 14:48:16.000000000","message":"Please add trace here, we\u0027ll see how to do that.","commit_id":"859e941c7ea77a61bd3929c75d31ce421d01e93f"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"383dfc3c506aba82df3a2d729218e57177227761","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\"Unshelve the server.\"\"\""},{"line_number":113,"context_line":"        self._action(\u0027unshelve\u0027, server, None)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def create_image(self, server, image_name\u003dNone, metadata\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Snapshot a server.\"\"\""},{"line_number":117,"context_line":"        if image_name is None:"},{"line_number":118,"context_line":"            image_name \u003d \"reserved_%s\" % server.name"}],"source_content_type":"text/x-python","patch_set":44,"id":"AAAAUH%2F%2Bes4%3D","line":115,"updated":"2014-01-25 07:49:43.000000000","message":"It\u0027s not working for many reason. Why don\u0027t we use the previous version of _image_create?","commit_id":"859e941c7ea77a61bd3929c75d31ce421d01e93f"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        self.nova \u003d nova_client.Client(**kwargs)"},{"line_number":89,"context_line":"        self.nova.client.auth_token \u003d auth_token"},{"line_number":90,"context_line":"        self.nova.client.management_url \u003d mgmt_url"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.nova.servers \u003d ServerManager(self.nova)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSrI%3D","line":90,"updated":"2014-01-28 11:26:41.000000000","message":"for the 2 lines above,\nthere is no way to achieve this behavior without monkey patching the nova cli ?\n\nreading the novaclient code, I think so.\n\nyou must provide params to the cli :\nbypass_url to set management_url\nauth_token to set .. auth_token.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"6d981a1fc4f0b3cdc05216e36678b277415e7bda","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        self.nova \u003d nova_client.Client(**kwargs)"},{"line_number":89,"context_line":"        self.nova.client.auth_token \u003d auth_token"},{"line_number":90,"context_line":"        self.nova.client.management_url \u003d mgmt_url"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.nova.servers \u003d ServerManager(self.nova)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSYc%3D","line":90,"in_reply_to":"AAAAUH%2F%2BSrI%3D","updated":"2014-01-28 11:35:48.000000000","message":"Nick, please ignore that as discussed with Swann on IRC channel. That functionality is not included to 2.15.0 nova client release.","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"96f859528b2447a82e9aee3ea2b0c7d0593a1bdc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Snapshot a server.\"\"\""},{"line_number":116,"context_line":"        server_name \u003d self.get(server_id).name"},{"line_number":117,"context_line":"        if image_name is None:"},{"line_number":118,"context_line":"            image_name \u003d \"reserved_%s\" % server_name"},{"line_number":119,"context_line":"        return super(ServerManager, self).create_image(server_id,"},{"line_number":120,"context_line":"                                                       image_name\u003dimage_name,"},{"line_number":121,"context_line":"                                                       metadata\u003dmetadata)"}],"source_content_type":"text/x-python","patch_set":48,"id":"AAAAUH%2F%2BSsM%3D","line":118,"updated":"2014-01-28 11:26:41.000000000","message":"the default image name prefix should be configurable IMO","commit_id":"75f60efe01265cabb29f3d60c025f3c86beb6cc1"}],"setup.cfg":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"82d163c3e841e38686cb3e581d99cedc656f1fbb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"climate.resource.plugins \u003d"},{"line_number":37,"context_line":"    dummy.vm.plugin\u003dclimate.plugins.dummy_vm_plugin:DummyVMPlugin"},{"line_number":38,"context_line":"    physical.host.plugin\u003dclimate.plugins.physical_host_plugin:PhysicalHostPlugin"},{"line_number":39,"context_line":"    basic.vm.plugin\u003dclimate.plugins.basic.vm_plugin:VMPlugin"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"[build_sphinx]"},{"line_number":42,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":21,"id":"AAAAT3%2F%2F%2FlQ%3D","line":39,"updated":"2013-12-25 08:43:51.000000000","message":"You moved that module to other place.\n\nclimate/plugins/instances/vm_plugin.py\n\nNo more climate.plugins.basic.vm_plugin","commit_id":"66d029977ae5ccc4b0b9fa97425fab33d0c768f5"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"3e08df43eec095614df786a8cdb164b5d67cf62b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"climate.resource.plugins \u003d"},{"line_number":37,"context_line":"    dummy.vm.plugin\u003dclimate.plugins.dummy_vm_plugin:DummyVMPlugin"},{"line_number":38,"context_line":"    physical.host.plugin\u003dclimate.plugins.physical_host_plugin:PhysicalHostPlugin"},{"line_number":39,"context_line":"    basic.vm.plugin\u003dclimate.plugins.basic.vm_plugin:VMPlugin"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"[build_sphinx]"},{"line_number":42,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":21,"id":"AAAAT3%2F%2F%2FaY%3D","line":39,"in_reply_to":"AAAAT3%2F%2F%2FlQ%3D","updated":"2013-12-25 09:55:26.000000000","message":"My bad. I\u0027ll fix it in next patchset","commit_id":"66d029977ae5ccc4b0b9fa97425fab33d0c768f5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ccf96a6ded208b0056cfcf92b5b33456c9226763","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"climate.resource.plugins \u003d"},{"line_number":37,"context_line":"    physical.host.plugin\u003dclimate.plugins.oshosts.host_plugin:PhysicalHostPlugin"},{"line_number":38,"context_line":"    basic.vm.plugin\u003dclimate.plugins.instances.vm_plugin:VMPlugin"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"[build_sphinx]"},{"line_number":41,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":41,"id":"AAAAUH%2F%2Bjzs%3D","line":38,"updated":"2014-01-24 11:51:36.000000000","message":"please also deliver an update climate.conf.example file","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"a02dc6889b91dd4745344af0c6349a565877135f","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"climate.resource.plugins \u003d"},{"line_number":37,"context_line":"    physical.host.plugin\u003dclimate.plugins.oshosts.host_plugin:PhysicalHostPlugin"},{"line_number":38,"context_line":"    basic.vm.plugin\u003dclimate.plugins.instances.vm_plugin:VMPlugin"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"[build_sphinx]"},{"line_number":41,"context_line":"all_files \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":41,"id":"AAAAUH%2F%2Bjoo%3D","line":38,"in_reply_to":"AAAAUH%2F%2Bjzs%3D","updated":"2014-01-24 12:29:02.000000000","message":"Done","commit_id":"092c8de7c3b63ee91ec10e07ad520b5a7bb76918"}]}
