[pve-devel] applied: [PATCH manager 4/6] api: use storage scan module from pve-storage

Thomas Lamprecht t.lamprecht at proxmox.com
Wed Dec 2 11:51:20 CET 2020


Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---

note: I had to do a fixup commit for the first hunk, forgot to add it to
staging area on commit -.- but the actual changes are those showed here.

 PVE/API2/Nodes.pm |   4 +-
 PVE/API2/Makefile |   1 -
 PVE/API2/Scan.pm  | 424 ----------------------------------------------
 debian/control    |   4 +-
 4 files changed, 4 insertions(+), 429 deletions(-)
 delete mode 100644 PVE/API2/Scan.pm

diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
index d84c3e73..8172231e 100644
--- a/PVE/API2/Nodes.pm
+++ b/PVE/API2/Nodes.pm
@@ -31,7 +31,7 @@ use PVE::API2::Subscription;
 use PVE::API2::Services;
 use PVE::API2::Network;
 use PVE::API2::Tasks;
-use PVE::API2::Scan;
+use PVE::API2::Storage::Scan;
 use PVE::API2::Storage::Status;
 use PVE::API2::Qemu;
 use PVE::API2::Qemu::CPU;
@@ -107,7 +107,7 @@ __PACKAGE__->register_method ({
 });
 
 __PACKAGE__->register_method ({
-    subclass => "PVE::API2::Scan",
+    subclass => "PVE::API2::Storage::Scan",
     path => 'scan',
 });
diff --git a/PVE/API2/Makefile b/PVE/API2/Makefile
index bc5ccc36..116922c6 100644
--- a/PVE/API2/Makefile
+++ b/PVE/API2/Makefile
@@ -22,7 +22,6 @@ PERLSOURCE = 			\
 	ACMEAccount.pm		\
 	ACMEPlugin.pm		\
 	NodeConfig.pm		\
-	Scan.pm			\
 	Hardware.pm		\
 	Services.pm
 
