X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=PVE%2FAPI2%2FDisks%2FDirectory.pm;fp=PVE%2FAPI2%2FDisks%2FDirectory.pm;h=c9dcb526bfc5f88ef4b86ac9711480f5488b56f0;hb=f81908eb58939b75ee4eb7abcde4ed078e84edac;hp=e9b05be7ea67533c0607b78071a15f1de2b612b5;hpb=26082b7dafe7ca8d0b12125c881c62658606cae7;p=pve-storage.git diff --git a/PVE/API2/Disks/Directory.pm b/PVE/API2/Disks/Directory.pm index e9b05be..c9dcb52 100644 --- a/PVE/API2/Disks/Directory.pm +++ b/PVE/API2/Disks/Directory.pm @@ -314,6 +314,12 @@ __PACKAGE__->register_method ({ properties => { node => get_standard_option('pve-node'), name => get_standard_option('pve-storage-id'), + 'cleanup-disks' => { + description => "Also wipe disk so it can be repurposed afterwards.", + type => 'boolean', + optional => 1, + default => 0, + }, }, }, returns => { type => 'string' }, @@ -331,10 +337,30 @@ __PACKAGE__->register_method ({ my $mountunitpath = "/etc/systemd/system/$mountunitname"; PVE::Diskmanage::locked_disk_action(sub { + my $to_wipe; + if ($param->{'cleanup-disks'}) { + my $unit = $read_ini->($mountunitpath); + + my $dev = PVE::Diskmanage::verify_blockdev_path($unit->{'Mount'}->{'What'}); + $to_wipe = $dev; + + # clean up whole device if this is the only partition + $dev =~ s|^/dev/||; + my $info = PVE::Diskmanage::get_disks($dev, 1, 1); + die "unable to obtain information for disk '$dev'\n" if !$info->{$dev}; + $to_wipe = $info->{$dev}->{parent} + if $info->{$dev}->{parent} && scalar(keys $info->%*) == 2; + } + run_command(['systemctl', 'stop', $mountunitname]); run_command(['systemctl', 'disable', $mountunitname]); unlink $mountunitpath or $! == ENOENT or die "cannot remove $mountunitpath - $!\n"; + + if ($to_wipe) { + PVE::Diskmanage::wipe_blockdev($to_wipe); + PVE::Diskmanage::udevadm_trigger($to_wipe); + } }); };