mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 08:00:06 +01:00
108 lines
3 KiB
Nix
108 lines
3 KiB
Nix
{ options, config, lib, kubenix, pkgs, ... }:
|
|
|
|
with lib;
|
|
let
|
|
findObject = { kind, name }: filter
|
|
(object:
|
|
object.kind == kind && object.metadata.name == name
|
|
)
|
|
config.kubernetes.objects;
|
|
|
|
getObject = filter: head (findObject filter);
|
|
|
|
hasObject = { kind, name }: length (findObject { inherit kind name; }) == 1;
|
|
in
|
|
{
|
|
imports = with kubenix.modules; [ test k8s legacy ];
|
|
|
|
test = {
|
|
name = "legacy-modules";
|
|
description = "Simple test tesing kubenix legacy modules";
|
|
assertions = [{
|
|
message = "should have all objects";
|
|
assertion =
|
|
hasObject { kind = "Deployment"; name = "myapp"; } &&
|
|
hasObject { kind = "Deployment"; name = "myapp2"; } &&
|
|
hasObject { kind = "Deployment"; name = "myapp2-app2"; };
|
|
}
|
|
{
|
|
message = "should have default labels set";
|
|
assertion =
|
|
(getObject { kind = "Deployment"; name = "myapp2-app2"; }).metadata.labels.module-label or false == "value" &&
|
|
(getObject { kind = "Deployment"; name = "myapp2"; }).metadata.labels.module-label or false == "value";
|
|
}
|
|
{
|
|
message = "should passthru resources to root module";
|
|
assertion =
|
|
config.kubernetes.resources.deployments.myapp2-app2-app.metadata.labels.module-label or false == "value";
|
|
}];
|
|
};
|
|
|
|
kubernetes.defaults.all.metadata.labels.module-label = "value";
|
|
|
|
# propagate default module configuration and defaults
|
|
kubernetes.defaultModuleConfiguration = {
|
|
all.kubernetes.defaultModuleConfiguration = mkAliasDefinitions options.kubernetes.defaultModuleConfiguration;
|
|
all.kubernetes.defaults = mkAliasDefinitions options.kubernetes.defaults;
|
|
};
|
|
|
|
kubernetes.moduleDefinitions.app1.module = { config, k8s, module, ... }: {
|
|
config.kubernetes.resources.deployments.app = {
|
|
metadata.name = module.name;
|
|
spec = {
|
|
selector = {
|
|
matchLabels.app = "app";
|
|
};
|
|
template.spec = {
|
|
containers.app = {
|
|
image = "hello-world";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
kubernetes.moduleDefinitions.app2.module = { name, config, k8s, module, ... }: {
|
|
options = {
|
|
replicas = mkOption {
|
|
description = "Number of replicas to run";
|
|
type = types.int;
|
|
default = 2;
|
|
};
|
|
};
|
|
|
|
config = {
|
|
kubernetes.resources.deployments.app = {
|
|
metadata.name = module.name;
|
|
spec = {
|
|
replicas = config.replicas;
|
|
selector = {
|
|
matchLabels.app = "app";
|
|
};
|
|
template.spec = {
|
|
containers.app = {
|
|
image = "hello-world";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
kubernetes.modules.app2 = {
|
|
name = "${name}-app2";
|
|
module = "app1";
|
|
namespace = module.namespace;
|
|
};
|
|
};
|
|
};
|
|
|
|
kubernetes.modules.myapp = {
|
|
module = "app1";
|
|
namespace = "test";
|
|
};
|
|
|
|
kubernetes.modules.myapp2 = {
|
|
module = "app2";
|
|
namespace = "test";
|
|
configuration.replicas = 3;
|
|
};
|
|
}
|