default => '*/15',
optional => 1,
},
+ source => {
+ description => "Source of the replication.",
+ type => 'string', format => 'pve-node',
+ optional => 1,
+ },
},
};
if defined($data->{comment});
}
- $class->SUPER::write_config($filename, $cfg);
+ return $class->SUPER::write_config($filename, $cfg);
}
sub new {
sub find_local_replication_job {
my ($cfg, $vmid, $target) = @_;
- my $vms = PVE::Cluster::get_vmlist();
-
foreach my $id (keys %{$cfg->{ids}}) {
my $data = $cfg->{ids}->{$id};
- $data->{vmtype} = $vms->{ids}->{$vmid}->{type};
-
return $data if $data->{type} eq 'local' &&
$data->{guest} == $vmid && $data->{target} eq $target;
}
lock($code);
}
+sub remove_vmid_jobs {
+ my ($vmid) = @_;
+
+ my $code = sub {
+ my $cfg = __PACKAGE__->new();
+ foreach my $id (keys %{$cfg->{ids}}) {
+ delete $cfg->{ids}->{$id} if ($cfg->{ids}->{$id}->{guest} == $vmid);
+ }
+ $cfg->write();
+ };
+
+ lock($code);
+}
+
+sub swap_source_target_nolock {
+ my ($jobid) = @_;
+
+ my $cfg = __PACKAGE__->new();
+ my $job = $cfg->{ids}->{$jobid};
+ my $tmp = $job->{source};
+ $job->{source} = $job->{target};
+ $job->{target} = $tmp;
+ $cfg->write();
+
+ return $cfg->{ids}->{$jobid};
+}
+
package PVE::ReplicationConfig::Cluster;
use base qw(PVE::ReplicationConfig);
rate => { optional => 1 },
schedule => { optional => 1 },
remove_job => { optional => 1 },
+ source => { optional => 1 },
};
}