]> git.proxmox.com Git - pve-zsync.git/blobdiff - pve-zsync
fix in cron_del multiple deletion and correct timestamp for deletion config
[pve-zsync.git] / pve-zsync
index 9d6f8685d49bf6d2037c9f440d0230fd21a5ba1d..4a0d2d82793f2573869eefe0282afa251686fa37 100644 (file)
--- a/pve-zsync
+++ b/pve-zsync
@@ -123,6 +123,8 @@ sub read_from_config {
 
     unlock($fh);
 
+    close($fh);
+
     my $cfg = encode_config($text);
 
     return $cfg;
@@ -131,10 +133,10 @@ sub read_from_config {
 sub decode_config {
     my ($cfg) = @_;
     my $raw = '';
-    foreach my $source (keys%{$cfg}){
-       foreach my $sync_name (keys%{$cfg->{$source}}){
+    foreach my $source (sort keys%{$cfg}){
+       foreach my $sync_name (sort keys%{$cfg->{$source}}){
            $raw .= "$source: $sync_name\n";
-               foreach my $parameter (keys%{$cfg->{$source}->{$sync_name}}){
+               foreach my $parameter (sort keys%{$cfg->{$source}->{$sync_name}}){
                    $raw .= "\t$parameter: $cfg->{$source}->{$sync_name}->{$parameter}\n";
                }
        }
@@ -260,9 +262,9 @@ sub list {
     my $cfg = read_from_config("$CONFIG_PATH$CONFIG");
 
     my $list = sprintf("%-25s%-15s%-7s%-20s%-10s%-5s\n" , "SOURCE", "NAME", "ACTIVE", "LAST SYNC", "INTERVAL", "TYPE");
-
-    foreach my $source (keys%{$cfg}){
-       foreach my $sync_name (keys%{$cfg->{$source}}){
+    
+    foreach my $source (sort keys%{$cfg}){
+       foreach my $sync_name (sort keys%{$cfg->{$source}}){
            my $source_name = $source;
            $source_name = $cfg->{$source}->{$sync_name}->{source_ip}.":".$source if $cfg->{$source}->{$sync_name}->{source_ip};
            $list .= sprintf("%-25s%-15s", cut_to_width($source_name,25), cut_to_width($sync_name,15));
@@ -365,7 +367,11 @@ sub init {
        &$add_job($vm, $name);
     }
 
-    sync($param) if !$param->{skip};
+    eval {sync($param) if !$param->{skip};};
+    if(my $err = $@) {
+       destroy($param);
+       print $err;
+    }
 }
 
 sub destroy {
@@ -383,13 +389,22 @@ sub destroy {
 
        die "Sync Name does not exist!\n" unless $cfg->{$path}->{$name};
 
+       my $source .= $cfg->{$path}->{$name}->{source_ip} ? "$cfg->{$path}->{$name}->{source_ip}:"  : '';
+
+       $source .= $cfg->{$path}->{$name}->{source_pool};
+       $source .= $cfg->{$path}->{$name}->{source_path} ? $cfg->{$path}->{$name}->{source_path}  :'';
+
+       my $dest = $cfg->{$path}->{$name}->{dest_ip} ? $cfg->{$path}->{$name}->{dest_ip}  :"";
+       $dest .= $cfg->{$path}->{$name}->{dest_pool};
+       $dest .= $cfg->{$path}->{$name}->{dest_path} ? $cfg->{$path}->{$name}->{dest_path}  :'';
+
        delete $cfg->{$path}->{$name};
 
        delete $cfg->{$path} if keys%{$cfg->{$path}} == 0;
 
        write_to_config($cfg);
 
-       cron_del($path, $name);
+       cron_del($source, $dest, $name);
     };
 
 
@@ -440,6 +455,7 @@ sub sync {
 
        snapshot_destroy($source, $dest, $method, $source->{old_snap}) if ($source->{destroy} && $source->{old_snap});
 
+
        if ($job_status && $job_status eq "exist") {
            my $conf_name = $source->{abs_path};
            $conf_name = $source->{vmid} if $source->{vmid};
@@ -455,7 +471,7 @@ sub sync {
         die "VM $source->{vmid} doesn't exist\n" if !vm_exists($source);
        my $disks = get_disks($source);
 
-        foreach my $disk (keys %{$disks}) {
+        foreach my $disk (sort keys %{$disks}) {
            $source->{abs_path} = $disks->{$disk}->{pool};
            $source->{abs_path} .= "\/$disks->{$disk}->{path}" if $disks->{$disk}->{path};
 
@@ -555,7 +571,7 @@ sub cron_add {
 }
 
 sub cron_del {
-    my ($source, $name) = @_;
+    my ($source, $dest, $name) = @_;
 
     open(my $fh, '<', "$CRONJOBS")
        or die "Could not open file: $!\n";
@@ -567,7 +583,7 @@ sub cron_del {
     close($fh);
     while ($text && $text =~ s/^(.*?)(\n|$)//) {
        my $line = $1.$2;
-               if ($line !~ m/.*$PROGNAME.*$source.*$name.*/){
+       if ($line !~ m/^.*root $PATH$PROGNAME sync -source  $source.*-dest  $dest.*-name $name.*$/){
            $buffer .= $line;
        }
     }
@@ -790,8 +806,8 @@ sub status {
 
     my $status_list = sprintf("%-25s%-15s%-10s\n","SOURCE","NAME","STATUS");
 
-    foreach my $source (keys%{$cfg}){
-       foreach my $sync_name (keys%{$cfg->{$source}}){
+    foreach my $source (sort keys%{$cfg}){
+       foreach my $sync_name (sort keys%{$cfg->{$source}}){
          my $status;
 
                my $source_name = $source;