unlock($fh);
+ close($fh);
+
my $cfg = encode_config($text);
return $cfg;
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";
}
}
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));
&$add_job($vm, $name);
}
- sync($param) if !$param->{skip};
+ eval {sync($param) if !$param->{skip};};
+ if(my $err = $@) {
+ destroy($param);
+ print $err;
+ }
}
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);
};
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};
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};
}
sub cron_del {
- my ($source, $name) = @_;
+ my ($source, $dest, $name) = @_;
open(my $fh, '<', "$CRONJOBS")
or die "Could not open file: $!\n";
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;
}
}
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;