From a30ab27b39494949afb466ae3c796c7e2538d199 Mon Sep 17 00:00:00 2001 From: David Cornel Date: Wed, 23 Aug 2023 13:01:48 +0200 Subject: [PATCH] refactor(eks): exposed chart, repository, version chartAsset props for the HelmChart construct --- .../aws-cdk-lib/aws-eks/lib/helm-chart.ts | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/aws-cdk-lib/aws-eks/lib/helm-chart.ts b/packages/aws-cdk-lib/aws-eks/lib/helm-chart.ts index c314bea596079..649fce0018a04 100644 --- a/packages/aws-cdk-lib/aws-eks/lib/helm-chart.ts +++ b/packages/aws-cdk-lib/aws-eks/lib/helm-chart.ts @@ -108,10 +108,21 @@ export class HelmChart extends Construct { * The CloudFormation resource type. */ public static readonly RESOURCE_TYPE = 'Custom::AWSCDK-EKS-HelmChart'; + public readonly chart: string | undefined; + public readonly repository: string | undefined; + public readonly version: string | undefined; + public readonly chartAsset: Asset | undefined; constructor(scope: Construct, id: string, props: HelmChartProps) { super(scope, id); + // Exposing these properties is done for convenience + // For more details see issue #26678 + this.chart = props.chart; + this.repository = props.repository; + this.version = props.version; + this.chartAsset = props.chartAsset; + const stack = Stack.of(this); const provider = KubectlProvider.getOrCreate(this, props.cluster); @@ -121,11 +132,11 @@ export class HelmChart extends Construct { throw new Error('Helm chart timeout cannot be higher than 15 minutes.'); } - if (!props.chart && !props.chartAsset) { + if (!this.chart && !this.chartAsset) { throw new Error("Either 'chart' or 'chartAsset' must be specified to install a helm chart"); } - if (props.chartAsset && (props.repository || props.version)) { + if (this.chartAsset && (this.repository || this.version)) { throw new Error( "Neither 'repository' nor 'version' can be used when configuring 'chartAsset'", ); @@ -138,7 +149,7 @@ export class HelmChart extends Construct { // default to not skip crd installation const skipCrds = props.skipCrds ?? false; - props.chartAsset?.grantRead(provider.handlerRole); + this.chartAsset?.grantRead(provider.handlerRole); new CustomResource(this, 'Resource', { serviceToken: provider.serviceToken, @@ -147,14 +158,14 @@ export class HelmChart extends Construct { ClusterName: props.cluster.clusterName, RoleArn: provider.roleArn, // TODO: bake into the provider's environment Release: props.release ?? Names.uniqueId(this).slice(-53).toLowerCase(), // Helm has a 53 character limit for the name - Chart: props.chart, - ChartAssetURL: props.chartAsset?.s3ObjectUrl, - Version: props.version, + Chart: this.chart, + ChartAssetURL: this.chartAsset?.s3ObjectUrl, + Version: this.version, Wait: wait || undefined, // props are stringified so we encode “false” as undefined Timeout: timeout ? `${timeout.toString()}s` : undefined, // Helm v3 expects duration instead of integer Values: (props.values ? stack.toJsonString(props.values) : undefined), Namespace: props.namespace ?? 'default', - Repository: props.repository, + Repository: this.repository, CreateNamespace: createNamespace || undefined, SkipCrds: skipCrds || undefined, },