]> git.proxmox.com Git - pve-storage.git/commitdiff
pvesm set: handle deletion of properties
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 14 May 2019 14:18:50 +0000 (16:18 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 14 May 2019 14:24:34 +0000 (16:24 +0200)
the delete parameter get's injected by the SectionConfigs
updateSchem, but we need to handle it ourself in the code
This makes the following possible:

pvesm set STORAGEID --delete property

Also the API equivalent is now possible. Adapted from the HA
managers Resource update API call.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/API2/Storage/Config.pm

index c114ddc76ece5c40508a3dd8218bf8da150d09e0..f5e156055ce9b9c79b6ddefe1d4cdba320ae6855 100755 (executable)
@@ -195,6 +195,7 @@ __PACKAGE__->register_method ({
 
        my $storeid = extract_param($param, 'storage');
        my $digest = extract_param($param, 'digest');
+       my $delete = extract_param($param, 'delete');
 
         PVE::Storage::lock_storage_config(
         sub {
@@ -208,6 +209,20 @@ __PACKAGE__->register_method ({
            my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
            my $opts = $plugin->check_config($storeid, $param, 0, 1);
 
+           if ($delete) {
+               my $options = $plugin->private()->{options}->{$scfg->{type}};
+               foreach my $k (PVE::Tools::split_list($delete)) {
+                   my $d = $options->{$k} || die "no such option '$k'\n";
+                   die "unable to delete required option '$k'\n" if !$d->{optional};
+                   die "unable to delete fixed option '$k'\n" if $d->{fixed};
+                   die "cannot set and delete property '$k' at the same time!\n"
+                       if defined($opts->{$k});
+
+                   delete $scfg->{$k};
+               }
+           }
+
+
            foreach my $k (%$opts) {
                $scfg->{$k} = $opts->{$k};
            }