move container generation to its own file
Signed-off-by: ahuston-0 <aliceghuston@gmail.com>
This commit is contained in:
43
lib/container-utils.nix
Normal file
43
lib/container-utils.nix
Normal file
@ -0,0 +1,43 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
# Given a attrset of images and a function which generates an image spec,
|
||||
# generates a set of containers (although this could in theory be used for
|
||||
# other things... I'd like to see people try)
|
||||
#
|
||||
# container set must be in the below format
|
||||
# { container-name = {image = "image-uri"; scale = n;}; }
|
||||
# where image-uri gets passed in to the container-spec function as a custom
|
||||
# parameter, and scale is an integer that generates the containers
|
||||
#
|
||||
# container-spec must be a function which accepts two parameter (the
|
||||
# container name and image name) and ideally returns an oci-compliant
|
||||
# container.
|
||||
#
|
||||
# args:
|
||||
# containers: an AttrSet which specifies the imageUri and scale of each
|
||||
# container
|
||||
# container-spec: a function which produces an oci-compliant container spec
|
||||
#
|
||||
# type:
|
||||
# AttrSet -> (String -> AttrSet -> AttrSet) -> AttrSet
|
||||
createTemplatedContainers =
|
||||
containers: container-spec:
|
||||
builtins.listToAttrs (
|
||||
lib.flatten (
|
||||
lib.mapAttrsToList (
|
||||
name: value:
|
||||
(map (
|
||||
num:
|
||||
let
|
||||
container-name = "${name}-${toString num}";
|
||||
in
|
||||
{
|
||||
name = container-name;
|
||||
value = container-spec container-name value.image;
|
||||
}
|
||||
) (lib.lists.range 1 value.scale))
|
||||
) containers
|
||||
)
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user