generalized from the start to support extension to bridges or other entities as well.
this gets us incremental support for the CLI, e.g.: --targetstorage foo:bar --targetstorage bar:baz --targetstorage foo creates a mapping of foo=>bar bar=>baz with a default of foo Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com> --- src/PVE/JSONSchema.pm | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm index fa405ac..2073348 100644 --- a/src/PVE/JSONSchema.pm +++ b/src/PVE/JSONSchema.pm @@ -210,6 +210,66 @@ sub pve_verify_node_name { return $node; } +sub parse_idmap { + my ($idmap, $idformat) = @_; + + return undef if !$idmap; + + my $map = {}; + + foreach my $entry (PVE::Tools::split_list($idmap)) { + if ($entry eq '1') { + $map->{identity} = 1; + } elsif ($entry =~ m/^([^:]+):([^:]+)$/) { + my ($source, $target) = ($1, $2); + eval { + PVE::JSONSchema::check_format($idformat, $source, ''); + PVE::JSONSchema::check_format($idformat, $target, ''); + }; + die "entry '$entry' contains invalid ID - $@\n" + if $@; + + die "duplicate mapping for source '$source'\n" + if $map->{entries}->{$source}; + + $map->{entries}->{$source} = $target; + } else { + eval { + PVE::JSONSchema::check_format($idformat, $entry); + }; + + die "entry '$entry' contains invalid ID - $@\n" + if $@; + + die "default target ID can only be provided once\n" + if $map->{default}; + + $map->{default} = $entry; + } + } + + die "identity mapping cannot be combined with other mappings\n" + if $map->{identity} && ($map->{default} || $map->{entries}); + + return $map; +} + +register_format('storagepair', \&verify_storagepair); +sub verify_storagepair { + my ($storagepair, $noerr) = @_; + + # note: this only checks a single list entry + # when using a storagepair-list map, you need to pass the full + # parameter to parse_idmap + eval { parse_idmap($storagepair, 'pve-storage-id') }; + if ($@) { + return undef if $noerr; + die "$@\n"; + } + + return $storagepair; +} + register_format('mac-addr', \&pve_verify_mac_addr); sub pve_verify_mac_addr { my ($mac_addr, $noerr) = @_; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel