mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-13 00:20:07 +01:00
Refactor:
- Support for module features - Remove kubenix.module and rather use explicit modules - Make tests framework independent of k8s module - Remove metacontroller submodule, which will go to kubenix-modules - Improved submodule propagation and passthru - Added additional test for k8s-submodule
This commit is contained in:
parent
b670139906
commit
6183fcc190
30 changed files with 513 additions and 508 deletions
|
|
@ -26,19 +26,16 @@ let
|
|||
./k8s/1.13/crd.nix
|
||||
./k8s/defaults.nix
|
||||
./k8s/order.nix
|
||||
./k8s/submodule.nix
|
||||
./helm/simple.nix
|
||||
./istio/bookinfo.nix
|
||||
./submodules/simple.nix
|
||||
./submodules/defaults.nix
|
||||
./submodules/versioning.nix
|
||||
./module.nix
|
||||
./metacontroller/compositecontroller.nix
|
||||
];
|
||||
testing.defaults = ({kubenix, ...}: {
|
||||
imports = [kubenix.modules.k8s];
|
||||
kubernetes.version = k8sVersion;
|
||||
_module.args.images = images;
|
||||
});
|
||||
testing.args = {
|
||||
inherit images k8sVersion;
|
||||
};
|
||||
}
|
||||
];
|
||||
args = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, pkgs, kubenix, helm, ... }:
|
||||
{ config, lib, pkgs, kubenix, helm, k8sVersion, ... }:
|
||||
|
||||
with lib;
|
||||
with kubenix.lib;
|
||||
|
|
@ -60,6 +60,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.namespaces.test = {};
|
||||
|
||||
kubernetes.helm.instances.app-psql = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, kubenix, ... }:
|
||||
{ config, kubenix, k8sVersion, ... }:
|
||||
|
||||
{
|
||||
imports = with kubenix.modules; [ test k8s istio ];
|
||||
|
|
@ -8,6 +8,8 @@
|
|||
description = "Simple istio bookinfo application (WIP)";
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api."networking.istio.io"."v1alpha3" = {
|
||||
Gateway."bookinfo-gateway" = {
|
||||
spec = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, kubenix, ... }:
|
||||
{ config, lib, kubenix, k8sVersion, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
|
@ -17,6 +17,8 @@ in {
|
|||
}];
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.customresourcedefinitions.crontabs = {
|
||||
metadata.name = "crontabs.stable.example.com";
|
||||
spec = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, kubenix, pkgs, ... }:
|
||||
{ config, lib, kubenix, pkgs, k8sVersion, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
|
@ -22,6 +22,8 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.customresourcedefinitions.crontabs = {
|
||||
metadata.name = "crontabs.stable.example.com";
|
||||
spec = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, kubenix, ... }:
|
||||
{ config, lib, kubenix, k8sVersion, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
|
@ -23,6 +23,8 @@ in {
|
|||
}];
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.pods.pod1 = {};
|
||||
|
||||
kubernetes.api.pods.pod2 = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, pkgs, kubenix, images, ... }:
|
||||
{ config, lib, pkgs, kubenix, images, k8sVersion, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
|
@ -41,6 +41,8 @@ in {
|
|||
|
||||
docker.images.nginx.image = image;
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.deployments.nginx = {
|
||||
spec = {
|
||||
replicas = 10;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, lib, kubenix, pkgs, ... }:
|
||||
{ config, lib, kubenix, pkgs, k8sVersion, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
|
|
@ -20,6 +20,8 @@ in {
|
|||
}];
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.customresourcedefinitions.crontabs = {
|
||||
metadata.name = "crontabs.stable.example.com";
|
||||
spec = {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
{ config, kubenix, ... }:
|
||||
{ config, kubenix, k8sVersion, ... }:
|
||||
|
||||
let
|
||||
cfg = config.kubernetes.api.pods.nginx;
|
||||
|
|
@ -17,5 +17,7 @@ in {
|
|||
}];
|
||||
};
|
||||
|
||||
kubernetes.version = k8sVersion;
|
||||
|
||||
kubernetes.api.pods.nginx = {};
|
||||
}
|
||||
|
|
|
|||
56
tests/k8s/submodule.nix
Normal file
56
tests/k8s/submodule.nix
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
{ name, config, lib, kubenix, images, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.submodules.instances.passthru;
|
||||
in {
|
||||
imports = with kubenix.modules; [ test submodules k8s docker ];
|
||||
|
||||
test = {
|
||||
name = "k8s-submodule";
|
||||
description = "Simple k8s submodule test";
|
||||
assertions = [{
|
||||
message = "Submodule has correct name set";
|
||||
assertion = (head config.kubernetes.objects).metadata.name == "passthru";
|
||||
} {
|
||||
message = "Should expose docker image";
|
||||
assertion = (head config.docker.export).imageName == "xtruder/nginx";
|
||||
}];
|
||||
};
|
||||
|
||||
kubenix.project = "test-release";
|
||||
|
||||
kubernetes.namespace = "test-namespace";
|
||||
|
||||
submodules.imports = [{
|
||||
module = {name, config, ...}: {
|
||||
imports = with kubenix.modules; [ submodule k8s docker ];
|
||||
|
||||
config = {
|
||||
submodule.name = "test-submodule";
|
||||
|
||||
kubernetes.api.pods.nginx = {
|
||||
metadata.name = name;
|
||||
spec.containers.nginx.image = config.docker.images.nginx.path;
|
||||
};
|
||||
|
||||
docker.images.nginx.image = images.nginx;
|
||||
};
|
||||
};
|
||||
}];
|
||||
|
||||
kubernetes.api.defaults = [{
|
||||
propagate = true;
|
||||
default.metadata.labels.my-label = "my-value";
|
||||
}];
|
||||
|
||||
submodules.instances.passthru = {
|
||||
submodule = "test-submodule";
|
||||
};
|
||||
|
||||
submodules.instances.no-passthru = {
|
||||
submodule = "test-submodule";
|
||||
passthru.enable = false;
|
||||
};
|
||||
}
|
||||
|
|
@ -9,23 +9,27 @@ let
|
|||
instance4 = config.submodules.instances.instance4;
|
||||
instance5 = config.submodules.instances.instance5;
|
||||
|
||||
module = {name, ...}: {
|
||||
options.args.value = mkOption {
|
||||
description = "Submodule value";
|
||||
type = types.str;
|
||||
};
|
||||
submodule = {name, ...}: {
|
||||
imports = [ kubenix.modules.submodule ];
|
||||
|
||||
options.args.defaultValue = mkOption {
|
||||
description = "Submodule default value";
|
||||
type = types.str;
|
||||
options = {
|
||||
args.value = mkOption {
|
||||
description = "Submodule value";
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
args.defaultValue = mkOption {
|
||||
description = "Submodule default value";
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
};
|
||||
in {
|
||||
imports = with kubenix.modules; [ test submodules ];
|
||||
|
||||
test = {
|
||||
name = "submodules-defatuls";
|
||||
description = "Simple k8s submodule test";
|
||||
name = "submodules-defaults";
|
||||
description = "Simple submodule test";
|
||||
assertions = [{
|
||||
message = "should apply defaults by tag1";
|
||||
assertion = instance1.config.args.value == "value1";
|
||||
|
|
@ -53,34 +57,34 @@ in {
|
|||
};
|
||||
|
||||
submodules.imports = [{
|
||||
modules = [module {
|
||||
modules = [submodule {
|
||||
submodule = {
|
||||
name = "submodule1";
|
||||
tags = ["tag1"];
|
||||
};
|
||||
}];
|
||||
} {
|
||||
modules = [module {
|
||||
modules = [submodule {
|
||||
submodule = {
|
||||
name = "submodule2";
|
||||
tags = ["tag2"];
|
||||
};
|
||||
}];
|
||||
} {
|
||||
modules = [module {
|
||||
modules = [submodule {
|
||||
submodule = {
|
||||
name = "submodule3";
|
||||
tags = ["tag2"];
|
||||
};
|
||||
}];
|
||||
} {
|
||||
modules = [module {
|
||||
modules = [submodule {
|
||||
submodule = {
|
||||
name = "submodule4";
|
||||
};
|
||||
}];
|
||||
} {
|
||||
modules = [module {
|
||||
modules = [submodule {
|
||||
submodule = {
|
||||
name = "submodule5";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -25,20 +25,30 @@ in {
|
|||
} {
|
||||
message = "Should have submodule name set";
|
||||
assertion = cfg.config.args.name == "instance";
|
||||
} {
|
||||
message = "should have tag set";
|
||||
assertion = elem "tag" (cfg.config.submodule.tags);
|
||||
}];
|
||||
};
|
||||
|
||||
submodules.propagate.enable = true;
|
||||
submodules.imports = [{
|
||||
module = {name, ...}: {
|
||||
config.submodule.name = "submodule";
|
||||
options.args.value = mkOption {
|
||||
description = "Submodule argument";
|
||||
type = types.str;
|
||||
imports = [ kubenix.modules.submodule ];
|
||||
config = {
|
||||
submodule.name = "submodule";
|
||||
submodule.tags = ["tag"];
|
||||
};
|
||||
options.args.name = mkOption {
|
||||
description = "Submodule name";
|
||||
type = types.str;
|
||||
default = name;
|
||||
options = {
|
||||
args.value = mkOption {
|
||||
description = "Submodule argument";
|
||||
type = types.str;
|
||||
};
|
||||
args.name = mkOption {
|
||||
description = "Submodule name";
|
||||
type = types.str;
|
||||
default = name;
|
||||
};
|
||||
};
|
||||
};
|
||||
}];
|
||||
|
|
|
|||
|
|
@ -8,12 +8,14 @@ let
|
|||
inst-latest = config.submodules.instances.inst-latest.config;
|
||||
|
||||
submodule = {
|
||||
config.submodule.name = "subm";
|
||||
imports = [ kubenix.modules.submodule ];
|
||||
|
||||
options.version = mkOption {
|
||||
type = types.str;
|
||||
default = "undefined";
|
||||
};
|
||||
|
||||
config.submodule.name = "subm";
|
||||
};
|
||||
in {
|
||||
imports = with kubenix.modules; [ test submodules ];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue