]> git.proxmox.com Git - pve-storage.git/commitdiff
implement zfsscan to list local zfs pools
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 26 Jan 2015 08:05:09 +0000 (09:05 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 26 Jan 2015 08:05:09 +0000 (09:05 +0100)
PVE/API2/Storage/Scan.pm
PVE/Storage.pm
pvesm

index d67df8c1d89edcb362c5895e31fd9d2fe9c70aeb..7686e05182f2c95d98723cbffbb114045cca3d8d 100644 (file)
@@ -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', 
index b491484977d485ad64da011796b03aea8ed977da..87117109b15e6a58d22c1d6754405defbd3b2648 100755 (executable)
@@ -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) = @_;
 
diff --git a/pvesm b/pvesm
index 76d345c2ac9455d5e8de3e788e52fe80ddf8dec9..79213e0ecde75417459d78df2c276d32f87592a5 100755 (executable)
--- a/pvesm
+++ b/pvesm
@@ -172,6 +172,14 @@ my $cmddef = {
                         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']],
 };