diff --git a/PVE/API2/Scan.pm b/PVE/API2/Scan.pm
deleted file mode 100644
index c096e8f6..00000000
--- a/PVE/API2/Scan.pm
+++ /dev/null
@@ -1,424 +0,0 @@
-package PVE::API2::Scan;
-
-use strict;
-use warnings;
-
-use PVE::SafeSyslog;
-use PVE::Storage;
-use PVE::Storage::LVMPlugin;
-use PVE::SysFSTools;
-use PVE::JSONSchema qw(get_standard_option);
-use PVE::RESTHandler;
-
-use base qw(PVE::RESTHandler);
-
-__PACKAGE__->register_method ({
-    name => 'index',
-    path => '',
-    method => 'GET',
-    description => "Index of available scan methods",
-    permissions => {
-	user => 'all',
-    },
-    parameters => {
-    	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => { method => { type => 'string'} },
-	},
-	links => [ { rel => 'child', href => "{method}" } ],
-    },
-    code => sub {
-	my ($param) = @_;
-
-	my $res = [
-	    { method => 'lvm' },
-	    { method => 'iscsi' },
-	    { method => 'nfs' },
-	    { method => 'glusterfs' },
-	    { method => 'usb' },
-	    { method => 'zfs' },
-	    { method => 'cifs' },
-	    ];
-
-	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 => {
-		    description => "ZFS pool name.",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	return PVE::Storage::scan_zfs();
-    }});
-
-__PACKAGE__->register_method ({
-    name => 'nfsscan',
-    path => 'nfs',
-    method => 'GET',
-    description => "Scan remote NFS server.",
-    protected => 1,
-    proxyto => "node",
-    permissions => {
-	check => ['perm', '/storage', ['Datastore.Allocate']],
-    },
-    parameters => {
-    	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	    server => {
-		description => "The server address (name or IP).",
-		type => 'string', format => 'pve-storage-server',
-	    },
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => {
-		path => {
-		    description => "The exported path.",
-		    type => 'string',
-		},
-		options => {
-		    description => "NFS export options.",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	my $server = $param->{server};
-	my $res = PVE::Storage::scan_nfs($server);
-
-	my $data = [];
-	foreach my $k (keys %$res) {
-	    push @$data, { path => $k, options => $res->{$k} };
-	}
-	return $data;
-    }});
-
-__PACKAGE__->register_method ({
-    name => 'cifsscan',
-    path => 'cifs',
-    method => 'GET',
-    description => "Scan remote CIFS server.",
-    protected => 1,
-    proxyto => "node",
-    permissions => {
-	check => ['perm', '/storage', ['Datastore.Allocate']],
-    },
-    parameters => {
-	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	    server => {
-		description => "The server address (name or IP).",
-		type => 'string', format => 'pve-storage-server',
-	    },
-	    username => {
-		description => "User name.",
-		type => 'string',
-		optional => 1,
-	    },
-	    password => {
-		description => "User password.",
-		type => 'string',
-		optional => 1,
-	    },
-	    domain => {
-		description => "SMB domain (Workgroup).",
-		type => 'string',
-		optional => 1,
-	    },
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => {
-		share => {
-		    description => "The cifs share name.",
-		    type => 'string',
-		},
-		description => {
-		    description => "Descriptive text from server.",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	my $server = $param->{server};
-
-	my $username = $param->{username};
-	my $password = $param->{password};
-	my $domain = $param->{domain};
-
-	my $res = PVE::Storage::scan_cifs($server, $username, $password, $domain);
-
-	my $data = [];
-	foreach my $k (keys %$res) {
-	    next if $k =~ m/NT_STATUS_/;
-	    push @$data, { share => $k, description => $res->{$k} };
-	}
-
-	return $data;
-    }});
-
-# Note: GlusterFS currently does not have an equivalent of showmount.
-# As workaround, we simply use nfs showmount.
-# see http://www.gluster.org/category/volumes/
-
-__PACKAGE__->register_method ({
-    name => 'glusterfsscan',
-    path => 'glusterfs',
-    method => 'GET',
-    description => "Scan remote GlusterFS server.",
-    protected => 1,
-    proxyto => "node",
-    permissions => {
-	check => ['perm', '/storage', ['Datastore.Allocate']],
-    },
-    parameters => {
-    	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	    server => {
-		description => "The server address (name or IP).",
-		type => 'string', format => 'pve-storage-server',
-	    },
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => {
-		volname => {
-		    description => "The volume name.",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	my $server = $param->{server};
-	my $res = PVE::Storage::scan_nfs($server);
-
-	my $data = [];
-	foreach my $path (keys %$res) {
-	    if ($path =~ m!^/([^\s/]+)$!) {
-		push @$data, { volname => $1 };
-	    }
-	}
-	return $data;
-    }});
-
-__PACKAGE__->register_method ({
-    name => 'iscsiscan',
-    path => 'iscsi',
-    method => 'GET',
-    description => "Scan remote iSCSI server.",
-    protected => 1,
-    proxyto => "node",
-    permissions => {
-	check => ['perm', '/storage', ['Datastore.Allocate']],
-    },
-    parameters => {
-    	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	    portal => {
-		description => "The iSCSI portal (IP or DNS name with optional port).",
-		type => 'string', format => 'pve-storage-portal-dns',
-	    },
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => {
-		target => {
-		    description => "The iSCSI target name.",
-		    type => 'string',
-		},
-		portal => {
-		    description => "The iSCSI portal name.",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	my $res = PVE::Storage::scan_iscsi($param->{portal});
-
-	my $data = [];
-	foreach my $k (keys %$res) {
-	    push @$data, { target => $k, portal => join(',', @{$res->{$k}}) };
-	}
-
-	return $data;
-    }});
-
-__PACKAGE__->register_method ({
-    name => 'lvmscan',
-    path => 'lvm',
-    method => 'GET',
-    description => "List local LVM volume groups.",
-    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 => {
-		vg => {
-		    description => "The LVM logical volume group name.",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	my $res = PVE::Storage::LVMPlugin::lvm_vgs();
-	return PVE::RESTHandler::hash_to_array($res, 'vg');
-    }});
-
-__PACKAGE__->register_method ({
-    name => 'lvmthinscan',
-    path => 'lvmthin',
-    method => 'GET',
-    description => "List local LVM Thin Pools.",
-    protected => 1,
-    proxyto => "node",
-    permissions => {
-	check => ['perm', '/storage', ['Datastore.Allocate']],
-    },
-    parameters => {
-	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	    vg => {
-		type => 'string',
-		pattern => '[a-zA-Z0-9\.\+\_][a-zA-Z0-9\.\+\_\-]+', # see lvm(8) manpage
-		maxLength => 100,
-	    },
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => {
-		lv => {
-		    description => "The LVM Thin Pool name (LVM logical volume).",
-		    type => 'string',
-		},
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	return PVE::Storage::LvmThinPlugin::list_thinpools($param->{vg});
-    }});
-
-__PACKAGE__->register_method ({
-    name => 'usbscan',
-    path => 'usb',
-    method => 'GET',
-    description => "List local USB devices.",
-    protected => 1,
-    proxyto => "node",
-    permissions => {
-	check => ['perm', '/', ['Sys.Modify']],
-    },
-    parameters => {
-    	additionalProperties => 0,
-	properties => {
-	    node => get_standard_option('pve-node'),
-	},
-    },
-    returns => {
-	type => 'array',
-	items => {
-	    type => "object",
-	    properties => {
-		busnum => { type => 'integer'},
-		devnum => { type => 'integer'},
-		port => { type => 'integer'},
-		usbpath => { type => 'string', optional => 1},
-		level => { type => 'integer'},
-		class => { type => 'integer'},
-		vendid => { type => 'string'},
-		prodid => { type => 'string'},
-		speed => { type => 'string'},
-
-		product => { type => 'string', optional => 1 },
-		serial => { type => 'string', optional => 1 },
-		manufacturer => { type => 'string', optional => 1 },
-	    },
-	},
-    },
-    code => sub {
-	my ($param) = @_;
-
-	return PVE::SysFSTools::scan_usb();
-    }});
-
-1;
diff --git a/debian/control b/debian/control
index cb4977f4..629dfb34 100644
--- a/debian/control
+++ b/debian/control
@@ -13,7 +13,7 @@ Build-Depends: debhelper (>= 11~),
                libpve-common-perl,
                libpve-guest-common-perl (>= 3.0-8~),
                libpve-http-server-perl (>= 2.0-12),
-               libpve-storage-perl (>= 6.1-7),
+               libpve-storage-perl (>= 6.3-2),
                libtemplate-perl,
                libtest-mockmodule-perl,
                lintian,
@@ -52,7 +52,7 @@ Depends: apt-transport-https | apt (>= 1.5~),
          libpve-common-perl (>= 6.2-2),
          libpve-guest-common-perl (>= 3.1-3~),
          libpve-http-server-perl (>= 3.0-4),
-         libpve-storage-perl (>= 6.2-11),
+         libpve-storage-perl (>= 6.3-2),
          librados2-perl,
          libtemplate-perl,
          libterm-readline-gnu-perl,
-- 
2.20.1






More information about the pve-devel mailing list