From a136fbae07897336cf1482be6139cb04c434b6a0 Mon Sep 17 00:00:00 2001 From: Pahud Date: Thu, 25 Jun 2020 00:56:23 +0800 Subject: [PATCH 1/7] bump aws-lambda-layer-kubectl to 2.0.0 --- packages/@aws-cdk/aws-eks/lib/kubectl-provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-eks/lib/kubectl-provider.ts b/packages/@aws-cdk/aws-eks/lib/kubectl-provider.ts index dd4f2e27f910a..5c144e42abf97 100644 --- a/packages/@aws-cdk/aws-eks/lib/kubectl-provider.ts +++ b/packages/@aws-cdk/aws-eks/lib/kubectl-provider.ts @@ -24,7 +24,7 @@ export class KubectlProvider extends NestedStack { runtime: lambda.Runtime.PYTHON_3_7, handler: 'index.handler', timeout: Duration.minutes(15), - layers: [ KubectlLayer.getOrCreate(this, { version: '2.0.0-beta2' }) ], + layers: [ KubectlLayer.getOrCreate(this, { version: '2.0.0' }) ], memorySize: 256, }); From d992e95f4e04ad523cfeca1b95f6d6cebed6181d Mon Sep 17 00:00:00 2001 From: Pahud Date: Thu, 25 Jun 2020 23:59:40 +0800 Subject: [PATCH 2/7] support aws-lambda-layer-kubectl 2.0.0 --- packages/@aws-cdk/aws-eks/lib/helm-chart.ts | 7 + .../lib/kubectl-handler/helm/__init__.py | 43 ++- .../test/integ.eks-cluster.expected.json | 357 +++++++----------- .../aws-eks/test/integ.eks-cluster.ts | 19 +- .../@aws-cdk/aws-eks/test/test.helm-chart.ts | 12 + 5 files changed, 201 insertions(+), 237 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/lib/helm-chart.ts b/packages/@aws-cdk/aws-eks/lib/helm-chart.ts index 8d5b50d870151..2604fa08a4235 100644 --- a/packages/@aws-cdk/aws-eks/lib/helm-chart.ts +++ b/packages/@aws-cdk/aws-eks/lib/helm-chart.ts @@ -53,6 +53,12 @@ export interface HelmChartOptions { * @default Duration.minutes(5) */ readonly timeout?: Duration; + + /** + * create namespace if not exist + * @default False + */ + readonly createNamespace?: boolean; } /** @@ -104,6 +110,7 @@ export class HelmChart extends Construct { Values: (props.values ? stack.toJsonString(props.values) : undefined), Namespace: props.namespace ?? 'default', Repository: props.repository, + CreateNamespace: props.createNamespace ?? false, }, }); } diff --git a/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py b/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py index 57ea65a2fa3b7..2187dcb9e1d1a 100644 --- a/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py +++ b/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py @@ -12,6 +12,7 @@ outdir = os.environ.get('TEST_OUTDIR', '/tmp') kubeconfig = os.path.join(outdir, 'kubeconfig') + def helm_handler(event, context): logger.info(json.dumps(event)) @@ -20,22 +21,23 @@ def helm_handler(event, context): # resource properties cluster_name = props['ClusterName'] - role_arn = props['RoleArn'] - release = props['Release'] - chart = props['Chart'] - version = props.get('Version', None) - wait = props.get('Wait', False) - timeout = props.get('Timeout', None) - namespace = props.get('Namespace', None) - repository = props.get('Repository', None) - values_text = props.get('Values', None) + role_arn = props['RoleArn'] + release = props['Release'] + chart = props['Chart'] + version = props.get('Version', None) + wait = props.get('Wait', False) + timeout = props.get('Timeout', None) + namespace = props.get('Namespace', None) + create_namespace = props.get('CreateNamespace', None) + repository = props.get('Repository', None) + values_text = props.get('Values', None) # "log in" to the cluster - subprocess.check_call([ 'aws', 'eks', 'update-kubeconfig', - '--role-arn', role_arn, - '--name', cluster_name, - '--kubeconfig', kubeconfig - ]) + subprocess.check_call(['aws', 'eks', 'update-kubeconfig', + '--role-arn', role_arn, + '--name', cluster_name, + '--kubeconfig', kubeconfig + ]) # Write out the values to a file and include them with the install and upgrade values_file = None @@ -46,14 +48,17 @@ def helm_handler(event, context): f.write(json.dumps(values, indent=2)) if request_type == 'Create' or request_type == 'Update': - helm('upgrade', release, chart, repository, values_file, namespace, version, wait, timeout) + helm('upgrade', release, chart, repository, values_file, namespace, version, wait, timeout, create_namespace) elif request_type == "Delete": try: helm('uninstall', release, namespace=namespace, timeout=timeout) except Exception as e: logger.info("delete error: %s" % e) -def helm(verb, release, chart = None, repo = None, file = None, namespace = None, version = None, wait = False, timeout = None): + +def helm( + verb, release, chart=None, repo=None, file=None, namespace=None, version=None, wait=False, timeout=None, + create_namespace=None): import subprocess cmnd = ['helm', verb, release] @@ -61,6 +66,8 @@ def helm(verb, release, chart = None, repo = None, file = None, namespace = None cmnd.append(chart) if verb == 'upgrade': cmnd.append('--install') + if not create_namespace is None: + cmnd.append('--create-namespace') if not repo is None: cmnd.extend(['--repo', repo]) if not file is None: @@ -72,9 +79,11 @@ def helm(verb, release, chart = None, repo = None, file = None, namespace = None if wait: cmnd.append('--wait') if not timeout is None: - cmnd.extend(['--timeout', timeout]) + cmnd.extend(['--timeout', timeout]) cmnd.extend(['--kubeconfig', kubeconfig]) + logger.info(cmnd) + retry = 3 while retry > 0: try: diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json index 4278bee450139..43693f7643e65 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json @@ -28,7 +28,7 @@ } } }, - "ClusterDefaultVpcFA9F2722": { + "Vpc8378EB38": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16", @@ -38,17 +38,17 @@ "Tags": [ { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc" + "Value": "aws-cdk-eks-cluster-test/Vpc" } ] } }, - "ClusterDefaultVpcPublicSubnet1Subnet3BFE1BDA": { + "VpcPublicSubnet1Subnet5C2D37C4": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.0.0/19", "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "AvailabilityZone": "test-region-1a", "MapPublicIpOnLaunch": true, @@ -67,16 +67,16 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet1" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet1" } ] } }, - "ClusterDefaultVpcPublicSubnet1RouteTable1DCCDD98": { + "VpcPublicSubnet1RouteTable6C95E38E": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "Tags": [ { @@ -85,38 +85,38 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet1" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet1" } ] } }, - "ClusterDefaultVpcPublicSubnet1RouteTableAssociationAFBE6789": { + "VpcPublicSubnet1RouteTableAssociation97140677": { "Type": "AWS::EC2::SubnetRouteTableAssociation", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPublicSubnet1RouteTable1DCCDD98" + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" }, "SubnetId": { - "Ref": "ClusterDefaultVpcPublicSubnet1Subnet3BFE1BDA" + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" } } }, - "ClusterDefaultVpcPublicSubnet1DefaultRouteCF22EF6E": { + "VpcPublicSubnet1DefaultRoute3DA9E72A": { "Type": "AWS::EC2::Route", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPublicSubnet1RouteTable1DCCDD98" + "Ref": "VpcPublicSubnet1RouteTable6C95E38E" }, "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": { - "Ref": "ClusterDefaultVpcIGW756BE43E" + "Ref": "VpcIGWD7BA715C" } }, "DependsOn": [ - "ClusterDefaultVpcVPCGWC1D00388" + "VpcVPCGWBF912B6E" ] }, - "ClusterDefaultVpcPublicSubnet1EIP498E2BD2": { + "VpcPublicSubnet1EIPD7E02669": { "Type": "AWS::EC2::EIP", "Properties": { "Domain": "vpc", @@ -127,22 +127,22 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet1" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet1" } ] } }, - "ClusterDefaultVpcPublicSubnet1NATGateway6E21013E": { + "VpcPublicSubnet1NATGateway4D7517AA": { "Type": "AWS::EC2::NatGateway", "Properties": { "AllocationId": { "Fn::GetAtt": [ - "ClusterDefaultVpcPublicSubnet1EIP498E2BD2", + "VpcPublicSubnet1EIPD7E02669", "AllocationId" ] }, "SubnetId": { - "Ref": "ClusterDefaultVpcPublicSubnet1Subnet3BFE1BDA" + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" }, "Tags": [ { @@ -151,17 +151,17 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet1" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet1" } ] } }, - "ClusterDefaultVpcPublicSubnet2SubnetC4E9A966": { + "VpcPublicSubnet2Subnet691E08A3": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.32.0/19", "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "AvailabilityZone": "test-region-1b", "MapPublicIpOnLaunch": true, @@ -180,16 +180,16 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet2" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet2" } ] } }, - "ClusterDefaultVpcPublicSubnet2RouteTable6F1F5F47": { + "VpcPublicSubnet2RouteTable94F7E489": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "Tags": [ { @@ -198,83 +198,43 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet2" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet2" } ] } }, - "ClusterDefaultVpcPublicSubnet2RouteTableAssociationA8539C50": { + "VpcPublicSubnet2RouteTableAssociationDD5762D8": { "Type": "AWS::EC2::SubnetRouteTableAssociation", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPublicSubnet2RouteTable6F1F5F47" + "Ref": "VpcPublicSubnet2RouteTable94F7E489" }, "SubnetId": { - "Ref": "ClusterDefaultVpcPublicSubnet2SubnetC4E9A966" + "Ref": "VpcPublicSubnet2Subnet691E08A3" } } }, - "ClusterDefaultVpcPublicSubnet2DefaultRoute1FA8621E": { + "VpcPublicSubnet2DefaultRoute97F91067": { "Type": "AWS::EC2::Route", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPublicSubnet2RouteTable6F1F5F47" + "Ref": "VpcPublicSubnet2RouteTable94F7E489" }, "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": { - "Ref": "ClusterDefaultVpcIGW756BE43E" + "Ref": "VpcIGWD7BA715C" } }, "DependsOn": [ - "ClusterDefaultVpcVPCGWC1D00388" + "VpcVPCGWBF912B6E" ] }, - "ClusterDefaultVpcPublicSubnet2EIP265F4810": { - "Type": "AWS::EC2::EIP", - "Properties": { - "Domain": "vpc", - "Tags": [ - { - "Key": "kubernetes.io/role/elb", - "Value": "1" - }, - { - "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet2" - } - ] - } - }, - "ClusterDefaultVpcPublicSubnet2NATGateway4AF4B728": { - "Type": "AWS::EC2::NatGateway", - "Properties": { - "AllocationId": { - "Fn::GetAtt": [ - "ClusterDefaultVpcPublicSubnet2EIP265F4810", - "AllocationId" - ] - }, - "SubnetId": { - "Ref": "ClusterDefaultVpcPublicSubnet2SubnetC4E9A966" - }, - "Tags": [ - { - "Key": "kubernetes.io/role/elb", - "Value": "1" - }, - { - "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet2" - } - ] - } - }, - "ClusterDefaultVpcPublicSubnet3Subnet1A46184A": { + "VpcPublicSubnet3SubnetBE12F0B6": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.64.0/19", "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "AvailabilityZone": "test-region-1c", "MapPublicIpOnLaunch": true, @@ -293,16 +253,16 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet3" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet3" } ] } }, - "ClusterDefaultVpcPublicSubnet3RouteTableC81F99EF": { + "VpcPublicSubnet3RouteTable93458DBB": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "Tags": [ { @@ -311,83 +271,43 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet3" + "Value": "aws-cdk-eks-cluster-test/Vpc/PublicSubnet3" } ] } }, - "ClusterDefaultVpcPublicSubnet3RouteTableAssociation7C5D21CC": { + "VpcPublicSubnet3RouteTableAssociation1F1EDF02": { "Type": "AWS::EC2::SubnetRouteTableAssociation", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPublicSubnet3RouteTableC81F99EF" + "Ref": "VpcPublicSubnet3RouteTable93458DBB" }, "SubnetId": { - "Ref": "ClusterDefaultVpcPublicSubnet3Subnet1A46184A" + "Ref": "VpcPublicSubnet3SubnetBE12F0B6" } } }, - "ClusterDefaultVpcPublicSubnet3DefaultRouteB6080504": { + "VpcPublicSubnet3DefaultRoute4697774F": { "Type": "AWS::EC2::Route", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPublicSubnet3RouteTableC81F99EF" + "Ref": "VpcPublicSubnet3RouteTable93458DBB" }, "DestinationCidrBlock": "0.0.0.0/0", "GatewayId": { - "Ref": "ClusterDefaultVpcIGW756BE43E" + "Ref": "VpcIGWD7BA715C" } }, "DependsOn": [ - "ClusterDefaultVpcVPCGWC1D00388" + "VpcVPCGWBF912B6E" ] }, - "ClusterDefaultVpcPublicSubnet3EIP0CBF6D05": { - "Type": "AWS::EC2::EIP", - "Properties": { - "Domain": "vpc", - "Tags": [ - { - "Key": "kubernetes.io/role/elb", - "Value": "1" - }, - { - "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet3" - } - ] - } - }, - "ClusterDefaultVpcPublicSubnet3NATGatewayEF4BA49A": { - "Type": "AWS::EC2::NatGateway", - "Properties": { - "AllocationId": { - "Fn::GetAtt": [ - "ClusterDefaultVpcPublicSubnet3EIP0CBF6D05", - "AllocationId" - ] - }, - "SubnetId": { - "Ref": "ClusterDefaultVpcPublicSubnet3Subnet1A46184A" - }, - "Tags": [ - { - "Key": "kubernetes.io/role/elb", - "Value": "1" - }, - { - "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PublicSubnet3" - } - ] - } - }, - "ClusterDefaultVpcPrivateSubnet1Subnet03F39409": { + "VpcPrivateSubnet1Subnet536B997A": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.96.0/19", "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "AvailabilityZone": "test-region-1a", "MapPublicIpOnLaunch": false, @@ -406,16 +326,16 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PrivateSubnet1" + "Value": "aws-cdk-eks-cluster-test/Vpc/PrivateSubnet1" } ] } }, - "ClusterDefaultVpcPrivateSubnet1RouteTable7844020C": { + "VpcPrivateSubnet1RouteTableB2C5B500": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "Tags": [ { @@ -424,40 +344,40 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PrivateSubnet1" + "Value": "aws-cdk-eks-cluster-test/Vpc/PrivateSubnet1" } ] } }, - "ClusterDefaultVpcPrivateSubnet1RouteTableAssociationF8A67D95": { + "VpcPrivateSubnet1RouteTableAssociation70C59FA6": { "Type": "AWS::EC2::SubnetRouteTableAssociation", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPrivateSubnet1RouteTable7844020C" + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" }, "SubnetId": { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" } } }, - "ClusterDefaultVpcPrivateSubnet1DefaultRouteD624C8BD": { + "VpcPrivateSubnet1DefaultRouteBE02A9ED": { "Type": "AWS::EC2::Route", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPrivateSubnet1RouteTable7844020C" + "Ref": "VpcPrivateSubnet1RouteTableB2C5B500" }, "DestinationCidrBlock": "0.0.0.0/0", "NatGatewayId": { - "Ref": "ClusterDefaultVpcPublicSubnet1NATGateway6E21013E" + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" } } }, - "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7": { + "VpcPrivateSubnet2Subnet3788AAA1": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.128.0/19", "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "AvailabilityZone": "test-region-1b", "MapPublicIpOnLaunch": false, @@ -476,16 +396,16 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PrivateSubnet2" + "Value": "aws-cdk-eks-cluster-test/Vpc/PrivateSubnet2" } ] } }, - "ClusterDefaultVpcPrivateSubnet2RouteTable1F9A5298": { + "VpcPrivateSubnet2RouteTableA678073B": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "Tags": [ { @@ -494,40 +414,40 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PrivateSubnet2" + "Value": "aws-cdk-eks-cluster-test/Vpc/PrivateSubnet2" } ] } }, - "ClusterDefaultVpcPrivateSubnet2RouteTableAssociationE1240DF2": { + "VpcPrivateSubnet2RouteTableAssociationA89CAD56": { "Type": "AWS::EC2::SubnetRouteTableAssociation", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPrivateSubnet2RouteTable1F9A5298" + "Ref": "VpcPrivateSubnet2RouteTableA678073B" }, "SubnetId": { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" } } }, - "ClusterDefaultVpcPrivateSubnet2DefaultRouteAB55737C": { + "VpcPrivateSubnet2DefaultRoute060D2087": { "Type": "AWS::EC2::Route", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPrivateSubnet2RouteTable1F9A5298" + "Ref": "VpcPrivateSubnet2RouteTableA678073B" }, "DestinationCidrBlock": "0.0.0.0/0", "NatGatewayId": { - "Ref": "ClusterDefaultVpcPublicSubnet2NATGateway4AF4B728" + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" } } }, - "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839": { + "VpcPrivateSubnet3SubnetF258B56E": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": "10.0.160.0/19", "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "AvailabilityZone": "test-region-1c", "MapPublicIpOnLaunch": false, @@ -546,16 +466,16 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PrivateSubnet3" + "Value": "aws-cdk-eks-cluster-test/Vpc/PrivateSubnet3" } ] } }, - "ClusterDefaultVpcPrivateSubnet3RouteTableF71314D0": { + "VpcPrivateSubnet3RouteTableD98824C7": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "Tags": [ { @@ -564,53 +484,53 @@ }, { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc/PrivateSubnet3" + "Value": "aws-cdk-eks-cluster-test/Vpc/PrivateSubnet3" } ] } }, - "ClusterDefaultVpcPrivateSubnet3RouteTableAssociation3007DC36": { + "VpcPrivateSubnet3RouteTableAssociation16BDDC43": { "Type": "AWS::EC2::SubnetRouteTableAssociation", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPrivateSubnet3RouteTableF71314D0" + "Ref": "VpcPrivateSubnet3RouteTableD98824C7" }, "SubnetId": { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } } }, - "ClusterDefaultVpcPrivateSubnet3DefaultRoute932EDFF0": { + "VpcPrivateSubnet3DefaultRoute94B74F0D": { "Type": "AWS::EC2::Route", "Properties": { "RouteTableId": { - "Ref": "ClusterDefaultVpcPrivateSubnet3RouteTableF71314D0" + "Ref": "VpcPrivateSubnet3RouteTableD98824C7" }, "DestinationCidrBlock": "0.0.0.0/0", "NatGatewayId": { - "Ref": "ClusterDefaultVpcPublicSubnet3NATGatewayEF4BA49A" + "Ref": "VpcPublicSubnet1NATGateway4D7517AA" } } }, - "ClusterDefaultVpcIGW756BE43E": { + "VpcIGWD7BA715C": { "Type": "AWS::EC2::InternetGateway", "Properties": { "Tags": [ { "Key": "Name", - "Value": "aws-cdk-eks-cluster-test/Cluster/DefaultVpc" + "Value": "aws-cdk-eks-cluster-test/Vpc" } ] } }, - "ClusterDefaultVpcVPCGWC1D00388": { + "VpcVPCGWBF912B6E": { "Type": "AWS::EC2::VPCGatewayAttachment", "Properties": { "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" }, "InternetGatewayId": { - "Ref": "ClusterDefaultVpcIGW756BE43E" + "Ref": "VpcIGWD7BA715C" } } }, @@ -657,7 +577,7 @@ } ], "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" } } }, @@ -873,22 +793,22 @@ ], "subnetIds": [ { - "Ref": "ClusterDefaultVpcPublicSubnet1Subnet3BFE1BDA" + "Ref": "VpcPublicSubnet1Subnet5C2D37C4" }, { - "Ref": "ClusterDefaultVpcPublicSubnet2SubnetC4E9A966" + "Ref": "VpcPublicSubnet2Subnet691E08A3" }, { - "Ref": "ClusterDefaultVpcPublicSubnet3Subnet1A46184A" + "Ref": "VpcPublicSubnet3SubnetBE12F0B6" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ] } @@ -1059,13 +979,13 @@ }, "Subnets": [ { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ], "ForceUpdateEnabled": true, @@ -1177,7 +1097,7 @@ } ], "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" } } }, @@ -1406,13 +1326,13 @@ ], "VPCZoneIdentifier": [ { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ] }, @@ -1465,7 +1385,7 @@ } ], "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" } } }, @@ -1708,13 +1628,13 @@ ], "VPCZoneIdentifier": [ { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ] }, @@ -1767,7 +1687,7 @@ } ], "VpcId": { - "Ref": "ClusterDefaultVpcFA9F2722" + "Ref": "Vpc8378EB38" } } }, @@ -1997,13 +1917,13 @@ ], "VPCZoneIdentifier": [ { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ] }, @@ -2048,7 +1968,8 @@ "Wait": false, "Values": "{\"nodeSelector.lifecycle\":\"Ec2Spot\"}", "Namespace": "kube-system", - "Repository": "https://aws.github.io/eks-charts" + "Repository": "https://aws.github.io/eks-charts", + "CreateNamespace": false }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -2132,13 +2053,13 @@ }, "Subnets": [ { - "Ref": "ClusterDefaultVpcPrivateSubnet1Subnet03F39409" + "Ref": "VpcPrivateSubnet1Subnet536B997A" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet2SubnetA526AEA7" + "Ref": "VpcPrivateSubnet2Subnet3788AAA1" }, { - "Ref": "ClusterDefaultVpcPrivateSubnet3SubnetB64BC839" + "Ref": "VpcPrivateSubnet3SubnetF258B56E" } ], "ForceUpdateEnabled": true, @@ -2196,8 +2117,9 @@ "Release": "awscdkeksclustertestclusterchartdashboard1f3d83fe", "Chart": "kubernetes-dashboard", "Wait": false, - "Namespace": "default", - "Repository": "https://kubernetes-charts.storage.googleapis.com" + "Namespace": "custom-namespace", + "Repository": "https://kubernetes.github.io/dashboard/", + "CreateNamespace": true }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -2224,7 +2146,8 @@ "Chart": "nginx-ingress", "Wait": false, "Namespace": "kube-system", - "Repository": "https://helm.nginx.com/stable" + "Repository": "https://helm.nginx.com/stable", + "CreateNamespace": false }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -2427,7 +2350,7 @@ }, "/", { - "Ref": "AssetParametersc70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649eS3Bucket5515EF97" + "Ref": "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3BucketA8528B43" }, "/", { @@ -2437,7 +2360,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersc70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649eS3VersionKeyF1C97F67" + "Ref": "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3VersionKey2450F43A" } ] } @@ -2450,7 +2373,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersc70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649eS3VersionKeyF1C97F67" + "Ref": "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3VersionKey2450F43A" } ] } @@ -2460,11 +2383,11 @@ ] }, "Parameters": { - "referencetoawscdkeksclustertestAssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3Bucket973804E9Ref": { - "Ref": "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3BucketC1533EC8" + "referencetoawscdkeksclustertestAssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3BucketE80D71E9Ref": { + "Ref": "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3BucketB1FD97CE" }, - "referencetoawscdkeksclustertestAssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3VersionKey2F733777Ref": { - "Ref": "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3VersionKey2C834492" + "referencetoawscdkeksclustertestAssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3VersionKey7747419FRef": { + "Ref": "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3VersionKey33AB157D" }, "referencetoawscdkeksclustertestAssetParameters5d5280180ad87e8a1c2a08423cb5b2dae41281832799cd51db5eff913091ade6S3Bucket8FECC379Ref": { "Ref": "AssetParameters5d5280180ad87e8a1c2a08423cb5b2dae41281832799cd51db5eff913091ade6S3Bucket03CDDE18" @@ -2765,17 +2688,17 @@ "Type": "String", "Description": "Artifact hash for asset \"5d5280180ad87e8a1c2a08423cb5b2dae41281832799cd51db5eff913091ade6\"" }, - "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3BucketC1533EC8": { + "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3BucketB1FD97CE": { "Type": "String", - "Description": "S3 bucket for asset \"ca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9\"" + "Description": "S3 bucket for asset \"b54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51\"" }, - "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3VersionKey2C834492": { + "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3VersionKey33AB157D": { "Type": "String", - "Description": "S3 key for asset version \"ca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9\"" + "Description": "S3 key for asset version \"b54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51\"" }, - "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9ArtifactHash51A7CDC3": { + "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51ArtifactHashB38E0A50": { "Type": "String", - "Description": "Artifact hash for asset \"ca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9\"" + "Description": "Artifact hash for asset \"b54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51\"" }, "AssetParameters3b28f4ee261986c158a160900e3042a61238f644fe502199d60bcea592128086S3Bucket57C0655B": { "Type": "String", @@ -2813,17 +2736,17 @@ "Type": "String", "Description": "Artifact hash for asset \"7255958d303a278986617e8d7ce027c96cd00a70fb8f1ca02c1e0da94a571896\"" }, - "AssetParametersc70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649eS3Bucket5515EF97": { + "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3BucketA8528B43": { "Type": "String", - "Description": "S3 bucket for asset \"c70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649e\"" + "Description": "S3 bucket for asset \"f837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9\"" }, - "AssetParametersc70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649eS3VersionKeyF1C97F67": { + "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3VersionKey2450F43A": { "Type": "String", - "Description": "S3 key for asset version \"c70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649e\"" + "Description": "S3 key for asset version \"f837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9\"" }, - "AssetParametersc70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649eArtifactHash88EDABBF": { + "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9ArtifactHashACBD17D4": { "Type": "String", - "Description": "Artifact hash for asset \"c70286a3d87ecc95aea2ffe7d7723ba303222280fb87f0128b3e83dcdd1d649e\"" + "Description": "Artifact hash for asset \"f837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9\"" }, "SsmParameterValueawsserviceeksoptimizedami116amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { "Type": "AWS::SSM::Parameter::Value", @@ -2834,4 +2757,4 @@ "Default": "/aws/service/bottlerocket/aws-k8s-1.15/x86_64/latest/image_id" } } -} +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts index ff6d62e74c20f..e5e08d0b7d1cf 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts @@ -14,8 +14,11 @@ class EksClusterStack extends TestStack { assumedBy: new iam.AccountRootPrincipal(), }); + const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 3, natGateways: 1}) + // create the cluster with a default nodegroup capacity const cluster = new eks.Cluster(this, 'Cluster', { + vpc, mastersRole, defaultCapacity: 2, version: '1.16', @@ -62,9 +65,19 @@ class EksClusterStack extends TestStack { // // apply a kubernetes manifest cluster.addResource('HelloApp', ...hello.resources); - // // add two Helm charts to the cluster. This will be the Kubernetes dashboard and the Nginx Ingress Controller - cluster.addChart('dashboard', { chart: 'kubernetes-dashboard', repository: 'https://kubernetes-charts.storage.googleapis.com' }); - cluster.addChart('nginx-ingress', { chart: 'nginx-ingress', repository: 'https://helm.nginx.com/stable', namespace: 'kube-system' }); + // add two Helm charts to the cluster. This will be the Kubernetes dashboard and the Nginx Ingress Controller + cluster.addChart('dashboard', { + chart: 'kubernetes-dashboard', + repository: 'https://kubernetes.github.io/dashboard/', + namespace: 'custom-namespace', + createNamespace: true, + }); + + cluster.addChart('nginx-ingress', { + chart: 'nginx-ingress', + repository: 'https://helm.nginx.com/stable', + namespace: 'kube-system' + }); // add a service account connected to a IAM role cluster.addServiceAccount('MyServiceAccount'); diff --git a/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts b/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts index 7fed84a2b6185..82485742a4d37 100644 --- a/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts +++ b/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts @@ -52,6 +52,18 @@ export = { expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { Values: '{\"foo\":123}' })); test.done(); }, + 'should support create namespaces'(test: Test) { + // GIVEN + const { stack, cluster } = testFixtureCluster(); + + // WHEN + new eks.HelmChart(stack, 'MyChart', { cluster, chart: 'chart', createNamespace: true }); + + // THEN + expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { CreateNamespace: true })); + test.done(); + }, + 'should support waiting until everything is completed before marking release as successful'(test: Test) { // GIVEN const { stack, cluster } = testFixtureCluster(); From d70a9e7ee46a12f3585af7f38afed8b0145071d2 Mon Sep 17 00:00:00 2001 From: Pahud Date: Fri, 26 Jun 2020 00:25:11 +0800 Subject: [PATCH 3/7] minor fix --- packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts index e5e08d0b7d1cf..64378e2bc8a93 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts @@ -76,7 +76,7 @@ class EksClusterStack extends TestStack { cluster.addChart('nginx-ingress', { chart: 'nginx-ingress', repository: 'https://helm.nginx.com/stable', - namespace: 'kube-system' + namespace: 'kube-system', }); // add a service account connected to a IAM role From fe8ecaaa8c8bbfd6ee900afaaae5a212e7ead044 Mon Sep 17 00:00:00 2001 From: Pahud Date: Fri, 26 Jun 2020 00:28:24 +0800 Subject: [PATCH 4/7] minor fix --- packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts | 12 ++++++------ packages/@aws-cdk/aws-eks/test/test.helm-chart.ts | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts index 64378e2bc8a93..9328a56eefa9b 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts @@ -14,7 +14,7 @@ class EksClusterStack extends TestStack { assumedBy: new iam.AccountRootPrincipal(), }); - const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 3, natGateways: 1}) + const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 3, natGateways: 1}); // create the cluster with a default nodegroup capacity const cluster = new eks.Cluster(this, 'Cluster', { @@ -66,16 +66,16 @@ class EksClusterStack extends TestStack { cluster.addResource('HelloApp', ...hello.resources); // add two Helm charts to the cluster. This will be the Kubernetes dashboard and the Nginx Ingress Controller - cluster.addChart('dashboard', { - chart: 'kubernetes-dashboard', + cluster.addChart('dashboard', { + chart: 'kubernetes-dashboard', repository: 'https://kubernetes.github.io/dashboard/', namespace: 'custom-namespace', createNamespace: true, }); - cluster.addChart('nginx-ingress', { - chart: 'nginx-ingress', - repository: 'https://helm.nginx.com/stable', + cluster.addChart('nginx-ingress', { + chart: 'nginx-ingress', + repository: 'https://helm.nginx.com/stable', namespace: 'kube-system', }); diff --git a/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts b/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts index 82485742a4d37..a0c242ca4bf8d 100644 --- a/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts +++ b/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts @@ -63,7 +63,6 @@ export = { expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { CreateNamespace: true })); test.done(); }, - 'should support waiting until everything is completed before marking release as successful'(test: Test) { // GIVEN const { stack, cluster } = testFixtureCluster(); From b92defc2811af2e4ff15747e723bf2fc3d7fe773 Mon Sep 17 00:00:00 2001 From: Pahud Date: Sun, 28 Jun 2020 23:15:59 +0800 Subject: [PATCH 5/7] fix --- packages/@aws-cdk/aws-eks/lib/helm-chart.ts | 7 --- .../lib/kubectl-handler/helm/__init__.py | 43 ++++++++----------- .../aws-eks/test/integ.eks-cluster.ts | 5 ++- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/lib/helm-chart.ts b/packages/@aws-cdk/aws-eks/lib/helm-chart.ts index 2604fa08a4235..8d5b50d870151 100644 --- a/packages/@aws-cdk/aws-eks/lib/helm-chart.ts +++ b/packages/@aws-cdk/aws-eks/lib/helm-chart.ts @@ -53,12 +53,6 @@ export interface HelmChartOptions { * @default Duration.minutes(5) */ readonly timeout?: Duration; - - /** - * create namespace if not exist - * @default False - */ - readonly createNamespace?: boolean; } /** @@ -110,7 +104,6 @@ export class HelmChart extends Construct { Values: (props.values ? stack.toJsonString(props.values) : undefined), Namespace: props.namespace ?? 'default', Repository: props.repository, - CreateNamespace: props.createNamespace ?? false, }, }); } diff --git a/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py b/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py index 2187dcb9e1d1a..57ea65a2fa3b7 100644 --- a/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py +++ b/packages/@aws-cdk/aws-eks/lib/kubectl-handler/helm/__init__.py @@ -12,7 +12,6 @@ outdir = os.environ.get('TEST_OUTDIR', '/tmp') kubeconfig = os.path.join(outdir, 'kubeconfig') - def helm_handler(event, context): logger.info(json.dumps(event)) @@ -21,23 +20,22 @@ def helm_handler(event, context): # resource properties cluster_name = props['ClusterName'] - role_arn = props['RoleArn'] - release = props['Release'] - chart = props['Chart'] - version = props.get('Version', None) - wait = props.get('Wait', False) - timeout = props.get('Timeout', None) - namespace = props.get('Namespace', None) - create_namespace = props.get('CreateNamespace', None) - repository = props.get('Repository', None) - values_text = props.get('Values', None) + role_arn = props['RoleArn'] + release = props['Release'] + chart = props['Chart'] + version = props.get('Version', None) + wait = props.get('Wait', False) + timeout = props.get('Timeout', None) + namespace = props.get('Namespace', None) + repository = props.get('Repository', None) + values_text = props.get('Values', None) # "log in" to the cluster - subprocess.check_call(['aws', 'eks', 'update-kubeconfig', - '--role-arn', role_arn, - '--name', cluster_name, - '--kubeconfig', kubeconfig - ]) + subprocess.check_call([ 'aws', 'eks', 'update-kubeconfig', + '--role-arn', role_arn, + '--name', cluster_name, + '--kubeconfig', kubeconfig + ]) # Write out the values to a file and include them with the install and upgrade values_file = None @@ -48,17 +46,14 @@ def helm_handler(event, context): f.write(json.dumps(values, indent=2)) if request_type == 'Create' or request_type == 'Update': - helm('upgrade', release, chart, repository, values_file, namespace, version, wait, timeout, create_namespace) + helm('upgrade', release, chart, repository, values_file, namespace, version, wait, timeout) elif request_type == "Delete": try: helm('uninstall', release, namespace=namespace, timeout=timeout) except Exception as e: logger.info("delete error: %s" % e) - -def helm( - verb, release, chart=None, repo=None, file=None, namespace=None, version=None, wait=False, timeout=None, - create_namespace=None): +def helm(verb, release, chart = None, repo = None, file = None, namespace = None, version = None, wait = False, timeout = None): import subprocess cmnd = ['helm', verb, release] @@ -66,8 +61,6 @@ def helm( cmnd.append(chart) if verb == 'upgrade': cmnd.append('--install') - if not create_namespace is None: - cmnd.append('--create-namespace') if not repo is None: cmnd.extend(['--repo', repo]) if not file is None: @@ -79,11 +72,9 @@ def helm( if wait: cmnd.append('--wait') if not timeout is None: - cmnd.extend(['--timeout', timeout]) + cmnd.extend(['--timeout', timeout]) cmnd.extend(['--kubeconfig', kubeconfig]) - logger.info(cmnd) - retry = 3 while retry > 0: try: diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts index 9328a56eefa9b..aec2930d4f188 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts @@ -14,7 +14,8 @@ class EksClusterStack extends TestStack { assumedBy: new iam.AccountRootPrincipal(), }); - const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 3, natGateways: 1}); + // just need one nat gateway to simplify the test + const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 3, natGateways: 1 }); // create the cluster with a default nodegroup capacity const cluster = new eks.Cluster(this, 'Cluster', { @@ -24,7 +25,7 @@ class EksClusterStack extends TestStack { version: '1.16', }); - // // fargate profile for resources in the "default" namespace + // fargate profile for resources in the "default" namespace cluster.addFargateProfile('default', { selectors: [{ namespace: 'default' }], }); From bf31cd1bb3284bff58f4878a410eede87a4b8ce0 Mon Sep 17 00:00:00 2001 From: Pahud Date: Sun, 28 Jun 2020 23:19:25 +0800 Subject: [PATCH 6/7] fix --- packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts | 1 - packages/@aws-cdk/aws-eks/test/test.helm-chart.ts | 11 ----------- 2 files changed, 12 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts index aec2930d4f188..5fbeb4a1e1856 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.ts @@ -71,7 +71,6 @@ class EksClusterStack extends TestStack { chart: 'kubernetes-dashboard', repository: 'https://kubernetes.github.io/dashboard/', namespace: 'custom-namespace', - createNamespace: true, }); cluster.addChart('nginx-ingress', { diff --git a/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts b/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts index a0c242ca4bf8d..7fed84a2b6185 100644 --- a/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts +++ b/packages/@aws-cdk/aws-eks/test/test.helm-chart.ts @@ -52,17 +52,6 @@ export = { expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { Values: '{\"foo\":123}' })); test.done(); }, - 'should support create namespaces'(test: Test) { - // GIVEN - const { stack, cluster } = testFixtureCluster(); - - // WHEN - new eks.HelmChart(stack, 'MyChart', { cluster, chart: 'chart', createNamespace: true }); - - // THEN - expect(stack).to(haveResource(eks.HelmChart.RESOURCE_TYPE, { CreateNamespace: true })); - test.done(); - }, 'should support waiting until everything is completed before marking release as successful'(test: Test) { // GIVEN const { stack, cluster } = testFixtureCluster(); From dbfeaf5070d8e84aa61ce45e24b9df6afa835ecf Mon Sep 17 00:00:00 2001 From: Pahud Date: Mon, 29 Jun 2020 20:29:55 +0800 Subject: [PATCH 7/7] update integ --- .../test/integ.eks-cluster.expected.json | 49 +++++++++---------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json index 92eee9ca9d90c..dd43e4cf0204d 100644 --- a/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json +++ b/packages/@aws-cdk/aws-eks/test/integ.eks-cluster.expected.json @@ -1996,8 +1996,7 @@ "Wait": false, "Values": "{\"nodeSelector.lifecycle\":\"Ec2Spot\"}", "Namespace": "kube-system", - "Repository": "https://aws.github.io/eks-charts", - "CreateNamespace": false + "Repository": "https://aws.github.io/eks-charts" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -2456,9 +2455,8 @@ "Release": "awscdkeksclustertestclusterchartdashboard1f3d83fe", "Chart": "kubernetes-dashboard", "Wait": false, - "Namespace": "custom-namespace", - "Repository": "https://kubernetes.github.io/dashboard/", - "CreateNamespace": true + "Namespace": "default", + "Repository": "https://kubernetes.github.io/dashboard/" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -2486,8 +2484,7 @@ "Wait": true, "Timeout": "900s", "Namespace": "kube-system", - "Repository": "https://helm.nginx.com/stable", - "CreateNamespace": false + "Repository": "https://helm.nginx.com/stable" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -2690,7 +2687,7 @@ }, "/", { - "Ref": "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3BucketA8528B43" + "Ref": "AssetParameters5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042S3BucketAE64A22C" }, "/", { @@ -2700,7 +2697,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3VersionKey2450F43A" + "Ref": "AssetParameters5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042S3VersionKeyAFF70CF1" } ] } @@ -2713,7 +2710,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3VersionKey2450F43A" + "Ref": "AssetParameters5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042S3VersionKeyAFF70CF1" } ] } @@ -2723,11 +2720,11 @@ ] }, "Parameters": { - "referencetoawscdkeksclustertestAssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3BucketE80D71E9Ref": { - "Ref": "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3BucketB1FD97CE" + "referencetoawscdkeksclustertestAssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3Bucket973804E9Ref": { + "Ref": "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3BucketC1533EC8" }, - "referencetoawscdkeksclustertestAssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3VersionKey7747419FRef": { - "Ref": "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3VersionKey33AB157D" + "referencetoawscdkeksclustertestAssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3VersionKey2F733777Ref": { + "Ref": "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3VersionKey2C834492" }, "referencetoawscdkeksclustertestAssetParameters5d5280180ad87e8a1c2a08423cb5b2dae41281832799cd51db5eff913091ade6S3Bucket8FECC379Ref": { "Ref": "AssetParameters5d5280180ad87e8a1c2a08423cb5b2dae41281832799cd51db5eff913091ade6S3Bucket03CDDE18" @@ -3028,17 +3025,17 @@ "Type": "String", "Description": "Artifact hash for asset \"5d5280180ad87e8a1c2a08423cb5b2dae41281832799cd51db5eff913091ade6\"" }, - "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3BucketB1FD97CE": { + "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3BucketC1533EC8": { "Type": "String", - "Description": "S3 bucket for asset \"b54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51\"" + "Description": "S3 bucket for asset \"ca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9\"" }, - "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51S3VersionKey33AB157D": { + "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9S3VersionKey2C834492": { "Type": "String", - "Description": "S3 key for asset version \"b54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51\"" + "Description": "S3 key for asset version \"ca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9\"" }, - "AssetParametersb54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51ArtifactHashB38E0A50": { + "AssetParametersca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9ArtifactHash51A7CDC3": { "Type": "String", - "Description": "Artifact hash for asset \"b54ac9cda210d3cfd40fe92584a1cd03966d6b4164ae339a9d44b6d79f9c6c51\"" + "Description": "Artifact hash for asset \"ca6f286e0d135e22cfefc133659e2f2fe139a4b46b8eef5b8e197606625c9af9\"" }, "AssetParameters3b28f4ee261986c158a160900e3042a61238f644fe502199d60bcea592128086S3Bucket57C0655B": { "Type": "String", @@ -3076,17 +3073,17 @@ "Type": "String", "Description": "Artifact hash for asset \"7255958d303a278986617e8d7ce027c96cd00a70fb8f1ca02c1e0da94a571896\"" }, - "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3BucketA8528B43": { + "AssetParameters5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042S3BucketAE64A22C": { "Type": "String", - "Description": "S3 bucket for asset \"f837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9\"" + "Description": "S3 bucket for asset \"5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042\"" }, - "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9S3VersionKey2450F43A": { + "AssetParameters5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042S3VersionKeyAFF70CF1": { "Type": "String", - "Description": "S3 key for asset version \"f837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9\"" + "Description": "S3 key for asset version \"5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042\"" }, - "AssetParametersf837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9ArtifactHashACBD17D4": { + "AssetParameters5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042ArtifactHashD8735DDD": { "Type": "String", - "Description": "Artifact hash for asset \"f837a41dc78d3a29f03c0d4e6ff5d045176bf2ef8b5c015aadc2e87996bcc2b9\"" + "Description": "Artifact hash for asset \"5b580ce3f53b1ee1551ac2e759433f10ef9a6a312bf7a501a0753fddcc8a3042\"" }, "SsmParameterValueawsserviceeksoptimizedami116amazonlinux2recommendedimageidC96584B6F00A464EAD1953AFF4B05118Parameter": { "Type": "AWS::SSM::Parameter::Value",