pvesr: rename list => jobs, call API

to avoid code duplication. I also removed the functioanlity to query
jobs on other nodes, because it is clumsy and not really needed.
This commit is contained in:
Dietmar Maurer
2017-05-05 10:31:51 +02:00
parent 07dff26749
commit e0992d57e1
3 changed files with 33 additions and 128 deletions

View File

@ -43,7 +43,7 @@ __PACKAGE__->register_method ({
name => 'jobs', name => 'jobs',
path => 'jobs', path => 'jobs',
method => 'GET', method => 'GET',
description => "List of all replication jobs.", description => "List replication jobs.",
permissions => { permissions => {
user => 'all', user => 'all',
}, },
@ -53,26 +53,13 @@ __PACKAGE__->register_method ({
additionalProperties => 0, additionalProperties => 0,
properties => { properties => {
node => get_standard_option('pve-node'), 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' }, returns => { type => 'object' },
code => sub { code => sub {
my ($param) = @_; my ($param) = @_;
if ($param->{nodes}) { return PVE::ReplicationTools::get_all_jobs();
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);
}});
1; 1;

View File

@ -21,12 +21,9 @@ sub setup_environment {
PVE::RPCEnvironment->setup_default_cli_env(); PVE::RPCEnvironment->setup_default_cli_env();
} }
my $print_list = sub { my $print_job_list = sub {
my ($conf, $json) = @_; my ($conf) = @_;
if (defined($json)) {
print JSON::encode_json($conf);
} else {
printf("%-10s%-20s%-20s%-5s%-10s%-5s\n", printf("%-10s%-20s%-20s%-5s%-10s%-5s\n",
"VMID", "DEST", "LAST SYNC","IVAL", "STATE", "FAIL"); "VMID", "DEST", "LAST SYNC","IVAL", "STATE", "FAIL");
@ -41,8 +38,6 @@ my $print_list = sub {
printf("%-9s ", $job->{state}); printf("%-9s ", $job->{state});
printf("%-9s\n", $job->{fail}); printf("%-9s\n", $job->{fail});
} }
}
}; };
sub set_list { sub set_list {
@ -157,63 +152,11 @@ __PACKAGE__->register_method ({
}}); }});
__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 = { our $cmddef = {
list => [ __PACKAGE__ , 'list' , [], {node => $nodename}], jobs => [ 'PVE::API2::Storage::Replication', 'jobs' , [],
{node => $nodename}, $print_job_list ],
run => [ __PACKAGE__ , 'run'], run => [ __PACKAGE__ , 'run'],
destroyjob => [ __PACKAGE__ , 'destroyjob', ['vmid']], destroyjob => [ __PACKAGE__ , 'destroyjob', ['vmid']],
}; };

View File

@ -85,41 +85,19 @@ sub get_node_ip {
} }
sub get_all_jobs { sub get_all_jobs {
my ($nodes) = @_;
my @nodelist = PVE::Tools::split_list($nodes);
my $vms = PVE::Cluster::get_vmlist(); my $vms = PVE::Cluster::get_vmlist();
my $state = read_state(); my $state = read_state();
my $jobs = {}; 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)
} else {
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 $vm_state = $state->{$vmid};
next if !defined($vm_state);
my $job = {}; my $job = {};
$job->{limit} = $vm_state->{limit}; $job->{limit} = $vm_state->{limit};
@ -132,10 +110,7 @@ sub get_all_jobs {
$jobs->{$vmid} = $job; $jobs->{$vmid} = $job;
} }
} return $jobs;
}
return ($jobs);
} }
sub sync_guest { sub sync_guest {