feat: interface and lib refactoring

This commit is contained in:
Jaka Hudoklin 2019-03-07 18:02:26 +01:00
parent e260ad9bb4
commit 5d8b66f8a0
No known key found for this signature in database
GPG key ID: 6A08896BFD32BD95
10 changed files with 111 additions and 88 deletions

View file

@ -1,4 +1,4 @@
{ config, lib, pkgs, ... }:
{ config, lib, pkgs, k8s, ... }:
with lib;
@ -32,12 +32,6 @@ let
) resources
);
toKubernetesList = resources: {
kind = "List";
apiVersion = "v1";
items = resources;
};
apiOptions = { config, ... }: {
options = {
definitions = mkOption {
@ -114,7 +108,8 @@ let
indexOf = lst: value:
head (filter (v: v != -1) (imap0 (i: v: if v == value then i else -1) lst));
in {
imports = [./lib.nix];
# expose k8s helper methods through arg in modules
config._module.args.k8s = import ../../lib/k8s.nix { inherit lib; };
options.kubernetes.version = mkOption {
description = "Kubernetes version to use";
@ -222,7 +217,7 @@ in {
}) cfg.customResources;
options.kubernetes.objects = mkOption {
description = "Attribute set of kubernetes objects";
description = "List of generated kubernetes objects";
type = types.listOf types.attrs;
apply = items: sort (r1: r2:
if elem r1.kind cfg.resourceOrder && elem r2.kind cfg.resourceOrder
@ -239,25 +234,11 @@ in {
) cfg.api.resources);
options.kubernetes.generated = mkOption {
description = "Generated kubernetes list object";
type = types.attrs;
description = "Generated json file";
};
config.kubernetes.generated = let
kubernetesList = toKubernetesList cfg.objects;
hashedList = kubernetesList // {
labels."kubenix/build" = cfg.hash;
items = map (resource: recursiveUpdate resource {
metadata.labels."kubenix/build" = cfg.hash;
}) kubernetesList.items;
};
in hashedList;
options.kubernetes.hash = mkOption {
type = types.str;
description = "Output hash";
config.kubernetes.generated = k8s.mkHashedList {
items = config.kubernetes.objects;
};
config.kubernetes.hash = builtins.hashString "sha1" (builtins.toJSON cfg.objects);
}

View file

@ -1,35 +0,0 @@
{ lib, ... }:
with lib;
let
k8s = {
mkSecretOption = {description ? "", default ? null}: mkOption {
inherit description;
type = types.nullOr (types.submodule {
options = {
name = mkOption {
description = "Name of the secret where secret is stored";
type = types.str;
};
key = mkOption {
description = "Name of the key where secret is stored";
type = types.str;
};
};
config = mkDefault (if default == null then {} else default);
});
default = {};
};
secretToEnv = value: {
valueFrom.secretKeyRef = {
inherit (value) name key;
};
};
};
in {
_module.args.k8s = k8s;
}

View file

@ -71,7 +71,7 @@ let
nixosTesting.makeTest {
inherit name;
nodes.kube = { config, pkgs, lib, nodes, ... }: {
nodes.kube = { config, pkgs, nodes, ... }: {
imports = [ kubernetesBaseConfig ];
services.kubernetes = {
roles = ["master" "node"];
@ -113,14 +113,14 @@ let
config._module.args.test = config;
}] ++ cfg.defaults;
test = (kubenix.evalKubernetesModules {
test = (kubenix.evalModules {
check = false;
inherit modules;
}).config.test;
evaled =
if test.enable
then builtins.trace "testing ${test.name}" (kubenix.evalKubernetesModules {
then builtins.trace "testing ${test.name}" (kubenix.evalModules {
inherit modules;
})
else {success = false;};