{ 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',
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) = @_;
printf "$rec->{vg}\n";
}
}],
+ zfsscan => [ "PVE::API2::Storage::Scan", 'zfsscan', [],
+ { node => $nodename }, sub {
+ my $res = shift;
+
+ foreach my $rec (@$res) {
+ printf "$rec->{pool}\n";
+ }
+ }],
path => [ __PACKAGE__, 'path', ['volume']],
};