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 = {};
|
||||
};
|
||||
|
||||
imports = mkOption {
|
||||
type = types.listOf (types.either types.package types.path);
|
||||
description = "List of resources to import";
|
||||
default = [];
|
||||
};
|
||||
|
||||
customResources = mkOption {
|
||||
default = [];
|
||||
description = "List of custom resource definitions to make API for";
|
||||
|
|
@ -272,10 +278,40 @@ in {
|
|||
|
||||
_module.features = [ "k8s" ];
|
||||
|
||||
kubernetes.api.resources = map (cr: {
|
||||
kubernetes.api = mkMerge ([{
|
||||
resources = map (cr: {
|
||||
inherit (cr) group version kind resource;
|
||||
}) 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 [
|
||||
# gvk resources
|
||||
(flatten (map (gvk:
|
||||
|
|
@ -304,23 +340,6 @@ in {
|
|||
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 = [{
|
||||
features = [ "k8s" ];
|
||||
default = { config, name, ... }: {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ let
|
|||
./k8s/defaults.nix
|
||||
./k8s/order.nix
|
||||
./k8s/submodule.nix
|
||||
./k8s/imports.nix
|
||||
./helm/simple.nix
|
||||
./istio/bookinfo.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