[pve-devel] r6375 - in pve-storage/pve2: . PVE PVE/API2/Storage

svn-commits at proxmox.com svn-commits at proxmox.com
Thu Jul 28 11:05:26 CEST 2011


Author: dietmar
Date: 2011-07-28 11:05:25 +0200 (Thu, 28 Jul 2011)
New Revision: 6375

Modified:
   pve-storage/pve2/ChangeLog
   pve-storage/pve2/PVE/API2/Storage/Config.pm
   pve-storage/pve2/PVE/Storage.pm
Log:
	* PVE/API2/Storage/Config.pm (create): add 'nodes' options, do not
	activate storage automatically.
	
	* PVE/API2/Storage/Config.pm (update): add 'nodes' options, do not
	activate storage automatically.



Modified: pve-storage/pve2/ChangeLog
===================================================================
--- pve-storage/pve2/ChangeLog	2011-07-28 05:51:35 UTC (rev 6374)
+++ pve-storage/pve2/ChangeLog	2011-07-28 09:05:25 UTC (rev 6375)
@@ -1,5 +1,11 @@
 2011-07-28  Proxmox Support Team  <support at proxmox.com>
 
+	* PVE/API2/Storage/Config.pm (create): add 'nodes' options, do not
+	activate storage automatically.
+	
+	* PVE/API2/Storage/Config.pm (update): add 'nodes' options, do not
+	activate storage automatically.
+
 	* pvesm (lock): removed - we do not use the central lock manager
 	anymore.
 

Modified: pve-storage/pve2/PVE/API2/Storage/Config.pm
===================================================================
--- pve-storage/pve2/PVE/API2/Storage/Config.pm	2011-07-28 05:51:35 UTC (rev 6374)
+++ pve-storage/pve2/PVE/API2/Storage/Config.pm	2011-07-28 09:05:25 UTC (rev 6375)
@@ -29,6 +29,10 @@
     $scfg->{digest} = $cfg->{digest};
     $scfg->{content} = PVE::Storage::content_hash_to_string($scfg->{content});
 
+    if ($scfg->{nodes}) {
+	$scfg->{nodes} = join(',', keys(%{$scfg->{nodes}}));
+    }
+
     return $scfg;
 };
 
@@ -104,6 +108,7 @@
     	additionalProperties => 0,
 	properties => { 
 	    storage => get_standard_option('pve-storage-id'),
+	    nodes => get_standard_option('pve-node-list'),
 	    type => { 
 		type => 'string', 
 		enum => $storage_type_enum,
@@ -174,7 +179,6 @@
 
 	my $opts = PVE::Storage::parse_options($storeid, $type, $param, 1);
 
-
         PVE::Storage::lock_storage_config(
 	    sub {
 
@@ -203,8 +207,6 @@
 		    PVE::Storage::lvm_create_volume_group ($path, $opts->{vgname}, $opts->{shared});
 		}
 	
-		PVE::Storage::activate_storage ($cfg, $storeid) if !$opts->{disable};
-
 		cfs_write_file('storage.cfg', $cfg);
 	    
 	    }, "create storage failed");
@@ -221,6 +223,7 @@
     	additionalProperties => 0,
 	properties => { 
 	    storage => get_standard_option('pve-storage-id'),
+	    nodes => get_standard_option('pve-node-list'),
 	    content => {
 		type => 'string', format => 'pve-storage-content-list',
 		optional => 1,
@@ -272,15 +275,6 @@
 		$scfg->{$k} = $opts->{$k};
 	    }
 
-	    if (defined($opts->{disable})) {
-		if ($opts->{disable}) {
-		    PVE::Storage::deactivate_storage ($cfg, $storeid);
-		} else {
-		    delete $scfg->{disable};
-		    PVE::Storage::activate_storage ($cfg, $storeid);	
-		}
-	    }
-
 	    cfs_write_file('storage.cfg', $cfg);
 
 	    }, "update storage failed");

Modified: pve-storage/pve2/PVE/Storage.pm
===================================================================
--- pve-storage/pve2/PVE/Storage.pm	2011-07-28 05:51:35 UTC (rev 6374)
+++ pve-storage/pve2/PVE/Storage.pm	2011-07-28 09:05:25 UTC (rev 6375)
@@ -144,6 +144,7 @@
     base   => 'volume',
     portal => 'portal',
     target => 'target',
+    nodes => 'nodes',
     options => 'options',
 };
 
@@ -164,6 +165,7 @@
 my $default_config = {
     dir => {
 	path => 1,
+        nodes => 0,
 	shared => 0,
 	disable => 0,
 	content => [ { images => 1, rootdir => 1, vztmpl => 1, iso => 1, backup => 1, none => 1 },
@@ -173,6 +175,7 @@
 
     nfs => {
 	path => 1,
+        nodes => 0,
 	disable => 0,
         server => 1,
         export => 1,
@@ -184,6 +187,7 @@
 
     lvm => {
 	vgname => 1,
+        nodes => 0,
 	shared => 0,
 	disable => 0,
 	content => [ {images => 1}, { images => 1 }],
@@ -193,6 +197,7 @@
     iscsi => {
         portal => 1,
         target => 1,
+        nodes => 0,
 	disable => 0,
 	content => [ {images => 1, none => 1}, { images => 1 }],
     },
@@ -365,6 +370,22 @@
 	return parse_lvm_name ($value, $noerr);
     } elsif ($ct eq 'portal') {
 	return verify_portal($value, $noerr);
+    } elsif ($ct eq 'nodes') {
+	my $res = {};
+
+	foreach my $node (PVE::Tools::split_list($value)) {
+	    if (PVE::JSONSchema::pve_verify_node_name($node, $noerr)) {
+		$res->{$node} = 1;
+	    }
+	}
+
+	# no node restrictions for local storage
+	if ($storeid && $storeid eq 'local' && scalar(keys(%$res))) {
+	    return undef if $noerr;
+	    die "storage '$storeid' does not allow node restrictions\n";
+	}
+
+	return $res;
     } elsif ($ct eq 'target') {
 	return $value;
     } elsif ($ct eq 'string') {
@@ -495,6 +516,9 @@
     $ids->{local}->{content}->{vztmpl} = 1;
     delete ($ids->{local}->{disable});
 
+    # remove node restrictions for local storage
+    delete($ids->{local}->{nodes});
+
     foreach my $storeid (keys %$ids) {
 	my $d = $ids->{$storeid};
 
@@ -641,6 +665,9 @@
 
     if ($ct eq 'bool') {
 	return $v ? "\t$k\n" : '';
+    } elsif ($ct eq 'nodes') {
+	my $nlist = join(',', keys(%$v));
+	return $nlist ? "\tnodes $nlist\n" : ''; 
     } elsif ($ct eq 'content') {
 	my $clist = content_hash_to_string($v);
 	if ($clist) {



More information about the pve-devel mailing list