Merge pull request #43 from vexxhost/exception

Added exception handler for the keystone errors
diff --git a/staffeln/common/openstack.py b/staffeln/common/openstack.py
index 1a7c10e..75f2379 100644
--- a/staffeln/common/openstack.py
+++ b/staffeln/common/openstack.py
@@ -67,7 +67,7 @@
         )

 

 

-    def delete_backup(self, uuid, project_id=None, force=True):

+    def delete_backup(self, uuid, project_id=None, force=False):

         # Note(Alex): v3 is not supporting force delete?

         # conn.block_storage.delete_backup(

         #     project_id=project_id, backup_id=uuid,

diff --git a/staffeln/conductor/backup.py b/staffeln/conductor/backup.py
index 957c59f..d7f61e0 100755
--- a/staffeln/conductor/backup.py
+++ b/staffeln/conductor/backup.py
@@ -270,6 +270,17 @@
                     queue.backup_id = parsed["id"]
                 queue.backup_status = constants.BACKUP_WIP
                 queue.save()
+            # Added extra exception as OpenstackSDKException does not handle the keystone unauthourized issue.
+            except Exception as error:
+                reason = _("Backup creation for the volume %s failled. %s"
+                           % (queue.volume_id, str(error)))
+                LOG.error(reason)
+                self.result.add_failed_backup(project_id, queue.volume_id, reason)
+                parsed = parse.parse("Error in creating volume backup {id}", str(error))
+                if parsed is not None:
+                    queue.backup_id = parsed["id"]
+                queue.backup_status = constants.BACKUP_WIP
+                queue.save()
         else:
             pass
             # TODO(Alex): remove this task from the task list
@@ -293,7 +304,7 @@
         self.result.add_failed_backup(task.project_id, task.volume_id, reason)
         LOG.error(reason)
         # 2. delete backup generator
-        self.openstacksdk.delete_backup(uuid=task.backup_id)
+        self.openstacksdk.delete_backup(uuid=task.backup_id, force=True)
         # 3. remove failed task from the task queue
         task.delete_queue()