[pve-devel] r6377 - in pve-storage/pve2: . PVE
svn-commits at proxmox.com
svn-commits at proxmox.com
Thu Jul 28 12:21:04 CEST 2011
Author: dietmar
Date: 2011-07-28 12:21:04 +0200 (Thu, 28 Jul 2011)
New Revision: 6377
Modified:
pve-storage/pve2/ChangeLog
pve-storage/pve2/PVE/Storage.pm
Log:
impl. node restrictions
Modified: pve-storage/pve2/ChangeLog
===================================================================
--- pve-storage/pve2/ChangeLog 2011-07-28 09:24:52 UTC (rev 6376)
+++ pve-storage/pve2/ChangeLog 2011-07-28 10:21:04 UTC (rev 6377)
@@ -1,5 +1,10 @@
2011-07-28 Proxmox Support Team <support at proxmox.com>
+ * PVE/Storage.pm (storage_check_node): check if storage is
+ available on a specific node.
+ (storage_check_enabled): check if storage is
+ available on the local node.
+
* PVE/API2/Storage/Config.pm (create): add 'nodes' options, do not
activate storage automatically.
Modified: pve-storage/pve2/PVE/Storage.pm
===================================================================
--- pve-storage/pve2/PVE/Storage.pm 2011-07-28 09:24:52 UTC (rev 6376)
+++ pve-storage/pve2/PVE/Storage.pm 2011-07-28 10:21:04 UTC (rev 6377)
@@ -18,6 +18,7 @@
use PVE::Cluster qw(cfs_register_file cfs_read_file cfs_write_file cfs_lock_file);
use PVE::Exception qw(raise_param_exc);
use PVE::JSONSchema;
+use PVE::INotify;
my $ISCSIADM = '/usr/bin/iscsiadm';
my $UDEVADM = '/sbin/udevadm';
@@ -630,16 +631,35 @@
return $scfg;
}
-sub storage_check_enabled {
- my ($cfg, $storeid) = @_;
+sub storage_check_node {
+ my ($cfg, $storeid, $node, $noerr) = @_;
my $scfg = storage_config ($cfg, $storeid);
- die "storage '$storeid' is disabled\n" if $scfg->{disable};
+ if ($scfg->{nodes}) {
+ $node = PVE::INotify::nodename() if !$node || ($node eq 'localhost');
+ if (!$scfg->{nodes}->{$node}) {
+ die "storage '$storeid' is not available on node '$node'" if !$noerr;
+ return undef;
+ }
+ }
return $scfg;
}
+sub storage_check_enabled {
+ my ($cfg, $storeid, $node, $noerr) = @_;
+
+ my $scfg = storage_config ($cfg, $storeid);
+
+ if ($scfg->{disable}) {
+ die "storage '$storeid' is disabled\n" if !$noerr;
+ return undef;
+ }
+
+ return storage_check_node($cfg, $storeid, $node, $noerr);
+}
+
sub storage_ids {
my ($cfg) = @_;
@@ -1522,7 +1542,7 @@
my $ids = $cfg->{ids};
- storage_check_enabled ($cfg, $storeid) if ($storeid);
+ storage_check_enabled($cfg, $storeid) if ($storeid);
my $res = {};
@@ -1534,7 +1554,7 @@
my $scfg = $ids->{$sid};
my $type = $scfg->{type};
- next if $scfg->{disable};
+ next if !storage_check_enabled($cfg, $sid, undef, 1);
next if $tt eq 'iso' && !$scfg->{content}->{iso};
next if $tt eq 'vztmpl' && !$scfg->{content}->{vztmpl};
@@ -1627,7 +1647,7 @@
my $ids = $cfg->{ids};
- storage_check_enabled ($cfg, $storeid) if ($storeid);
+ storage_check_enabled($cfg, $storeid) if ($storeid);
my $res = {};
@@ -1640,15 +1660,14 @@
foreach my $volid (@$vollist) {
my ($sid, undef) = parse_volume_id ($volid);
next if !defined ($ids->{$sid});
- next if $ids->{$sid}->{disable};
+ next if !storage_check_enabled($cfg, $sid, undef, 1);
push @$storage_list, $sid;
$stypes->{$ids->{$sid}->{type}} = 1;
}
} else {
foreach my $sid (keys %$ids) {
next if $storeid && $storeid ne $sid;
- next if $ids->{$sid}->{disable};
-
+ next if !storage_check_enabled($cfg, $sid, undef, 1);
push @$storage_list, $sid;
$stypes->{$ids->{$sid}->{type}} = 1;
}
@@ -1665,7 +1684,7 @@
foreach my $sid (keys %$ids) {
if ($storeid) {
next if $storeid ne $sid;
- next if $ids->{$storeid}->{disable};
+ next if !storage_check_enabled($cfg, $sid, undef, 1);
}
my $scfg = $ids->{$sid};
my $type = $scfg->{type};
@@ -1809,7 +1828,7 @@
sub __activate_storage_full {
my ($cfg, $storeid, $session) = @_;
- my $scfg = storage_check_enabled ($cfg, $storeid);
+ my $scfg = storage_check_enabled($cfg, $storeid);
return if $session->{activated}->{$storeid};
@@ -2046,7 +2065,7 @@
next if $content && !$ids->{$storeid}->{content}->{$content};
- next if $ids->{$storeid}->{disable};
+ next if !storage_check_enabled($cfg, $storeid, undef, 1);
my $type = $ids->{$storeid}->{type};
More information about the pve-devel
mailing list