add instance filter
diff --git a/.gitignore b/.gitignore
index 73d1eaf..32e35b0 100755
--- a/.gitignore
+++ b/.gitignore
@@ -59,4 +59,13 @@
 
 # Files created by releasenotes build
 releasenotes/build
-.idea/
\ No newline at end of file
+.idea/
+
+# sqlite file
+*.sqlite
+
+# log
+*.log
+
+# envvar openrc file
+*openrc.sh
\ No newline at end of file
diff --git a/etc/staffeln/staffeln.conf b/etc/staffeln/staffeln.conf
index 5a735b2..5b8210c 100644
--- a/etc/staffeln/staffeln.conf
+++ b/etc/staffeln/staffeln.conf
@@ -4,7 +4,7 @@
 
 [database]
 backend = sqlalchemy
-connection = "mysql://root:password@localhost:3306/staffeln"
+connection = "mysql+pymysql://root:password@localhost:3306/staffeln"
 mysql_engine = InnoDB
 # mysql_sql_mode = TRADITIONAL
 # idle_timeout = 3600
diff --git a/requirements.txt b/requirements.txt
index b8a1585..45ae2d5 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -13,5 +13,5 @@
 openstacksdk>0.28.0
 pymysql
 
-email
-smtplib
\ No newline at end of file
+# email
+# smtplib
\ No newline at end of file
diff --git a/staffeln/common/constants.py b/staffeln/common/constants.py
index 5818dcd..d537d48 100644
--- a/staffeln/common/constants.py
+++ b/staffeln/common/constants.py
@@ -1,3 +1,5 @@
 BACKUP_COMPLETED=2

 BACKUP_WIP=1

 BACKUP_PLANNED=0

+

+BACKUP_ENABLED_KEY = 'true'
\ No newline at end of file
diff --git a/staffeln/conductor/backup.py b/staffeln/conductor/backup.py
index 53ca1e0..a37235b 100755
--- a/staffeln/conductor/backup.py
+++ b/staffeln/conductor/backup.py
@@ -60,6 +60,14 @@
         for queue in queue_list:

             self._volume_queue(queue)

 

+    # Backup the volumes attached to which has a specific metadata

+    def filter_server(self, metadata):

+

+        if not CONF.conductor.backup_metadata_key in metadata:

+            return False

+

+        return metadata[CONF.conductor.backup_metadata_key].lower() == constants.BACKUP_ENABLED_KEY

+

     def check_instance_volumes(self):

         """Get the list of all the volumes from the project using openstacksdk

         Function first list all the servers in the project and get the volumes

@@ -72,7 +80,8 @@
                 details=True, all_projects=True, project_id=project.id

             )

             for server in servers:

-                server_id = server.host_id

+                if not self.filter_server(server.metadata): continue

+                server_id = server.id

                 volumes = server.attached_volumes

                 for volume in volumes:

                     queues_map.append(

@@ -112,16 +121,16 @@
             volume_backup = conn.block_storage.create_backup(

                 volume_id=queue.volume_id, force=True

             )

-            update_queue = objects.Queue.get_by_id(self.ctx, queue.id)

-            update_queue.backup_id = volume_backup.id

-            update_queue.backup_status = constants.BACKUP_WIP

-            update_queue.save()

+

+            queue.backup_id = volume_backup.id

+            queue.backup_status = constants.BACKUP_WIP

+            queue.save()

         else:

             pass

             # TODO(Alex): remove this task from the task list

-            # Backup planned task cannot have backup_id in the same cycle

-            # Reserve for now because it is related to the WIP backup genenrators which

-            # are not finished in the current cycle

+            #  Backup planned task cannot have backup_id in the same cycle

+            #  Reserve for now because it is related to the WIP backup genenrators which

+            #  are not finished in the current cycle

 

     def process_failed_task(self, task):

         LOG.error("Backup of the volume %s failed." % task.id)

diff --git a/staffeln/conductor/manager.py b/staffeln/conductor/manager.py
index be3b433..fc00d6b 100755
--- a/staffeln/conductor/manager.py
+++ b/staffeln/conductor/manager.py
@@ -9,6 +9,7 @@
 from staffeln.common import constants
 from staffeln.conductor import backup
 from staffeln.common import context
+from staffeln.i18n import _
 
 LOG = log.getLogger(__name__)
 CONF = staffeln.conf.CONF
@@ -62,15 +63,20 @@
         LOG.info("backing... %s" % str(time.time()))
         LOG.info("%s periodics" % self.name)
 
+        # TODO(Alex): need to escalate discussion
+        #  how to manage last backups not finished yet
         if len(self.get_all_tasks()) == 0:
             backup.Backup().create_queue()
-        #     TODO(Alex): reschedule the backup engine immediately
+        else:
+            LOG.info(_("The last backup cycle is not finished yet."
+                       "So the new backup cycle is skipped."))
 
         queues_started = self.get_wip_tasks()
         if len(queues_started) != 0:
             for queue in queues_started: backup.Backup().check_volume_backup_status(queue)
 
         queues_to_start = self.get_todo_tasks()
+        print(queues_to_start)
         if len(queues_to_start) != 0:
             for queue in queues_to_start:
                 backup.Backup().volume_backup_initiate(queue)
diff --git a/staffeln/conf/conductor.py b/staffeln/conf/conductor.py
index 9906004..a4ea907 100755
--- a/staffeln/conf/conductor.py
+++ b/staffeln/conf/conductor.py
@@ -23,7 +23,7 @@
     ),
     cfg.StrOpt(
         "backup_metadata_key",
-        default="test",
+        default="__automated_backup",
         help=_("The key string of metadata the VM, which requres back up, has"),
     ),
 ]
diff --git a/staffeln/conf/notify.py b/staffeln/conf/notify.py
index 20f1ede..42daefe 100644
--- a/staffeln/conf/notify.py
+++ b/staffeln/conf/notify.py
@@ -11,7 +11,7 @@
 email_opts = [
     cfg.StrOpt(
         "template",
-        default="<h3>${CONTENT}</h3>",
+        default="<h3>\${CONTENT}</h3>",
         help=_("This html template is used to email the backup result."),
     ),
     cfg.ListOpt(