Fix remote scheduling of programs
authorSamir Aguiar <samirjaguiar@gmail.com>
Fri, 14 Dec 2018 18:28:00 +0000 (16:28 -0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 7 Feb 2019 15:50:39 +0000 (16:50 +0100)
When scheduling a program on a remote VM, the schedule file was
not being sent to the VM. Also, when removing previously schedule
files rm was waiting for confirmation since we didn't pass it
the `-f` option.

src/arnied_wrapper.py

index 2f279a4..fc5dc1b 100644 (file)
@@ -331,30 +331,34 @@ def schedule(program, exec_time=0, optional_args="", vm=None):
     :type vm: VM object or None
     """
     log.info("Scheduling %s to be executed at %i", program, exec_time)
-    tmp_file = tempfile.NamedTemporaryFile(mode="w+",
-                                           prefix=program.upper() + "_",
-                                           dir=DUMP_CONFIG_DIR,
-                                           delete=False)
-    log.debug("Created temporary file %s", tmp_file.name)
-    contents = "%i\n%s\n" % (exec_time, optional_args)
-    tmp_file.write(contents)
-    tmp_file.close()
     schedule_dir = "/var/intranator/schedule"
-    # clean from already scheduled backups
+    # clean previous schedules of the same program
     files = vm.session.cmd("ls " + schedule_dir).split() if vm else os.listdir(schedule_dir)
     for file_name in files:
         if file_name.startswith(program.upper()):
             log.debug("Removing previous scheduled %s", file_name)
             if vm:
-                vm.session.cmd("rm " + file_name)
+                vm.session.cmd("rm -f " + os.path.join(schedule_dir, file_name))
             else:
                 os.unlink(os.path.join(schedule_dir, file_name))
-    moved_tmp_file = os.path.join(schedule_dir,
-                                  os.path.basename(tmp_file.name))
+
+    contents = "%i\n%s\n" % (exec_time, optional_args)
+
+    tmp_file = tempfile.NamedTemporaryFile(mode="w+",
+                                        prefix=program.upper() + "_",
+                                        dir=DUMP_CONFIG_DIR,
+                                        delete=False)
+    log.debug("Created temporary file %s", tmp_file.name)
+    tmp_file.write(contents)
+    tmp_file.close()
+    moved_tmp_file = os.path.join(schedule_dir, os.path.basename(tmp_file.name))
+
     if vm:
-        vm.session.cmd("mv " + tmp_file.name + " " + moved_tmp_file)
+        vm.copy_files_to(tmp_file.name, moved_tmp_file)
+        os.remove(tmp_file.name)
     else:
         shutil.move(tmp_file.name, moved_tmp_file)
+
     log.debug("Moved temporary file to %s", moved_tmp_file)