implement zfsscan to list local zfs pools
This commit is contained in:
@ -44,11 +44,43 @@ __PACKAGE__->register_method ({
|
||||
{ method => 'nfs' },
|
||||
{ method => 'glusterfs' },
|
||||
{ method => 'usb' },
|
||||
{ method => 'zfs' },
|
||||
];
|
||||
|
||||
return $res;
|
||||
}});
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'zfsscan',
|
||||
path => 'zfs',
|
||||
method => 'GET',
|
||||
description => "Scan zfs pool list on local node.",
|
||||
protected => 1,
|
||||
proxyto => "node",
|
||||
permissions => {
|
||||
check => ['perm', '/storage', ['Datastore.Allocate']],
|
||||
},
|
||||
parameters => {
|
||||
additionalProperties => 0,
|
||||
properties => {
|
||||
node => get_standard_option('pve-node'),
|
||||
},
|
||||
},
|
||||
returns => {
|
||||
type => 'array',
|
||||
items => {
|
||||
type => "object",
|
||||
properties => {
|
||||
pool => { type => 'string'},
|
||||
},
|
||||
},
|
||||
},
|
||||
code => sub {
|
||||
my ($param) = @_;
|
||||
|
||||
return PVE::Storage::scan_zfs();
|
||||
}});
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'nfsscan',
|
||||
path => 'nfs',
|
||||
|
||||
@ -911,6 +911,25 @@ sub scan_nfs {
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub scan_zfs {
|
||||
|
||||
my $cmd = ['zpool', 'list', '-H', '-o', 'name,size,free'];
|
||||
|
||||
my $res = [];
|
||||
run_command($cmd, outfunc => sub {
|
||||
my $line = shift;
|
||||
|
||||
if ($line =~m/^(\S+)\s+(\S+)\s+(\S+)$/) {
|
||||
my ($pool, $size_str, $free_str) = ($1, $2, $3);
|
||||
my $size = PVE::Storage::ZFSPoolPlugin::zfs_parse_size($size_str);
|
||||
my $free = PVE::Storage::ZFSPoolPlugin::zfs_parse_size($free_str);
|
||||
push @$res, { pool => $pool, size => $size, free => $free };
|
||||
}
|
||||
});
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub resolv_portal {
|
||||
my ($portal, $noerr) = @_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user