mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 16:10:05 +01:00
ref: move generators into jobs & improvements
- format generated files with nixpkgs-fmt Also unrelatedly embellish flake.nix
This commit is contained in:
parent
348d922b18
commit
bf231d19fa
7 changed files with 156 additions and 126 deletions
27
flake.nix
27
flake.nix
|
|
@ -8,35 +8,38 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils, devshell-flake }:
|
outputs = { self, nixpkgs, flake-utils, devshell-flake }:
|
||||||
(flake-utils.lib.eachDefaultSystem
|
|
||||||
(system:
|
(flake-utils.lib.eachDefaultSystem (system:
|
||||||
let
|
let
|
||||||
|
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = [
|
overlays = [
|
||||||
self.overlay
|
self.overlay
|
||||||
devshell-flake.overlay
|
devshell-flake.overlay
|
||||||
];
|
];
|
||||||
config = {
|
config = { allowUnsupportedSystem = true; };
|
||||||
allowUnsupportedSystem = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
in
|
in
|
||||||
rec {
|
{
|
||||||
|
|
||||||
devShell = with pkgs; devshell.mkShell
|
devShell = with pkgs; devshell.mkShell
|
||||||
{ imports = [ (devshell.importTOML ./devshell.toml) ]; };
|
{ imports = [ (devshell.importTOML ./devshell.toml) ]; };
|
||||||
|
|
||||||
packages = flake-utils.lib.flattenTree {
|
packages = flake-utils.lib.flattenTree {
|
||||||
inherit (pkgs)
|
inherit (pkgs) kubernetes kubectl;
|
||||||
kubernetes
|
|
||||||
kubectl
|
|
||||||
;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
defaultPackage = pkgs.kubenix;
|
defaultPackage = pkgs.kubenix;
|
||||||
|
|
||||||
|
jobs = import ./jobs { inherit pkgs; };
|
||||||
|
|
||||||
}
|
}
|
||||||
)
|
))
|
||||||
) //
|
|
||||||
|
//
|
||||||
|
|
||||||
{
|
{
|
||||||
modules = import ./src/modules;
|
modules = import ./src/modules;
|
||||||
overlay = final: prev: {
|
overlay = final: prev: {
|
||||||
|
|
|
||||||
4
jobs/default.nix
Normal file
4
jobs/default.nix
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{ pkgs }:
|
||||||
|
{
|
||||||
|
generators = pkgs.callPackage ./generators { };
|
||||||
|
}
|
||||||
54
jobs/generators/default.nix
Normal file
54
jobs/generators/default.nix
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
{ pkgs, lib }:
|
||||||
|
let
|
||||||
|
|
||||||
|
generateIstio = import ./istio {
|
||||||
|
inherit
|
||||||
|
pkgs
|
||||||
|
lib
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
generateK8S = name: spec: import ./k8s {
|
||||||
|
inherit
|
||||||
|
name
|
||||||
|
pkgs
|
||||||
|
lib
|
||||||
|
spec
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
istio = pkgs.linkFarm "istio-generated" [{
|
||||||
|
name = "latest.nix";
|
||||||
|
path = generateIstio;
|
||||||
|
}];
|
||||||
|
|
||||||
|
k8s = pkgs.linkFarm "k8s-generated" [
|
||||||
|
{
|
||||||
|
name = "v1.19.nix";
|
||||||
|
path = generateK8S "v1.19" (builtins.fetchurl {
|
||||||
|
url = "https://github.com/kubernetes/kubernetes/raw/v1.19.10/api/openapi-spec/swagger.json";
|
||||||
|
sha256 = "sha256-ZXxonUAUxRK6rhTgK62ytTdDKCuOoWPwxJmktiKgcJc=";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "v1.20.nix";
|
||||||
|
path = generateK8S "v1.20" (builtins.fetchurl {
|
||||||
|
url = "https://github.com/kubernetes/kubernetes/raw/v1.20.6/api/openapi-spec/swagger.json";
|
||||||
|
sha256 = "sha256-xzVOarQDSomHMimpt8H6MfpiQrLl9am2fDvk/GfLkDw=";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "v1.21.nix";
|
||||||
|
path = generateK8S "v1.21" (builtins.fetchurl {
|
||||||
|
url = "https://github.com/kubernetes/kubernetes/raw/v1.21.0/api/openapi-spec/swagger.json";
|
||||||
|
sha256 = "sha256-EoqYTbtaTlzs7vneoNtXUmdnjTM/U+1gYwCiEy0lOcw=";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -231,8 +231,8 @@ values}]'';
|
||||||
swagger = fetchSpecs spec;
|
swagger = fetchSpecs spec;
|
||||||
|
|
||||||
definitions = genDefinitions swagger;
|
definitions = genDefinitions swagger;
|
||||||
in
|
|
||||||
pkgs.writeText "gen.nix" ''
|
generated = ''
|
||||||
# This file was generated with kubenix k8s generator, do not edit
|
# This file was generated with kubenix k8s generator, do not edit
|
||||||
{lib, config, ... }:
|
{lib, config, ... }:
|
||||||
|
|
||||||
|
|
@ -241,8 +241,8 @@ pkgs.writeText "gen.nix" ''
|
||||||
let
|
let
|
||||||
types = lib.types // rec {
|
types = lib.types // rec {
|
||||||
str = mkOptionType {
|
str = mkOptionType {
|
||||||
name = \"str\";
|
name = "str";
|
||||||
description = \"string\";
|
description = "string";
|
||||||
check = isString;
|
check = isString;
|
||||||
merge = mergeEqualOption;
|
merge = mergeEqualOption;
|
||||||
};
|
};
|
||||||
|
|
@ -251,8 +251,8 @@ pkgs.writeText "gen.nix" ''
|
||||||
# converted to `finalType` using `coerceFunc`.
|
# converted to `finalType` using `coerceFunc`.
|
||||||
coercedTo = coercedType: coerceFunc: finalType:
|
coercedTo = coercedType: coerceFunc: finalType:
|
||||||
mkOptionType rec {
|
mkOptionType rec {
|
||||||
name = \"coercedTo\";
|
name = "coercedTo";
|
||||||
description = \"\${finalType.description} or \${coercedType.description}\";
|
description = "''${finalType.description} or ''${coercedType.description}";
|
||||||
check = x: finalType.check x || coercedType.check x;
|
check = x: finalType.check x || coercedType.check x;
|
||||||
merge = loc: defs:
|
merge = loc: defs:
|
||||||
let
|
let
|
||||||
|
|
@ -280,34 +280,34 @@ pkgs.writeText "gen.nix" ''
|
||||||
mergeValuesByKey = mergeKey: values:
|
mergeValuesByKey = mergeKey: values:
|
||||||
listToAttrs (map
|
listToAttrs (map
|
||||||
(value: nameValuePair (
|
(value: nameValuePair (
|
||||||
if isAttrs value.\${mergeKey}
|
if isAttrs value.''${mergeKey}
|
||||||
then toString value.\${mergeKey}.content
|
then toString value.''${mergeKey}.content
|
||||||
else (toString value.\${mergeKey})
|
else (toString value.''${mergeKey})
|
||||||
) value)
|
) value)
|
||||||
values);
|
values);
|
||||||
|
|
||||||
submoduleOf = ref: types.submodule ({name, ...}: {
|
submoduleOf = ref: types.submodule ({name, ...}: {
|
||||||
options = definitions.\"\${ref}\".options;
|
options = definitions."''${ref}".options;
|
||||||
config = definitions.\"\${ref}\".config;
|
config = definitions."''${ref}".config;
|
||||||
});
|
});
|
||||||
|
|
||||||
submoduleWithMergeOf = ref: mergeKey: types.submodule ({name, ...}: let
|
submoduleWithMergeOf = ref: mergeKey: types.submodule ({name, ...}: let
|
||||||
convertName = name:
|
convertName = name:
|
||||||
if definitions.\"\${ref}\".options.\${mergeKey}.type == types.int
|
if definitions."''${ref}".options.''${mergeKey}.type == types.int
|
||||||
then toInt name
|
then toInt name
|
||||||
else name;
|
else name;
|
||||||
in {
|
in {
|
||||||
options = definitions.\"\${ref}\".options;
|
options = definitions."''${ref}".options;
|
||||||
config = definitions.\"\${ref}\".config // {
|
config = definitions."''${ref}".config // {
|
||||||
\${mergeKey} = mkOverride 1002 (convertName name);
|
''${mergeKey} = mkOverride 1002 (convertName name);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
submoduleForDefinition = ref: resource: kind: group: version:
|
submoduleForDefinition = ref: resource: kind: group: version:
|
||||||
types.submodule ({name, ...}: {
|
types.submodule ({name, ...}: {
|
||||||
options = definitions.\"\${ref}\".options // extraOptions;
|
options = definitions."''${ref}".options // extraOptions;
|
||||||
config = mkMerge ([
|
config = mkMerge ([
|
||||||
definitions.\"\${ref}\".config
|
definitions."''${ref}".config
|
||||||
{
|
{
|
||||||
kind = mkOptionDefault kind;
|
kind = mkOptionDefault kind;
|
||||||
apiVersion = mkOptionDefault version;
|
apiVersion = mkOptionDefault version;
|
||||||
|
|
@ -315,7 +315,7 @@ pkgs.writeText "gen.nix" ''
|
||||||
# metdata.name cannot use option default, due deep config
|
# metdata.name cannot use option default, due deep config
|
||||||
metadata.name = mkOptionDefault name;
|
metadata.name = mkOptionDefault name;
|
||||||
}
|
}
|
||||||
] ++ (config.defaults.\${resource} or [])
|
] ++ (config.defaults.''${resource} or [])
|
||||||
++ (config.defaults.all or []));
|
++ (config.defaults.all or []));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -326,23 +326,20 @@ pkgs.writeText "gen.nix" ''
|
||||||
);
|
);
|
||||||
|
|
||||||
definitions = {
|
definitions = {
|
||||||
${concatStrings (mapAttrsToList
|
${concatStrings (mapAttrsToList (name: value: ''
|
||||||
(name: value: "
|
"${name}" = {${optionalString (hasAttr "options" value) "
|
||||||
\"${name}\" = {${optionalString (hasAttr "options" value) "
|
options = {${concatStrings (mapAttrsToList (name: value: ''
|
||||||
options = {${concatStrings (mapAttrsToList
|
"${name}" = ${value};
|
||||||
(name: value: "
|
'') value.options)}};
|
||||||
\"${name}\" = ${value};
|
"}
|
||||||
")
|
|
||||||
value.options)}};
|
${optionalString (hasAttr "config" value) ''
|
||||||
"}${optionalString (hasAttr "config" value) "
|
config = {${concatStrings (mapAttrsToList (name: value: ''
|
||||||
config = {${concatStrings (mapAttrsToList
|
"${name}" = ${value};
|
||||||
(name: value: "
|
'') value.config)}};
|
||||||
\"${name}\" = ${value};
|
''}
|
||||||
")
|
};
|
||||||
value.config)}};
|
'') definitions)}
|
||||||
"}};
|
|
||||||
")
|
|
||||||
definitions)}
|
|
||||||
} // (import ./overrides.nix {inheirt definitions lib;}));
|
} // (import ./overrides.nix {inheirt definitions lib;}));
|
||||||
in {
|
in {
|
||||||
kubernetes.customResources = [
|
kubernetes.customResources = [
|
||||||
|
|
@ -357,4 +354,16 @@ pkgs.writeText "gen.nix" ''
|
||||||
(genResources swagger)}
|
(genResources swagger)}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
pkgs.runCommand "istio-gen.nix"
|
||||||
|
{
|
||||||
|
buildInputs = [ pkgs.nixpkgs-fmt ];
|
||||||
|
} ''
|
||||||
|
cat << 'GENERATED' > ./raw
|
||||||
|
"${generated}"
|
||||||
|
GENERATED
|
||||||
|
|
||||||
|
nixpkgs-fmt ./raw
|
||||||
|
cp ./raw $out
|
||||||
''
|
''
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
{ name ? "k8s"
|
{ name
|
||||||
, pkgs ? import <nixpkgs> { }
|
, pkgs
|
||||||
, lib ? pkgs.lib
|
, lib
|
||||||
, spec ? ./specs/1.21/swagger.json
|
, spec
|
||||||
, ...
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
@ -456,8 +455,12 @@ values}]'';
|
||||||
in
|
in
|
||||||
pkgs.runCommand "k8s-${name}-gen.nix"
|
pkgs.runCommand "k8s-${name}-gen.nix"
|
||||||
{
|
{
|
||||||
buildInputs = [ pkgs.haskellPackages.nixfmt ];
|
buildInputs = [ pkgs.nixpkgs-fmt ];
|
||||||
} ''
|
} ''
|
||||||
cp ${builtins.toFile "k8s-${name}-gen-raw.nix" generated} $out
|
cat << 'GENERATED' > ./raw
|
||||||
nixfmt -w 100 $out
|
"${generated}"
|
||||||
|
GENERATED
|
||||||
|
|
||||||
|
nixpkgs-fmt ./raw
|
||||||
|
cp ./raw $out
|
||||||
''
|
''
|
||||||
43
release.nix
43
release.nix
|
|
@ -2,7 +2,6 @@ let
|
||||||
fetch = import ./lib/compat.nix;
|
fetch = import ./lib/compat.nix;
|
||||||
in
|
in
|
||||||
{ pkgs ? import (fetch "nixpkgs") { }
|
{ pkgs ? import (fetch "nixpkgs") { }
|
||||||
, nixosPath ? toString (fetch "nixpkgs") + "/nixos"
|
|
||||||
, lib ? pkgs.lib
|
, lib ? pkgs.lib
|
||||||
, throwError ? true
|
, throwError ? true
|
||||||
}:
|
}:
|
||||||
|
|
@ -13,53 +12,11 @@ let
|
||||||
|
|
||||||
lib = kubenix.lib;
|
lib = kubenix.lib;
|
||||||
|
|
||||||
generateK8S = name: spec: import ./generators/k8s {
|
|
||||||
inherit name;
|
|
||||||
inherit pkgs;
|
|
||||||
inherit (pkgs) lib;
|
|
||||||
inherit spec;
|
|
||||||
};
|
|
||||||
|
|
||||||
generateIstio = import ./generators/istio {
|
|
||||||
inherit pkgs;
|
|
||||||
inherit (pkgs) lib;
|
|
||||||
};
|
|
||||||
|
|
||||||
runK8STests = k8sVersion: import ./tests {
|
runK8STests = k8sVersion: import ./tests {
|
||||||
inherit pkgs lib kubenix k8sVersion throwError nixosPath;
|
inherit pkgs lib kubenix k8sVersion throwError nixosPath;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
rec {
|
rec {
|
||||||
generate.k8s = pkgs.linkFarm "k8s-generated.nix" [
|
|
||||||
{
|
|
||||||
name = "v1.19.nix";
|
|
||||||
path = generateK8S "v1.19" (builtins.fetchurl {
|
|
||||||
url = "https://github.com/kubernetes/kubernetes/raw/v1.19.10/api/openapi-spec/swagger.json";
|
|
||||||
sha256 = "sha256-ZXxonUAUxRK6rhTgK62ytTdDKCuOoWPwxJmktiKgcJc=";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "v1.20.nix";
|
|
||||||
path = generateK8S "v1.20" (builtins.fetchurl {
|
|
||||||
url = "https://github.com/kubernetes/kubernetes/raw/v1.20.6/api/openapi-spec/swagger.json";
|
|
||||||
sha256 = "sha256-xzVOarQDSomHMimpt8H6MfpiQrLl9am2fDvk/GfLkDw=";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
name = "v1.21.nix";
|
|
||||||
path = generateK8S "v1.21" (builtins.fetchurl {
|
|
||||||
url = "https://github.com/kubernetes/kubernetes/raw/v1.21.0/api/openapi-spec/swagger.json";
|
|
||||||
sha256 = "sha256-EoqYTbtaTlzs7vneoNtXUmdnjTM/U+1gYwCiEy0lOcw=";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
generate.istio = pkgs.linkFarm "istio-generated.nix" [{
|
|
||||||
name = "latest.nix";
|
|
||||||
path = generateIstio;
|
|
||||||
}];
|
|
||||||
|
|
||||||
tests = {
|
tests = {
|
||||||
k8s-1_19 = runK8STests "1.19";
|
k8s-1_19 = runK8STests "1.19";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue