mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 08:00:06 +01:00
202 lines
5.3 KiB
Nix
202 lines
5.3 KiB
Nix
{pkgs ? import <nixpkgs> {}}:
|
|
|
|
let
|
|
kubenix = import ./. { inherit pkgs; };
|
|
|
|
lib = kubenix.lib;
|
|
|
|
generateK8S = spec: import ./k8s/generator.nix {
|
|
inherit pkgs;
|
|
inherit (pkgs) lib;
|
|
inherit spec;
|
|
};
|
|
|
|
generateIstio = spec: import ./istio/generator.nix {
|
|
inherit pkgs;
|
|
inherit (pkgs) lib;
|
|
inherit spec;
|
|
};
|
|
in {
|
|
generate.k8s = pkgs.linkFarm "k8s-generated.nix" [{
|
|
name = "v1.7.nix";
|
|
path = generateK8S ./k8s/specs/1.7/swagger.json;
|
|
} {
|
|
name = "v1.8.nix";
|
|
path = generateK8S ./k8s/specs/1.8/swagger.json;
|
|
} {
|
|
name = "v1.9.nix";
|
|
path = generateK8S ./k8s/specs/1.9/swagger.json;
|
|
} {
|
|
name = "v1.10.nix";
|
|
path = generateK8S ./k8s/specs/1.10/swagger.json;
|
|
} {
|
|
name = "v1.11.nix";
|
|
path = generateK8S ./k8s/specs/1.11/swagger.json;
|
|
} {
|
|
name = "v1.12.nix";
|
|
path = generateK8S ./k8s/specs/1.12/swagger.json;
|
|
} {
|
|
name = "v1.13.nix";
|
|
path = generateK8S ./k8s/specs/1.13/swagger.json;
|
|
}];
|
|
|
|
generate.istio = pkgs.linkFarm "istio-generated.nix" [{
|
|
name = "latest.nix";
|
|
path = generateIstio ./istio/istio-schema.json;
|
|
}];
|
|
|
|
test = import ./test {
|
|
inherit pkgs lib kubenix;
|
|
};
|
|
|
|
test-old = kubenix.buildResources ({
|
|
module = {lib, config, kubenix, ...}: with lib; {
|
|
imports = [
|
|
kubenix.k8s
|
|
kubenix.submodules
|
|
kubenix.istio
|
|
];
|
|
|
|
config = {
|
|
kubernetes.version = "1.10";
|
|
|
|
kubernetes.api.defaults.all.metadata.namespace = mkDefault "my-namespace";
|
|
|
|
submodules.defaults = {config, parentConfig, ...}: {
|
|
kubernetes = mkIf (hasAttr "kubernetes" config) {
|
|
version = mkDefault parentConfig.kubernetes.version;
|
|
api.defaults = mkDefault parentConfig.kubernetes.api.defaults;
|
|
};
|
|
};
|
|
|
|
submodules.imports = [
|
|
# import nginx submodule
|
|
./examples/module/nginx.nix
|
|
|
|
# import of patched nginx submodule
|
|
{
|
|
modules = [./examples/module/nginx.nix ({config, ...}: {
|
|
config = {
|
|
submodule.version = mkForce "1.0-xtruder";
|
|
args.image = "xtruder/nginx";
|
|
|
|
submodules.instances.test2 = {
|
|
submodule = "test";
|
|
};
|
|
|
|
kubernetes.objects = config.submodules.instances.test2.config.kubernetes.objects;
|
|
};
|
|
})];
|
|
}
|
|
|
|
# definition of test submodule
|
|
{
|
|
module = {submodule, ...}: {
|
|
submodule.name = "test";
|
|
|
|
imports = [
|
|
kubenix.k8s
|
|
];
|
|
|
|
kubernetes.api.pods.my-pod = {
|
|
metadata.name = submodule.name;
|
|
};
|
|
};
|
|
}
|
|
];
|
|
|
|
submodules.instances.nginx-default = {
|
|
submodule = "nginx";
|
|
};
|
|
|
|
submodules.instances.nginx-xtruder = {
|
|
submodule = "nginx";
|
|
version = "1.0-xtruder";
|
|
|
|
config = {
|
|
args.replicas = 9;
|
|
kubernetes.api.deployments.nginx.metadata.namespace = "other-namespace";
|
|
};
|
|
};
|
|
|
|
submodules.instances.test = {
|
|
submodule = "test";
|
|
};
|
|
|
|
kubernetes.api."networking.istio.io"."v1alpha3".Gateway.test.spec = {
|
|
selector.istio = "ingressgateway";
|
|
servers = [{
|
|
port = {
|
|
number = 80;
|
|
name = "http";
|
|
protocol = "HTTP";
|
|
};
|
|
hosts = ["host.example.com"];
|
|
tls.httpsRedirect = true;
|
|
} {
|
|
port = {
|
|
number = 443;
|
|
name = "https";
|
|
protocol = "HTTPS";
|
|
};
|
|
hosts = ["host.example.com"];
|
|
tls = {
|
|
mode = "SIMPLE";
|
|
serverCertificate = "/path/to/server.crt";
|
|
privateKey = "/path/to/private.key";
|
|
caCertificates = "/path/to/ca.crt";
|
|
};
|
|
}];
|
|
};
|
|
|
|
#kubernetes.api."cloud.google.com".v1beta1.BackendConfig.my-backend = {
|
|
#};
|
|
|
|
#modules.nginx1 = {
|
|
#args = {
|
|
#replicas = 2;
|
|
#};
|
|
|
|
#kubernetes.api.defaults.deployments = {
|
|
#spec.replicas = mkForce 3;
|
|
#};
|
|
|
|
#kubernetes.customResources = [{
|
|
#group = "cloud.google.com";
|
|
#version = "v1beta1";
|
|
#kind = "BackendConfig";
|
|
#plural = "backendconfigs";
|
|
#description = "Custom resource";
|
|
#module = {
|
|
#options.spec = {
|
|
#cdn = mkOption {
|
|
#description = "My cdn";
|
|
#type = types.str;
|
|
#default = "test";
|
|
#};
|
|
#};
|
|
#};
|
|
#}];
|
|
#};
|
|
|
|
#modules.nginx2 = {
|
|
#args = {
|
|
#replicas = 2;
|
|
#};
|
|
|
|
#kubernetes.api.defaults.deployments = {
|
|
#spec.replicas = mkForce 3;
|
|
#};
|
|
#};
|
|
|
|
kubernetes.objects = mkMerge [
|
|
config.submodules.instances.nginx-default.config.kubernetes.objects
|
|
config.submodules.instances.nginx-xtruder.config.kubernetes.objects
|
|
config.submodules.instances.test.config.kubernetes.objects
|
|
];
|
|
|
|
#kubernetes.customResources = config.modules.nginx1.kubernetes.customResources;
|
|
};
|
|
};
|
|
});
|
|
}
|