name => 'jobs',
path => 'jobs',
method => 'GET',
- description => "List of all replication jobs.",
+ description => "List replication jobs.",
permissions => {
user => 'all',
},
additionalProperties => 0,
properties => {
node => get_standard_option('pve-node'),
- nodes => get_standard_option('pve-node-list' ,
- {description => "Notes where the jobs is located.",
- optional => 1}),
},
},
returns => { type => 'object' },
code => sub {
my ($param) = @_;
- if ($param->{nodes}) {
- foreach my $node (PVE::Tools::split_list($param->{nodes})) {
- die "Node: $node does not exists.\n" if
- !PVE::Cluster::check_node_exists($node);
- }
- }
-
- my $nodes = $param->{nodes} ?
- $param->{nodes} : $param->{node};
-
- return PVE::ReplicationTools::get_all_jobs($nodes);
-}});
+ return PVE::ReplicationTools::get_all_jobs();
+ }});
1;
PVE::RPCEnvironment->setup_default_cli_env();
}
-my $print_list = sub {
- my ($conf, $json) = @_;
-
- if (defined($json)) {
- print JSON::encode_json($conf);
- } else {
- printf("%-10s%-20s%-20s%-5s%-10s%-5s\n",
- "VMID", "DEST", "LAST SYNC","IVAL", "STATE", "FAIL");
-
- foreach my $vmid (sort keys %$conf) {
- my $job = $conf->{$vmid};
- my $timestr = strftime("%Y-%m-%d_%H:%M:%S", localtime($job->{lastsync}));
-
- printf("%-9s ", $vmid);
- printf("%-19s ", $job->{tnode});
- printf("%-19s ", $timestr);
- printf("%-4s ", $job->{interval});
- printf("%-9s ", $job->{state});
- printf("%-9s\n", $job->{fail});
- }
+my $print_job_list = sub {
+ my ($conf) = @_;
+
+ printf("%-10s%-20s%-20s%-5s%-10s%-5s\n",
+ "VMID", "DEST", "LAST SYNC","IVAL", "STATE", "FAIL");
+
+ foreach my $vmid (sort keys %$conf) {
+ my $job = $conf->{$vmid};
+ my $timestr = strftime("%Y-%m-%d_%H:%M:%S", localtime($job->{lastsync}));
+
+ printf("%-9s ", $vmid);
+ printf("%-19s ", $job->{tnode});
+ printf("%-19s ", $timestr);
+ printf("%-4s ", $job->{interval});
+ printf("%-9s ", $job->{state});
+ printf("%-9s\n", $job->{fail});
}
-
};
sub set_list {
}});
-__PACKAGE__->register_method ({
- name => 'list',
- path => 'list',
- method => 'GET',
- description => "List of all replication jobs.",
- permissions => {
- user => 'all'
- },
- protected => 1,
- parameters => {
- additionalProperties => 0,
- properties => {
- vmid => {
- type => 'string', format => 'pve-vmid',
- description => "The VMID of the guest.",
- completion => \&PVE::Cluster::complete_local_vmid,
- },
- },
- },
- protected => 1,
- proxyto => 'node',
- parameters => {
- additionalProperties => 0,
- properties => {
- node => get_standard_option('pve-node'),
- nodes => get_standard_option('pve-node-list' ,
- {description => "Notes where the jobs is located.",
- optional => 1}),
- json => {
- optional => 1,
- type => 'boolean',
- description => "Output in JSON format.",
- },
- },
- },
- returns => { type => 'string' },
- code => sub {
- my ($param) = @_;
-
- if ($param->{nodes}) {
- foreach my $node (PVE::Tools::split_list($param->{nodes})) {
- die "Node: $node does not exists.\n" if
- !PVE::Cluster::check_node_exists($node);
- }
- }
-
- my $nodes = $param->{nodes} ?
- $param->{nodes} : $param->{node};
-
- my $list = PVE::ReplicationTools::get_all_jobs($nodes);
-
- &$print_list($list, $param->{json});
-}});
our $cmddef = {
- list => [ __PACKAGE__ , 'list' , [], {node => $nodename}],
+ jobs => [ 'PVE::API2::Storage::Replication', 'jobs' , [],
+ {node => $nodename}, $print_job_list ],
run => [ __PACKAGE__ , 'run'],
destroyjob => [ __PACKAGE__ , 'destroyjob', ['vmid']],
};
}
sub get_all_jobs {
- my ($nodes) = @_;
-
- my @nodelist = PVE::Tools::split_list($nodes);
my $vms = PVE::Cluster::get_vmlist();
- my $state = read_state();
- my $jobs = {};
-
- my $outfunc = sub {
- my $line = shift;
-
- my $remote_jobs = JSON::decode_json($line);
- foreach my $vmid (keys %$remote_jobs) {
- $jobs->{$vmid} = $remote_jobs->{$vmid};
- }
- };
-
- foreach my $node (@nodelist) {
- if ($local_node ne $node) {
- my $ip = get_node_ip($node);
- $ip = [$ip] if Net::IP::ip_is_ipv6($ip);
-
- my @cmd = ('ssh', '-o', 'Batchmode=yes', "root\@$ip", '--',
- 'pvesr', 'list', '--json');
-
- run_command([@cmd], outfunc=>$outfunc)
+ my $state = read_state();
- } else {
+ my $jobs = {};
- foreach my $vmid (keys %{$vms->{ids}}) {
+ foreach my $vmid (keys %{$vms->{ids}}) {
+ next if $vms->{ids}->{$vmid}->{node} ne $local_node;
- next if !($vms->{ids}->{$vmid}->{node} eq $local_node);
- next if !defined($state->{$vmid});
- my $vm_state = $state->{$vmid};
- my $job = {};
+ my $vm_state = $state->{$vmid};
+ next if !defined($vm_state);
- $job->{limit} = $vm_state->{limit};
- $job->{interval} = $vm_state->{interval};
- $job->{tnode} = $vm_state->{tnode};
- $job->{lastsync} = $vm_state->{lastsync};
- $job->{state} = $vm_state->{state};
- $job->{fail} = $vm_state->{fail};
+ my $job = {};
- $jobs->{$vmid} = $job;
- }
+ $job->{limit} = $vm_state->{limit};
+ $job->{interval} = $vm_state->{interval};
+ $job->{tnode} = $vm_state->{tnode};
+ $job->{lastsync} = $vm_state->{lastsync};
+ $job->{state} = $vm_state->{state};
+ $job->{fail} = $vm_state->{fail};
- }
+ $jobs->{$vmid} = $job;
}
- return ($jobs);
+ return $jobs;
}
sub sync_guest {