mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 08:00:06 +01:00
feat(k8s): support for yaml/json imports
This commit is contained in:
parent
db5ee88274
commit
5e29229879
5 changed files with 104 additions and 20 deletions
|
|
@ -202,6 +202,12 @@ in {
|
||||||
default = {};
|
default = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
imports = mkOption {
|
||||||
|
type = types.listOf (types.either types.package types.path);
|
||||||
|
description = "List of resources to import";
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
|
||||||
customResources = mkOption {
|
customResources = mkOption {
|
||||||
default = [];
|
default = [];
|
||||||
description = "List of custom resource definitions to make API for";
|
description = "List of custom resource definitions to make API for";
|
||||||
|
|
@ -272,10 +278,40 @@ in {
|
||||||
|
|
||||||
_module.features = [ "k8s" ];
|
_module.features = [ "k8s" ];
|
||||||
|
|
||||||
kubernetes.api.resources = map (cr: {
|
kubernetes.api = mkMerge ([{
|
||||||
|
resources = map (cr: {
|
||||||
inherit (cr) group version kind resource;
|
inherit (cr) group version kind resource;
|
||||||
}) cfg.customResources;
|
}) cfg.customResources;
|
||||||
|
|
||||||
|
defaults = [{
|
||||||
|
default = {
|
||||||
|
metadata.namespace = mkDefault config.kubernetes.namespace;
|
||||||
|
metadata.labels = mkMerge [
|
||||||
|
{
|
||||||
|
"kubenix/project-name" = config.kubenix.project;
|
||||||
|
}
|
||||||
|
|
||||||
|
# if we are inside submodule, define additional labels
|
||||||
|
(mkIf (elem "submodule" config._module.features) {
|
||||||
|
"kubenix/module-name" = config.submodule.name;
|
||||||
|
"kubenix/module-version" = config.submodule.version;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}];
|
||||||
|
}] ++ (map (i: let
|
||||||
|
object = loadYAML i;
|
||||||
|
groupVersion = splitString "/" object.apiVersion;
|
||||||
|
name = object.metadata.name;
|
||||||
|
version = last groupVersion;
|
||||||
|
group =
|
||||||
|
if version == (head groupVersion)
|
||||||
|
then "core" else head groupVersion;
|
||||||
|
kind = object.kind;
|
||||||
|
in {
|
||||||
|
${group}.${version}.${kind}.${name} = object;
|
||||||
|
}) cfg.imports));
|
||||||
|
|
||||||
kubernetes.objects = mkMerge [
|
kubernetes.objects = mkMerge [
|
||||||
# gvk resources
|
# gvk resources
|
||||||
(flatten (map (gvk:
|
(flatten (map (gvk:
|
||||||
|
|
@ -304,23 +340,6 @@ in {
|
||||||
labels."kubenix/project-name" = config.kubenix.project;
|
labels."kubenix/project-name" = config.kubenix.project;
|
||||||
};
|
};
|
||||||
|
|
||||||
kubernetes.api.defaults = [{
|
|
||||||
default = {
|
|
||||||
metadata.namespace = mkDefault config.kubernetes.namespace;
|
|
||||||
metadata.labels = mkMerge [
|
|
||||||
{
|
|
||||||
"kubenix/project-name" = config.kubenix.project;
|
|
||||||
}
|
|
||||||
|
|
||||||
# if we are inside submodule, define additional labels
|
|
||||||
(mkIf (elem "submodule" config._module.features) {
|
|
||||||
"kubenix/module-name" = config.submodule.name;
|
|
||||||
"kubenix/module-version" = config.submodule.version;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}];
|
|
||||||
|
|
||||||
submodules.defaults = [{
|
submodules.defaults = [{
|
||||||
features = [ "k8s" ];
|
features = [ "k8s" ];
|
||||||
default = { config, name, ... }: {
|
default = { config, name, ... }: {
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ let
|
||||||
./k8s/defaults.nix
|
./k8s/defaults.nix
|
||||||
./k8s/order.nix
|
./k8s/order.nix
|
||||||
./k8s/submodule.nix
|
./k8s/submodule.nix
|
||||||
|
./k8s/imports.nix
|
||||||
./helm/simple.nix
|
./helm/simple.nix
|
||||||
./istio/bookinfo.nix
|
./istio/bookinfo.nix
|
||||||
./submodules/simple.nix
|
./submodules/simple.nix
|
||||||
|
|
|
||||||
21
tests/k8s/deployment.yaml
Normal file
21
tests/k8s/deployment.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: nginx-deployment
|
||||||
|
labels:
|
||||||
|
app: nginx
|
||||||
|
spec:
|
||||||
|
replicas: 3
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nginx
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: nginx
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.7.9
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
30
tests/k8s/imports.nix
Normal file
30
tests/k8s/imports.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{ config, lib, kubenix, k8sVersion, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
pod = config.kubernetes.api.core.v1.Pod.test;
|
||||||
|
deployment = config.kubernetes.api.apps.v1.Deployment.nginx-deployment;
|
||||||
|
in {
|
||||||
|
imports = with kubenix.modules; [ test k8s ];
|
||||||
|
|
||||||
|
test = {
|
||||||
|
name = "k8s-imports";
|
||||||
|
description = "Simple k8s testing imports";
|
||||||
|
enable = builtins.compareVersions config.kubernetes.version "1.10" >= 0;
|
||||||
|
assertions = [{
|
||||||
|
message = "Pod should have name set";
|
||||||
|
assertion = pod.metadata.name == "test";
|
||||||
|
} {
|
||||||
|
message = "Deployment should have name set";
|
||||||
|
assertion = deployment.metadata.name == "nginx-deployment";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
|
||||||
|
kubernetes.version = k8sVersion;
|
||||||
|
|
||||||
|
kubernetes.imports = [
|
||||||
|
./pod.json
|
||||||
|
./deployment.yaml
|
||||||
|
];
|
||||||
|
}
|
||||||
13
tests/k8s/pod.json
Normal file
13
tests/k8s/pod.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"kind": "Pod",
|
||||||
|
"apiVersion": "v1",
|
||||||
|
"metadata": {
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"containers": [{
|
||||||
|
"name": "test",
|
||||||
|
"image": "busybox"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue