feat: noop partitions

Some deployments just need a raw block device because the app works better when handling those.

Examples: Ceph, Longhorn, OpenEBS.

The new `noop` type supports that. It just does nothing with the partitions created, whenever applied.

@moduon MT-904
This commit is contained in:
Jairo Llopis 2022-07-08 12:49:58 +01:00
parent 1af856886e
commit 9b53ee7b11
No known key found for this signature in database
GPG key ID: E47E3BE44B940490
2 changed files with 15 additions and 1 deletions

View file

@ -31,6 +31,8 @@ let {
config.lvm = q: x:
foldl' recursiveUpdate {} (mapAttrsToList (name: config-f { inherit name; vgname = x.name; }) x.lvs);
config.noop = q: x: {};
config.partition = q: x:
config-f { device = q.device + toString q.index; } x.content;
@ -65,6 +67,8 @@ let {
${concatStrings (mapAttrsToList (name: create-f { inherit name; vgname = x.name; }) x.lvs)}
'';
create.noop = q: x: "";
create.partition = q: x: ''
parted -s ${q.device} mkpart ${x.part-type} ${x.fs-type or ""} ${x.start} ${x.end}
${optionalString (x.bootable or false) ''
@ -119,6 +123,8 @@ let {
'';}
);
mount.noop = q: x: {};
mount.partition = q: x:
mount-f { device = q.device + toString q.index; } x.content;

View file

@ -56,13 +56,20 @@ import <nixpkgs/nixos/tests/make-test.nix> ({ pkgs, ... }: let
};
home = {
type = "lv";
size = "100M";
size = "10M";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/home";
};
};
raw = {
type = "lv";
size = "10M";
content = {
type = "noop";
};
};
};
};
};
@ -92,6 +99,7 @@ in {
$machine->succeed("echo 'secret' > /tmp/secret.key");
$machine->succeed("${pkgs.writeScript "create" ((import ../lib).create disko-config)}");
$machine->succeed("${pkgs.writeScript "mount" ((import ../lib).mount disko-config)}");
$machine->succeed("test -b /dev/mapper/pool-raw");
'';
})