diff --git a/lib/Zadm/Schema/KVM.pm b/lib/Zadm/Schema/KVM.pm index bef6e37..c523841 100644 --- a/lib/Zadm/Schema/KVM.pm +++ b/lib/Zadm/Schema/KVM.pm @@ -58,7 +58,7 @@ $SCHEMA = sub { 'x-dskattr' => 0, }, }, - transformer => $self->sv->toDiskStruct, + transformer => $self->sv->toHash('path'), 'x-attr' => 1, }, bootorder => { @@ -126,7 +126,7 @@ $SCHEMA = sub { 'x-dskattr' => 0, }, }, - transformer => $self->sv->toDiskStruct(1), + transformer => $self->sv->toHash('path', 1), 'x-attr' => 1, }, diskif => { diff --git a/lib/Zadm/Schema/base.pm b/lib/Zadm/Schema/base.pm index a3002d6..6fe7a7a 100644 --- a/lib/Zadm/Schema/base.pm +++ b/lib/Zadm/Schema/base.pm @@ -171,6 +171,7 @@ has schema => sub { validator => $self->sv->regexp(qr/^\w[-\w\/]+$/, 'dataset name not valid. check man zfs'), }, }, + transformer => $self->sv->toHash('name', 1), }, 'dedicated-cpu' => { optional => 1, diff --git a/lib/Zadm/Validator.pm b/lib/Zadm/Validator.pm index 7583262..a29763b 100644 --- a/lib/Zadm/Validator.pm +++ b/lib/Zadm/Validator.pm @@ -47,11 +47,12 @@ my $toBytes = sub { return int ($val * $unitFactors{lc ($suf || 'b')}); }; -my $toDiskStruct = sub { - my $disk = shift; +my $toHash = sub { + my $key = shift; + my $val = shift; - # transform plain disk paths into disk structures - return $disk && !ref $disk ? { path => $disk } : $disk; + # transform scalars into hashes + return $key && $val && !ref $val ? { $key => $val } : $val; }; my $checkBlockSize = sub { @@ -409,16 +410,17 @@ sub toBytes { } } -sub toDiskStruct { +sub toHash { my $self = shift; + my $attr = shift; my $isarray = shift; return sub { - my $disk = $isarray ? $self->toArray->(shift) : shift; + my $elems = $isarray ? $self->toArray->(shift) : shift; - return ref $disk eq ref [] - ? [ map { $toDiskStruct->($_) } @$disk ] - : $toDiskStruct->($disk); + return ref $elems eq ref [] + ? [ map { $toHash->($attr, $_) } @$elems ] + : $toHash->($attr, $elems); } }