Skip to content

Commit

Permalink
helm: add support for --api-versions
Browse files Browse the repository at this point in the history
  • Loading branch information
felixscheinost committed Oct 17, 2023
1 parent 473fb3a commit 24765b5
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
3 changes: 3 additions & 0 deletions lib/helm/chart2json.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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}"} \
Expand Down
13 changes: 12 additions & 1 deletion modules/helm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 = { };
Expand Down

0 comments on commit 24765b5

Please sign in to comment.