[pve-devel] [PATCH manager v3 10/20] ceph/destroypool: optionally remove storages

Thomas Lamprecht t.lamprecht at proxmox.com
Tue Sep 5 09:32:57 CEST 2017


On 08/31/2017 11:38 AM, Fabian Grünbichler wrote:
> only storages which have the 'pveceph' flag set are removed
> 
> Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
> changes since v2:
> - adapted for $get_storages changes
> - inlined $remove_storage
> 
> changes since v1:
> - die if any of the storages could not be removed
> - move storage retrieval into lower if (refactoring was dropped in v2)
> 
>   PVE/API2/Ceph.pm | 28 +++++++++++++++++++++++++++-
>   1 file changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
> index a8ea2b39..5620d6b3 100644
> --- a/PVE/API2/Ceph.pm
> +++ b/PVE/API2/Ceph.pm
> @@ -1820,7 +1820,13 @@ __PACKAGE__->register_method ({
>   		type => 'boolean',
>   		optional => 1,
>   		default => 0,
> -	    }
> +	    },
> +	    remove_storages => {
> +		description => "Remove all pveceph-managed storages configured for this pool",
> +		type => 'boolean',
> +		optional => 1,
> +		default => 0,
> +	    },
>   	},
>       },
>       returns => { type => 'null' },
> @@ -1829,7 +1835,13 @@ __PACKAGE__->register_method ({
>   
>   	PVE::CephTools::check_ceph_inited();
>   
> +	my $rpcenv = PVE::RPCEnvironment::get();
> +	my $user = $rpcenv->get_user();
> +	$rpcenv->check($user, '/storage', ['Datastore.Allocate'])
> +	    if $param->{remove_storages};
> +

possible nitpick: in the former patch in the create API call you use an
if block over this whole check, i.e. only declaring $rpcenv and $user
maybe use that here too? a) for consistency and b) the other one is easier
to read, IMO :)

>   	my $pool = $param->{name};
> +	my $storages = $get_storages->($pool);
>   
>   	# if not forced, destroy ceph pool only when no
>   	# vm disks are on it anymore
> @@ -1857,6 +1869,20 @@ __PACKAGE__->register_method ({
>   	    format => 'plain',
>           });
>   
> +	if ($param->{remove_storages}) {
> +	    my $err;
> +	    foreach my $storeid (keys %$storages) {
> +		next if !$storages->{$storeid}->{pveceph};
> +		eval { PVE::API2::Storage::Config->delete({storage => $storeid}) };
> +		if ($@) {
> +		    warn "failed to remove storage '$storeid': $@\n";
> +		    $err = 1;
> +		}
> +	    }
> +	    die "failed to remove (some) storages - check log and remove manually!\n"
> +		if $err;
> +	}
> +
>   	return undef;
>       }});
>   
> 






More information about the pve-devel mailing list