Skip to content

Commit

Permalink
Merge pull request #26 from hadfl/ds
Browse files Browse the repository at this point in the history
add transformer for datasets
  • Loading branch information
citrus-it authored Dec 3, 2020
2 parents f9a2283 + 16dd814 commit 315e87d
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
4 changes: 2 additions & 2 deletions lib/Zadm/Schema/KVM.pm
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ $SCHEMA = sub {
'x-dskattr' => 0,
},
},
transformer => $self->sv->toDiskStruct,
transformer => $self->sv->toHash('path'),
'x-attr' => 1,
},
bootorder => {
Expand Down Expand Up @@ -126,7 +126,7 @@ $SCHEMA = sub {
'x-dskattr' => 0,
},
},
transformer => $self->sv->toDiskStruct(1),
transformer => $self->sv->toHash('path', 1),
'x-attr' => 1,
},
diskif => {
Expand Down
1 change: 1 addition & 0 deletions lib/Zadm/Schema/base.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
20 changes: 11 additions & 9 deletions lib/Zadm/Validator.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
}
}

Expand Down

0 comments on commit 315e87d

Please sign in to comment.