[pve-devel] r6361 - in pve-storage/pve2: . PVE PVE/API2/Storage
svn-commits at proxmox.com
svn-commits at proxmox.com
Tue Jul 26 08:49:36 CEST 2011
Author: dietmar
Date: 2011-07-26 08:49:36 +0200 (Tue, 26 Jul 2011)
New Revision: 6361
Modified:
pve-storage/pve2/ChangeLog
pve-storage/pve2/PVE/API2/Storage/Config.pm
pve-storage/pve2/PVE/API2/Storage/Scan.pm
pve-storage/pve2/PVE/Storage.pm
Log:
* PVE/Storage.pm (verify_portal_dns): new type
'pve-storage-portal-dns', which allows to use a DNS name.
(resolv_portal_dns): helper to convert portal with DNS name to IP address.
* PVE/API2/Storage/Config.pm: 'target' can be arbitrary string (we
do not check format for now)
Modified: pve-storage/pve2/ChangeLog
===================================================================
--- pve-storage/pve2/ChangeLog 2011-07-26 05:09:16 UTC (rev 6360)
+++ pve-storage/pve2/ChangeLog 2011-07-26 06:49:36 UTC (rev 6361)
@@ -1,5 +1,12 @@
2011-07-26 Proxmox Support Team <support at proxmox.com>
+ * PVE/Storage.pm (verify_portal_dns): new type
+ 'pve-storage-portal-dns', which allows to use a DNS name.
+ (resolv_portal_dns): helper to convert portal with DNS name to IP address.
+
+ * PVE/API2/Storage/Config.pm: 'target' can be arbitrary string (we
+ do not check format for now)
+
* PVE/API2/Storage/Scan.pm (iscsiscan): rename 'server' to 'portal'
2010-11-08 Proxmox Support Team <support at proxmox.com>
Modified: pve-storage/pve2/PVE/API2/Storage/Config.pm
===================================================================
--- pve-storage/pve2/PVE/API2/Storage/Config.pm 2011-07-26 05:09:16 UTC (rev 6360)
+++ pve-storage/pve2/PVE/API2/Storage/Config.pm 2011-07-26 06:49:36 UTC (rev 6361)
@@ -125,7 +125,7 @@
optional => 1,
},
target => {
- type => 'string', format => 'pve-storage-server',
+ type => 'string',
optional => 1,
},
vgname => {
@@ -133,7 +133,7 @@
optional => 1,
},
portal => {
- type => 'string', format => 'pve-storage-portal',
+ type => 'string', format => 'pve-storage-portal-dns',
optional => 1,
},
content => {
@@ -164,8 +164,13 @@
my $storeid = $param->{storage};
delete $param->{storage};
+ if ($param->{portal}) {
+ $param->{portal} = PVE::Storage::resolv_portal_dns($param->{portal});
+ }
+
my $opts = PVE::Storage::parse_options($storeid, $type, $param, 1);
+
PVE::Storage::lock_storage_config(
sub {
Modified: pve-storage/pve2/PVE/API2/Storage/Scan.pm
===================================================================
--- pve-storage/pve2/PVE/API2/Storage/Scan.pm 2011-07-26 05:09:16 UTC (rev 6360)
+++ pve-storage/pve2/PVE/API2/Storage/Scan.pm 2011-07-26 06:49:36 UTC (rev 6361)
@@ -91,7 +91,7 @@
additionalProperties => 0,
properties => {
node => get_standard_option('pve-node'),
- portal => { type => 'string', format => 'pve-storage-server' },
+ portal => { type => 'string', format => 'pve-storage-portal-dns' },
},
},
returns => {
@@ -107,7 +107,7 @@
code => sub {
my ($param) = @_;
- my $portal = $param->{portal};
+ my $portal = PVE::Storage::resolv_portal_dns($param->{portal});
my $res = PVE::Storage::scan_iscsi($portal);
my $data = [];
Modified: pve-storage/pve2/PVE/Storage.pm
===================================================================
--- pve-storage/pve2/PVE/Storage.pm 2011-07-26 05:09:16 UTC (rev 6360)
+++ pve-storage/pve2/PVE/Storage.pm 2011-07-26 06:49:36 UTC (rev 6361)
@@ -257,6 +257,35 @@
return $portal;
}
+PVE::JSONSchema::register_format('pve-storage-portal-dns', \&verify_portal_dns);
+sub verify_portal_dns {
+ my ($portal, $noerr) = @_;
+
+ # IP or DNS name with optional port
+ if ($portal !~ m/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|[[:alnum:]\-\.]+)(:\d+)?$/) {
+ return undef if $noerr;
+ die "value does not look like a valid portal address\n";
+ }
+ return $portal;
+}
+
+sub resolv_portal_dns {
+ my ($portal_dns) = @_;
+
+ if ($portal_dns =~ m/^([^:]+)(:(\d+))?$/) {
+ my $server = $1;
+ my $port = $3;
+
+ my $packed_ip = gethostbyname($server);
+ if (defined $packed_ip) {
+ $server = inet_ntoa($packed_ip);
+ return $port ? "$server:$port" : $server;
+ }
+
+ raise_param_exc({ portal => "unable to resolve portal address" });
+ }
+}
+
PVE::JSONSchema::register_format('pve-storage-content', \&verify_content);
sub verify_content {
my ($ct, $noerr) = @_;
@@ -336,8 +365,8 @@
return parse_lvm_name ($value, $noerr);
} elsif ($ct eq 'portal') {
return verify_portal($value, $noerr);
- } elsif ($ct eq 'target') {
- return verify_server($value, $noerr);
+ } elsif ($ct eq 'target') {
+ return $value;
} elsif ($ct eq 'string') {
return $value;
} elsif ($ct eq 'format') {
More information about the pve-devel
mailing list