]> git.proxmox.com Git - pve-storage.git/blob - PVE/API2/Storage/Replication.pm
Revert "free: added snapshot parameter"
[pve-storage.git] / PVE / API2 / Storage / Replication.pm
1 package PVE::API2::Storage::Replication;
2
3 use warnings;
4 use strict;
5
6 use PVE::JSONSchema qw(get_standard_option);
7 use PVE::RPCEnvironment;
8 use PVE::ReplicationTools;
9
10 use PVE::RESTHandler;
11
12 use base qw(PVE::RESTHandler);
13
14 __PACKAGE__->register_method ({
15 name => 'index',
16 path => '',
17 method => 'GET',
18 permissions => { user => 'all' },
19 description => "Directory index.",
20 parameters => {
21 additionalProperties => 0,
22 properties => {
23 node => get_standard_option('pve-node'),
24 },
25 },
26 returns => {
27 type => 'array',
28 items => {
29 type => "object",
30 properties => {},
31 },
32 links => [ { rel => 'child', href => "{name}" } ],
33 },
34 code => sub {
35 my ($param) = @_;
36
37 return [
38 { name => 'jobs' },
39 ];
40 }});
41
42
43 __PACKAGE__->register_method ({
44 name => 'jobs',
45 path => 'jobs',
46 method => 'GET',
47 description => "List replication jobs.",
48 permissions => {
49 description => "Only list jobs where you have VM.Audit permissons on /vms/<vmid>.",
50 user => 'all',
51 },
52 protected => 1,
53 proxyto => 'node',
54 parameters => {
55 additionalProperties => 0,
56 properties => {
57 node => get_standard_option('pve-node'),
58 },
59 },
60 returns => {
61 type => 'array',
62 items => {
63 type => "object",
64 properties => {},
65 },
66 links => [ { rel => 'child', href => "{vmid}" } ],
67 },
68 code => sub {
69 my ($param) = @_;
70
71 my $rpcenv = PVE::RPCEnvironment::get();
72 my $authuser = $rpcenv->get_user();
73
74 my $jobs = PVE::ReplicationTools::get_all_jobs();
75
76 my $res = [];
77 foreach my $vmid (sort keys %$jobs) {
78 next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Audit' ]);
79 my $job = $jobs->{$vmid};
80 $job->{vmid} = $vmid;
81 push @$res, $job;
82 }
83
84 return $res;
85 }});
86
87 __PACKAGE__->register_method ({
88 name => 'destroy_job',
89 path => 'jobs/vmid',
90 method => 'DELETE',
91 description => "Destroy replication job.",
92 permissions => {
93 check => ['perm', '/vms/{vmid}', ['VM.Config.Disk']],
94 },
95 protected => 1,
96 parameters => {
97 additionalProperties => 0,
98 properties => {
99 vmid => {
100 description => "The VMID of the guest.",
101 type => 'string', format => 'pve-vmid',
102 },
103 },
104 },
105 returns => { type => 'null' },
106 code => sub {
107 my ($param) = @_;
108
109 PVE::ReplicationTools::destroy_replica($param->{vmid});
110
111 return undef;
112 }});
113
114 1;