]>
git.proxmox.com Git - pve-manager.git/blob - PVE/API2/Cluster/BackupInfo.pm
bea0e46037861e8356ca6bcd9f340c67e96fc89f
1 package PVE
::API2
::Cluster
::BackupInfo
;
8 use PVE
::Tools
qw(extract_param);
9 use PVE
::Cluster
qw(cfs_lock_file cfs_read_file cfs_write_file);
11 use PVE
::RPCEnvironment
;
14 use PVE
::Exception
qw(raise_param_exc);
16 use PVE
::VZDump
::Common
;
18 use base
qw(PVE::RESTHandler);
20 sub get_included_vmids
{
21 my $vzconf = cfs_read_file
('vzdump.cron');
23 my $all_jobs = $vzconf->{jobs
} || [];
26 for my $job (@$all_jobs) {
27 my $job_included_guests = PVE
::VZDump
::get_included_guests
($job);
28 push @all_vmids, ( map { @{$_} } values %{$job_included_guests} );
31 my $vzjobs = cfs_read_file
('jobs.cfg');
33 for my $job (values %{$vzjobs->{ids
}}) {
34 next if $job->{type
} ne 'vzdump';
36 my $job_included_guests = PVE
::VZDump
::get_included_guests
($job);
37 push @all_vmids, ( map { @{$_} } values %{$job_included_guests} );
40 return { map { $_ => 1 } @all_vmids };
43 __PACKAGE__-
>register_method({
47 description
=> "Index for backup info related endpoints",
49 additionalProperties
=> 0,
54 description
=> 'Directory index.',
60 description
=> 'API sub-directory endpoint',
64 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
68 { subdir
=> 'not-backed-up' },
72 __PACKAGE__-
>register_method({
73 name
=> 'get_guests_not_in_backup',
74 path
=> 'not-backed-up',
77 description
=> "Shows all guests which are not covered by any backup job.",
79 check
=> ['perm', '/', ['Sys.Audit']],
82 additionalProperties
=> 0,
87 description
=> 'Contains the guest objects.',
93 description
=> 'VMID of the guest.',
97 description
=> 'Name of the guest',
102 description
=> 'Type of the guest.',
103 enum
=> ['qemu', 'lxc'],
109 my $rpcenv = PVE
::RPCEnvironment
::get
();
110 my $user = $rpcenv->get_user();
111 my $rrd = PVE
::Cluster
::rrd_dump
();
112 my $included_vmids = get_included_vmids
();
113 my $vmlist = PVE
::Cluster
::get_vmlist
();
114 my @vmids = ( keys %{$vmlist->{ids
}} );
116 # remove VMIDs to which the user has no permission to not leak infos
117 # like the guest name
118 my @allowed_vmids = grep {
119 $rpcenv->check($user, "/vms/$_", [ 'VM.Audit' ], 1);
124 for my $vmid (@allowed_vmids) {
126 next if $included_vmids->{$vmid};
128 my $type = $vmlist->{ids
}->{$vmid}->{type
};
129 my $node = $vmlist->{ids
}->{$vmid}->{node
};
134 if ($type eq 'qemu') {
135 $conf = PVE
::QemuConfig-
>load_config($vmid, $node);
136 $name = $conf->{name
};
137 } elsif ($type eq 'lxc') {
138 $conf = PVE
::LXC
::Config-
>load_config($vmid, $node);
139 $name = $conf->{hostname
};
141 die "VMID $vmid is neither Qemu nor LXC guest\n";