helm: add support for --api-versions (#38)

This commit is contained in:
Felix Scheinost 2023-10-18 17:45:20 +02:00 committed by GitHub
parent 473fb3ae50
commit ea469ff77a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 1 deletions

View file

@ -15,12 +15,15 @@ with lib;
, includeCRDs ? false
# whether to include hooks
, noHooks ? false
# Kubernetes api versions used for Capabilities.APIVersions (--api-versions)
, apiVersions ? null
}:
let
valuesJsonFile = builtins.toFile "${name}-values.json" (builtins.toJSON values);
# The `helm template` and YAML -> JSON steps are separate `runCommand` derivations for easier debuggability
resourcesYaml = runCommand "${name}.yaml" { nativeBuildInputs = [ kubernetes-helm ]; } ''
helm template "${name}" \
${optionalString (apiVersions != null && apiVersions != []) "--api-versions ${lib.strings.concatStringsSep "," apiVersions}"} \
${optionalString (kubeVersion != null) "--kube-version ${kubeVersion}"} \
${optionalString (namespace != null) "--namespace ${namespace}"} \
${optionalString (values != {}) "-f ${valuesJsonFile}"} \

View file

@ -99,6 +99,17 @@ in
default = false;
};
apiVersions = mkOption {
description = ''
Inform Helm about which CRDs are available in the cluster (`--api-versions` option).
This is useful for charts which contain `.Capabilities.APIVersions.Has` checks.
If you use `kubernetes.customTypes` to make kubenix aware of CRDs, it will include those as well by default.
'';
type = types.listOf types.str;
default = builtins.map (customType: "${customType.group}/${customType.version}")
(builtins.attrValues globalConfig.kubernetes.customTypes);
};
objects = mkOption {
description = "Generated kubernetes objects";
type = types.listOf types.attrs;
@ -111,7 +122,7 @@ in
}];
config.objects = importJSON (helm.chart2json {
inherit (config) chart name namespace values kubeVersion includeCRDs noHooks;
inherit (config) chart name namespace values kubeVersion includeCRDs noHooks apiVersions;
});
}));
default = { };