44 lines
1.4 KiB
Nix
44 lines
1.4 KiB
Nix
{ 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
|
|
)
|
|
);
|
|
}
|