All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cloudshift.awscdk.dsl.services.eks._eks.kt Maven / Gradle / Ivy

There is a newer version: 0.7.0
Show newest version
@file:Suppress("RedundantVisibilityModifier","RedundantUnitReturnType","RemoveRedundantQualifierName","unused","UnusedImport","ClassName","REDUNDANT_PROJECTION","DEPRECATION")

package cloudshift.awscdk.dsl.services.eks

import kotlin.String
import kotlin.Unit
import software.amazon.awscdk.services.eks.AlbController
import software.amazon.awscdk.services.eks.AlbControllerOptions
import software.amazon.awscdk.services.eks.AlbControllerProps
import software.amazon.awscdk.services.eks.AutoScalingGroupCapacityOptions
import software.amazon.awscdk.services.eks.AutoScalingGroupOptions
import software.amazon.awscdk.services.eks.AwsAuth
import software.amazon.awscdk.services.eks.AwsAuthMapping
import software.amazon.awscdk.services.eks.AwsAuthProps
import software.amazon.awscdk.services.eks.BootstrapOptions
import software.amazon.awscdk.services.eks.CfnAddon
import software.amazon.awscdk.services.eks.CfnAddonProps
import software.amazon.awscdk.services.eks.CfnCluster
import software.amazon.awscdk.services.eks.CfnClusterProps
import software.amazon.awscdk.services.eks.CfnFargateProfile
import software.amazon.awscdk.services.eks.CfnFargateProfileProps
import software.amazon.awscdk.services.eks.CfnIdentityProviderConfig
import software.amazon.awscdk.services.eks.CfnIdentityProviderConfigProps
import software.amazon.awscdk.services.eks.CfnNodegroup
import software.amazon.awscdk.services.eks.CfnNodegroupProps
import software.amazon.awscdk.services.eks.Cluster
import software.amazon.awscdk.services.eks.ClusterAttributes
import software.amazon.awscdk.services.eks.ClusterOptions
import software.amazon.awscdk.services.eks.ClusterProps
import software.amazon.awscdk.services.eks.CommonClusterOptions
import software.amazon.awscdk.services.eks.EksOptimizedImage
import software.amazon.awscdk.services.eks.EksOptimizedImageProps
import software.amazon.awscdk.services.eks.FargateCluster
import software.amazon.awscdk.services.eks.FargateClusterProps
import software.amazon.awscdk.services.eks.FargateProfile
import software.amazon.awscdk.services.eks.FargateProfileOptions
import software.amazon.awscdk.services.eks.FargateProfileProps
import software.amazon.awscdk.services.eks.HelmChart
import software.amazon.awscdk.services.eks.HelmChartOptions
import software.amazon.awscdk.services.eks.HelmChartProps
import software.amazon.awscdk.services.eks.IngressLoadBalancerAddressOptions
import software.amazon.awscdk.services.eks.KubectlProvider
import software.amazon.awscdk.services.eks.KubectlProviderAttributes
import software.amazon.awscdk.services.eks.KubectlProviderProps
import software.amazon.awscdk.services.eks.KubernetesManifest
import software.amazon.awscdk.services.eks.KubernetesManifestOptions
import software.amazon.awscdk.services.eks.KubernetesManifestProps
import software.amazon.awscdk.services.eks.KubernetesObjectValue
import software.amazon.awscdk.services.eks.KubernetesObjectValueProps
import software.amazon.awscdk.services.eks.KubernetesPatch
import software.amazon.awscdk.services.eks.KubernetesPatchProps
import software.amazon.awscdk.services.eks.LaunchTemplateSpec
import software.amazon.awscdk.services.eks.Nodegroup
import software.amazon.awscdk.services.eks.NodegroupOptions
import software.amazon.awscdk.services.eks.NodegroupProps
import software.amazon.awscdk.services.eks.NodegroupRemoteAccess
import software.amazon.awscdk.services.eks.OpenIdConnectProvider
import software.amazon.awscdk.services.eks.OpenIdConnectProviderProps
import software.amazon.awscdk.services.eks.Selector
import software.amazon.awscdk.services.eks.ServiceAccount
import software.amazon.awscdk.services.eks.ServiceAccountOptions
import software.amazon.awscdk.services.eks.ServiceAccountProps
import software.amazon.awscdk.services.eks.ServiceLoadBalancerAddressOptions
import software.amazon.awscdk.services.eks.TaintSpec
import software.constructs.Construct

public object eks {
  /**
   * Construct for installing the AWS ALB Contoller on EKS clusters.
   *
   * Use the factory functions `get` and `getOrCreate` to obtain/create instances of this
   * controller.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * AlbControllerVersion albControllerVersion;
   * Cluster cluster;
   * Object policy;
   * AlbController albController = AlbController.Builder.create(this, "MyAlbController")
   * .cluster(cluster)
   * .version(albControllerVersion)
   * // the properties below are optional
   * .policy(policy)
   * .repository("repository")
   * .build();
   * ```
   *
   * [Documentation](https://kubernetes-sigs.github.io/aws-load-balancer-controller)
   */
  public inline fun albController(
    scope: Construct,
    id: String,
    block: AlbControllerDsl.() -> Unit = {},
  ): AlbController {
    val builder = AlbControllerDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for `AlbController`.
   *
   * Example:
   *
   * ```
   * Cluster.Builder.create(this, "HelloEKS")
   * .version(KubernetesVersion.V1_21)
   * .albController(AlbControllerOptions.builder()
   * .version(AlbControllerVersion.V2_4_1)
   * .build())
   * .build();
   * ```
   */
  public inline fun albControllerOptions(block: AlbControllerOptionsDsl.() -> Unit = {}):
      AlbControllerOptions {
    val builder = AlbControllerOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for `AlbController`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * AlbControllerVersion albControllerVersion;
   * Cluster cluster;
   * Object policy;
   * AlbControllerProps albControllerProps = AlbControllerProps.builder()
   * .cluster(cluster)
   * .version(albControllerVersion)
   * // the properties below are optional
   * .policy(policy)
   * .repository("repository")
   * .build();
   * ```
   */
  public inline fun albControllerProps(block: AlbControllerPropsDsl.() -> Unit = {}):
      AlbControllerProps {
    val builder = AlbControllerPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for adding worker nodes.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * cluster.addAutoScalingGroupCapacity("BottlerocketNodes",
   * AutoScalingGroupCapacityOptions.builder()
   * .instanceType(new InstanceType("t3.small"))
   * .minCapacity(2)
   * .machineImageType(MachineImageType.BOTTLEROCKET)
   * .build());
   * ```
   */
  public inline
      fun autoScalingGroupCapacityOptions(block: AutoScalingGroupCapacityOptionsDsl.() -> Unit =
      {}): AutoScalingGroupCapacityOptions {
    val builder = AutoScalingGroupCapacityOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for adding an AutoScalingGroup as capacity.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * AutoScalingGroup asg;
   * cluster.connectAutoScalingGroupCapacity(asg, AutoScalingGroupOptions.builder().build());
   * ```
   */
  public inline fun autoScalingGroupOptions(block: AutoScalingGroupOptionsDsl.() -> Unit = {}):
      AutoScalingGroupOptions {
    val builder = AutoScalingGroupOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Manages mapping between IAM users and roles to Kubernetes RBAC configuration.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * Cluster cluster;
   * AwsAuth awsAuth = AwsAuth.Builder.create(this, "MyAwsAuth")
   * .cluster(cluster)
   * .build();
   * ```
   *
   * [Documentation](https://docs.aws.amazon.com/en_us/eks/latest/userguide/add-user-role.html)
   */
  public inline fun awsAuth(
    scope: Construct,
    id: String,
    block: AwsAuthDsl.() -> Unit = {},
  ): AwsAuth {
    val builder = AwsAuthDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * AwsAuth mapping.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * User adminUser = new User(this, "Admin");
   * cluster.awsAuth.addUserMapping(adminUser,
   * AwsAuthMapping.builder().groups(List.of("system:masters")).build());
   * ```
   */
  public inline fun awsAuthMapping(block: AwsAuthMappingDsl.() -> Unit = {}): AwsAuthMapping {
    val builder = AwsAuthMappingDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Configuration props for the AwsAuth construct.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * Cluster cluster;
   * AwsAuthProps awsAuthProps = AwsAuthProps.builder()
   * .cluster(cluster)
   * .build();
   * ```
   */
  public inline fun awsAuthProps(block: AwsAuthPropsDsl.() -> Unit = {}): AwsAuthProps {
    val builder = AwsAuthPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * EKS node bootstrapping options.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * cluster.addAutoScalingGroupCapacity("spot", AutoScalingGroupCapacityOptions.builder()
   * .instanceType(new InstanceType("t3.large"))
   * .minCapacity(2)
   * .bootstrapOptions(BootstrapOptions.builder()
   * .kubeletExtraArgs("--node-labels foo=bar,goo=far")
   * .awsApiRetryAttempts(5)
   * .build())
   * .build());
   * ```
   */
  public inline fun bootstrapOptions(block: BootstrapOptionsDsl.() -> Unit = {}): BootstrapOptions {
    val builder = BootstrapOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Creates an Amazon EKS add-on.
   *
   * Amazon EKS add-ons help to automate the provisioning and lifecycle management of common
   * operational software for Amazon EKS clusters. For more information, see [Amazon EKS
   * add-ons](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html) in the *Amazon EKS
   * User Guide* .
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnAddon cfnAddon = CfnAddon.Builder.create(this, "MyCfnAddon")
   * .addonName("addonName")
   * .clusterName("clusterName")
   * // the properties below are optional
   * .addonVersion("addonVersion")
   * .configurationValues("configurationValues")
   * .preserveOnDelete(false)
   * .resolveConflicts("resolveConflicts")
   * .serviceAccountRoleArn("serviceAccountRoleArn")
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-addon.html)
   */
  public inline fun cfnAddon(
    scope: Construct,
    id: String,
    block: CfnAddonDsl.() -> Unit = {},
  ): CfnAddon {
    val builder = CfnAddonDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for defining a `CfnAddon`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnAddonProps cfnAddonProps = CfnAddonProps.builder()
   * .addonName("addonName")
   * .clusterName("clusterName")
   * // the properties below are optional
   * .addonVersion("addonVersion")
   * .configurationValues("configurationValues")
   * .preserveOnDelete(false)
   * .resolveConflicts("resolveConflicts")
   * .serviceAccountRoleArn("serviceAccountRoleArn")
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-addon.html)
   */
  public inline fun cfnAddonProps(block: CfnAddonPropsDsl.() -> Unit = {}): CfnAddonProps {
    val builder = CfnAddonPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Creates an Amazon EKS control plane.
   *
   * The Amazon EKS control plane consists of control plane instances that run the Kubernetes
   * software, such as `etcd` and the API server. The control plane runs in an account managed by AWS ,
   * and the Kubernetes API is exposed by the Amazon EKS API server endpoint. Each Amazon EKS cluster
   * control plane is single tenant and unique. It runs on its own set of Amazon EC2 instances.
   *
   * The cluster control plane is provisioned across multiple Availability Zones and fronted by an
   * Elastic Load Balancing Network Load Balancer. Amazon EKS also provisions elastic network
   * interfaces in your VPC subnets to provide connectivity from the control plane instances to the
   * nodes (for example, to support `kubectl exec` , `logs` , and `proxy` data flows).
   *
   * Amazon EKS nodes run in your AWS account and connect to your cluster's control plane over the
   * Kubernetes API server endpoint and a certificate file that is created for your cluster.
   *
   * In most cases, it takes several minutes to create a cluster. After you create an Amazon EKS
   * cluster, you must configure your Kubernetes tooling to communicate with the API server and launch
   * nodes into your cluster. For more information, see [Managing Cluster
   * Authentication](https://docs.aws.amazon.com/eks/latest/userguide/managing-auth.html) and
   * [Launching Amazon EKS nodes](https://docs.aws.amazon.com/eks/latest/userguide/launch-workers.html)
   * in the *Amazon EKS User Guide* .
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnCluster cfnCluster = CfnCluster.Builder.create(this, "MyCfnCluster")
   * .resourcesVpcConfig(ResourcesVpcConfigProperty.builder()
   * .subnetIds(List.of("subnetIds"))
   * // the properties below are optional
   * .endpointPrivateAccess(false)
   * .endpointPublicAccess(false)
   * .publicAccessCidrs(List.of("publicAccessCidrs"))
   * .securityGroupIds(List.of("securityGroupIds"))
   * .build())
   * .roleArn("roleArn")
   * // the properties below are optional
   * .encryptionConfig(List.of(EncryptionConfigProperty.builder()
   * .provider(ProviderProperty.builder()
   * .keyArn("keyArn")
   * .build())
   * .resources(List.of("resources"))
   * .build()))
   * .kubernetesNetworkConfig(KubernetesNetworkConfigProperty.builder()
   * .ipFamily("ipFamily")
   * .serviceIpv4Cidr("serviceIpv4Cidr")
   * .serviceIpv6Cidr("serviceIpv6Cidr")
   * .build())
   * .logging(LoggingProperty.builder()
   * .clusterLogging(ClusterLoggingProperty.builder()
   * .enabledTypes(List.of(LoggingTypeConfigProperty.builder()
   * .type("type")
   * .build()))
   * .build())
   * .build())
   * .name("name")
   * .outpostConfig(OutpostConfigProperty.builder()
   * .controlPlaneInstanceType("controlPlaneInstanceType")
   * .outpostArns(List.of("outpostArns"))
   * // the properties below are optional
   * .controlPlanePlacement(ControlPlanePlacementProperty.builder()
   * .groupName("groupName")
   * .build())
   * .build())
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .version("version")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-cluster.html)
   */
  public inline fun cfnCluster(
    scope: Construct,
    id: String,
    block: CfnClusterDsl.() -> Unit = {},
  ): CfnCluster {
    val builder = CfnClusterDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * The cluster control plane logging configuration for your cluster.
   *
   *
   * When updating a resource, you must include this `ClusterLogging` property if the previous
   * CloudFormation template of the resource had it.
   *
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * ClusterLoggingProperty clusterLoggingProperty = ClusterLoggingProperty.builder()
   * .enabledTypes(List.of(LoggingTypeConfigProperty.builder()
   * .type("type")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-clusterlogging.html)
   */
  public inline
      fun cfnClusterClusterLoggingProperty(block: CfnClusterClusterLoggingPropertyDsl.() -> Unit =
      {}): CfnCluster.ClusterLoggingProperty {
    val builder = CfnClusterClusterLoggingPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The placement configuration for all the control plane instances of your local Amazon EKS
   * cluster on an AWS Outpost.
   *
   * For more information, see [Capacity
   * considerations](https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-capacity-considerations.html)
   * in the Amazon EKS User Guide.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * ControlPlanePlacementProperty controlPlanePlacementProperty =
   * ControlPlanePlacementProperty.builder()
   * .groupName("groupName")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-controlplaneplacement.html)
   */
  public inline
      fun cfnClusterControlPlanePlacementProperty(block: CfnClusterControlPlanePlacementPropertyDsl.() -> Unit
      = {}): CfnCluster.ControlPlanePlacementProperty {
    val builder = CfnClusterControlPlanePlacementPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The encryption configuration for the cluster.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * EncryptionConfigProperty encryptionConfigProperty = EncryptionConfigProperty.builder()
   * .provider(ProviderProperty.builder()
   * .keyArn("keyArn")
   * .build())
   * .resources(List.of("resources"))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-encryptionconfig.html)
   */
  public inline
      fun cfnClusterEncryptionConfigProperty(block: CfnClusterEncryptionConfigPropertyDsl.() -> Unit
      = {}): CfnCluster.EncryptionConfigProperty {
    val builder = CfnClusterEncryptionConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The Kubernetes network configuration for the cluster.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * KubernetesNetworkConfigProperty kubernetesNetworkConfigProperty =
   * KubernetesNetworkConfigProperty.builder()
   * .ipFamily("ipFamily")
   * .serviceIpv4Cidr("serviceIpv4Cidr")
   * .serviceIpv6Cidr("serviceIpv6Cidr")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-kubernetesnetworkconfig.html)
   */
  public inline
      fun cfnClusterKubernetesNetworkConfigProperty(block: CfnClusterKubernetesNetworkConfigPropertyDsl.() -> Unit
      = {}): CfnCluster.KubernetesNetworkConfigProperty {
    val builder = CfnClusterKubernetesNetworkConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Enable or disable exporting the Kubernetes control plane logs for your cluster to CloudWatch
   * Logs.
   *
   * By default, cluster control plane logs aren't exported to CloudWatch Logs. For more
   * information, see [Amazon EKS Cluster control plane
   * logs](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html) in the **Amazon
   * EKS User Guide** .
   *
   *
   * When updating a resource, you must include this `Logging` property if the previous
   * CloudFormation template of the resource had it. > CloudWatch Logs ingestion, archive storage,
   * and data scanning rates apply to exported control plane logs. For more information, see
   * [CloudWatch Pricing](https://docs.aws.amazon.com/cloudwatch/pricing/) .
   *
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * LoggingProperty loggingProperty = LoggingProperty.builder()
   * .clusterLogging(ClusterLoggingProperty.builder()
   * .enabledTypes(List.of(LoggingTypeConfigProperty.builder()
   * .type("type")
   * .build()))
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-logging.html)
   */
  public inline fun cfnClusterLoggingProperty(block: CfnClusterLoggingPropertyDsl.() -> Unit = {}):
      CfnCluster.LoggingProperty {
    val builder = CfnClusterLoggingPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The enabled logging type.
   *
   * For a list of the valid logging types, see the [`types` property of
   * `LogSetup`](https://docs.aws.amazon.com/eks/latest/APIReference/API_LogSetup.html#AmazonEKS-Type-LogSetup-types)
   * in the *Amazon EKS API Reference* .
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * LoggingTypeConfigProperty loggingTypeConfigProperty = LoggingTypeConfigProperty.builder()
   * .type("type")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-loggingtypeconfig.html)
   */
  public inline
      fun cfnClusterLoggingTypeConfigProperty(block: CfnClusterLoggingTypeConfigPropertyDsl.() -> Unit
      = {}): CfnCluster.LoggingTypeConfigProperty {
    val builder = CfnClusterLoggingTypeConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The configuration of your local Amazon EKS cluster on an AWS Outpost.
   *
   * Before creating a cluster on an Outpost, review [Creating a local cluster on an
   * Outpost](https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts-local-cluster-create.html)
   * in the *Amazon EKS User Guide* . This API isn't available for Amazon EKS clusters on the AWS
   * cloud.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * OutpostConfigProperty outpostConfigProperty = OutpostConfigProperty.builder()
   * .controlPlaneInstanceType("controlPlaneInstanceType")
   * .outpostArns(List.of("outpostArns"))
   * // the properties below are optional
   * .controlPlanePlacement(ControlPlanePlacementProperty.builder()
   * .groupName("groupName")
   * .build())
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-outpostconfig.html)
   */
  public inline
      fun cfnClusterOutpostConfigProperty(block: CfnClusterOutpostConfigPropertyDsl.() -> Unit =
      {}): CfnCluster.OutpostConfigProperty {
    val builder = CfnClusterOutpostConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for defining a `CfnCluster`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnClusterProps cfnClusterProps = CfnClusterProps.builder()
   * .resourcesVpcConfig(ResourcesVpcConfigProperty.builder()
   * .subnetIds(List.of("subnetIds"))
   * // the properties below are optional
   * .endpointPrivateAccess(false)
   * .endpointPublicAccess(false)
   * .publicAccessCidrs(List.of("publicAccessCidrs"))
   * .securityGroupIds(List.of("securityGroupIds"))
   * .build())
   * .roleArn("roleArn")
   * // the properties below are optional
   * .encryptionConfig(List.of(EncryptionConfigProperty.builder()
   * .provider(ProviderProperty.builder()
   * .keyArn("keyArn")
   * .build())
   * .resources(List.of("resources"))
   * .build()))
   * .kubernetesNetworkConfig(KubernetesNetworkConfigProperty.builder()
   * .ipFamily("ipFamily")
   * .serviceIpv4Cidr("serviceIpv4Cidr")
   * .serviceIpv6Cidr("serviceIpv6Cidr")
   * .build())
   * .logging(LoggingProperty.builder()
   * .clusterLogging(ClusterLoggingProperty.builder()
   * .enabledTypes(List.of(LoggingTypeConfigProperty.builder()
   * .type("type")
   * .build()))
   * .build())
   * .build())
   * .name("name")
   * .outpostConfig(OutpostConfigProperty.builder()
   * .controlPlaneInstanceType("controlPlaneInstanceType")
   * .outpostArns(List.of("outpostArns"))
   * // the properties below are optional
   * .controlPlanePlacement(ControlPlanePlacementProperty.builder()
   * .groupName("groupName")
   * .build())
   * .build())
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .version("version")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-cluster.html)
   */
  public inline fun cfnClusterProps(block: CfnClusterPropsDsl.() -> Unit = {}): CfnClusterProps {
    val builder = CfnClusterPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Identifies the AWS Key Management Service ( AWS KMS ) key used to encrypt the secrets.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * ProviderProperty providerProperty = ProviderProperty.builder()
   * .keyArn("keyArn")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-provider.html)
   */
  public inline fun cfnClusterProviderProperty(block: CfnClusterProviderPropertyDsl.() -> Unit =
      {}): CfnCluster.ProviderProperty {
    val builder = CfnClusterProviderPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * An object representing the VPC configuration to use for an Amazon EKS cluster.
   *
   *
   * When updating a resource, you must include these properties if the previous CloudFormation
   * template of the resource had them:
   *
   * * `EndpointPublicAccess`
   * * `EndpointPrivateAccess`
   * * `PublicAccessCidrs`
   *
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * ResourcesVpcConfigProperty resourcesVpcConfigProperty = ResourcesVpcConfigProperty.builder()
   * .subnetIds(List.of("subnetIds"))
   * // the properties below are optional
   * .endpointPrivateAccess(false)
   * .endpointPublicAccess(false)
   * .publicAccessCidrs(List.of("publicAccessCidrs"))
   * .securityGroupIds(List.of("securityGroupIds"))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-cluster-resourcesvpcconfig.html)
   */
  public inline
      fun cfnClusterResourcesVpcConfigProperty(block: CfnClusterResourcesVpcConfigPropertyDsl.() -> Unit
      = {}): CfnCluster.ResourcesVpcConfigProperty {
    val builder = CfnClusterResourcesVpcConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Creates an AWS Fargate profile for your Amazon EKS cluster.
   *
   * You must have at least one Fargate profile in a cluster to be able to run pods on Fargate.
   *
   * The Fargate profile allows an administrator to declare which pods run on Fargate and specify
   * which pods run on which Fargate profile. This declaration is done through the profile’s selectors.
   * Each profile can have up to five selectors that contain a namespace and labels. A namespace is
   * required for every selector. The label field consists of multiple optional key-value pairs. Pods
   * that match the selectors are scheduled on Fargate. If a to-be-scheduled pod matches any of the
   * selectors in the Fargate profile, then that pod is run on Fargate.
   *
   * When you create a Fargate profile, you must specify a pod execution role to use with the pods
   * that are scheduled with the profile. This role is added to the cluster's Kubernetes [Role Based
   * Access
   * Control](https://docs.aws.amazon.com/https://kubernetes.io/docs/reference/access-authn-authz/rbac/)
   * (RBAC) for authorization so that the `kubelet` that is running on the Fargate infrastructure can
   * register with your Amazon EKS cluster so that it can appear in your cluster as a node. The pod
   * execution role also provides IAM permissions to the Fargate infrastructure to allow read access to
   * Amazon ECR image repositories. For more information, see [Pod Execution
   * Role](https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html) in the *Amazon EKS
   * User Guide* .
   *
   * Fargate profiles are immutable. However, you can create a new updated profile to replace an
   * existing profile and then delete the original after the updated profile has finished creating.
   *
   * If any Fargate profiles in a cluster are in the `DELETING` status, you must wait for that
   * Fargate profile to finish deleting before you can create any other profiles in that cluster.
   *
   * For more information, see [AWS Fargate
   * Profile](https://docs.aws.amazon.com/eks/latest/userguide/fargate-profile.html) in the *Amazon EKS
   * User Guide* .
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnFargateProfile cfnFargateProfile = CfnFargateProfile.Builder.create(this,
   * "MyCfnFargateProfile")
   * .clusterName("clusterName")
   * .podExecutionRoleArn("podExecutionRoleArn")
   * .selectors(List.of(SelectorProperty.builder()
   * .namespace("namespace")
   * // the properties below are optional
   * .labels(List.of(LabelProperty.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build()))
   * // the properties below are optional
   * .fargateProfileName("fargateProfileName")
   * .subnets(List.of("subnets"))
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-fargateprofile.html)
   */
  public inline fun cfnFargateProfile(
    scope: Construct,
    id: String,
    block: CfnFargateProfileDsl.() -> Unit = {},
  ): CfnFargateProfile {
    val builder = CfnFargateProfileDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * A key-value pair.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * LabelProperty labelProperty = LabelProperty.builder()
   * .key("key")
   * .value("value")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-fargateprofile-label.html)
   */
  public inline
      fun cfnFargateProfileLabelProperty(block: CfnFargateProfileLabelPropertyDsl.() -> Unit = {}):
      CfnFargateProfile.LabelProperty {
    val builder = CfnFargateProfileLabelPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for defining a `CfnFargateProfile`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnFargateProfileProps cfnFargateProfileProps = CfnFargateProfileProps.builder()
   * .clusterName("clusterName")
   * .podExecutionRoleArn("podExecutionRoleArn")
   * .selectors(List.of(SelectorProperty.builder()
   * .namespace("namespace")
   * // the properties below are optional
   * .labels(List.of(LabelProperty.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build()))
   * // the properties below are optional
   * .fargateProfileName("fargateProfileName")
   * .subnets(List.of("subnets"))
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-fargateprofile.html)
   */
  public inline fun cfnFargateProfileProps(block: CfnFargateProfilePropsDsl.() -> Unit = {}):
      CfnFargateProfileProps {
    val builder = CfnFargateProfilePropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * An object representing an AWS Fargate profile selector.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * SelectorProperty selectorProperty = SelectorProperty.builder()
   * .namespace("namespace")
   * // the properties below are optional
   * .labels(List.of(LabelProperty.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-fargateprofile-selector.html)
   */
  public inline
      fun cfnFargateProfileSelectorProperty(block: CfnFargateProfileSelectorPropertyDsl.() -> Unit =
      {}): CfnFargateProfile.SelectorProperty {
    val builder = CfnFargateProfileSelectorPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Associate an identity provider configuration to a cluster.
   *
   * If you want to authenticate identities using an identity provider, you can create an identity
   * provider configuration and associate it to your cluster. After configuring authentication to your
   * cluster you can create Kubernetes `roles` and `clusterroles` to assign permissions to the roles,
   * and then bind the roles to the identities using Kubernetes `rolebindings` and
   * `clusterrolebindings` . For more information see [Using RBAC
   * Authorization](https://docs.aws.amazon.com/https://kubernetes.io/docs/reference/access-authn-authz/rbac/)
   * in the Kubernetes documentation.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnIdentityProviderConfig cfnIdentityProviderConfig =
   * CfnIdentityProviderConfig.Builder.create(this, "MyCfnIdentityProviderConfig")
   * .clusterName("clusterName")
   * .type("type")
   * // the properties below are optional
   * .identityProviderConfigName("identityProviderConfigName")
   * .oidc(OidcIdentityProviderConfigProperty.builder()
   * .clientId("clientId")
   * .issuerUrl("issuerUrl")
   * // the properties below are optional
   * .groupsClaim("groupsClaim")
   * .groupsPrefix("groupsPrefix")
   * .requiredClaims(List.of(RequiredClaimProperty.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .usernameClaim("usernameClaim")
   * .usernamePrefix("usernamePrefix")
   * .build())
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-identityproviderconfig.html)
   */
  public inline fun cfnIdentityProviderConfig(
    scope: Construct,
    id: String,
    block: CfnIdentityProviderConfigDsl.() -> Unit = {},
  ): CfnIdentityProviderConfig {
    val builder = CfnIdentityProviderConfigDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * An object representing the configuration for an OpenID Connect (OIDC) identity provider.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * OidcIdentityProviderConfigProperty oidcIdentityProviderConfigProperty =
   * OidcIdentityProviderConfigProperty.builder()
   * .clientId("clientId")
   * .issuerUrl("issuerUrl")
   * // the properties below are optional
   * .groupsClaim("groupsClaim")
   * .groupsPrefix("groupsPrefix")
   * .requiredClaims(List.of(RequiredClaimProperty.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .usernameClaim("usernameClaim")
   * .usernamePrefix("usernamePrefix")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-identityproviderconfig-oidcidentityproviderconfig.html)
   */
  public inline
      fun cfnIdentityProviderConfigOidcIdentityProviderConfigProperty(block: CfnIdentityProviderConfigOidcIdentityProviderConfigPropertyDsl.() -> Unit
      = {}): CfnIdentityProviderConfig.OidcIdentityProviderConfigProperty {
    val builder = CfnIdentityProviderConfigOidcIdentityProviderConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for defining a `CfnIdentityProviderConfig`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnIdentityProviderConfigProps cfnIdentityProviderConfigProps =
   * CfnIdentityProviderConfigProps.builder()
   * .clusterName("clusterName")
   * .type("type")
   * // the properties below are optional
   * .identityProviderConfigName("identityProviderConfigName")
   * .oidc(OidcIdentityProviderConfigProperty.builder()
   * .clientId("clientId")
   * .issuerUrl("issuerUrl")
   * // the properties below are optional
   * .groupsClaim("groupsClaim")
   * .groupsPrefix("groupsPrefix")
   * .requiredClaims(List.of(RequiredClaimProperty.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .usernameClaim("usernameClaim")
   * .usernamePrefix("usernamePrefix")
   * .build())
   * .tags(List.of(CfnTag.builder()
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-identityproviderconfig.html)
   */
  public inline
      fun cfnIdentityProviderConfigProps(block: CfnIdentityProviderConfigPropsDsl.() -> Unit = {}):
      CfnIdentityProviderConfigProps {
    val builder = CfnIdentityProviderConfigPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * A key-value pair that describes a required claim in the identity token.
   *
   * If set, each claim is verified to be present in the token with a matching value.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * RequiredClaimProperty requiredClaimProperty = RequiredClaimProperty.builder()
   * .key("key")
   * .value("value")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-identityproviderconfig-requiredclaim.html)
   */
  public inline
      fun cfnIdentityProviderConfigRequiredClaimProperty(block: CfnIdentityProviderConfigRequiredClaimPropertyDsl.() -> Unit
      = {}): CfnIdentityProviderConfig.RequiredClaimProperty {
    val builder = CfnIdentityProviderConfigRequiredClaimPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Creates a managed node group for an Amazon EKS cluster.
   *
   * You can only create a node group for your cluster that is equal to the current Kubernetes
   * version for the cluster.
   *
   * An Amazon EKS managed node group is an Amazon EC2 Auto Scaling group and associated Amazon EC2
   * instances that are managed by AWS for an Amazon EKS cluster. For more information, see [Managed
   * node groups](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html) in the
   * *Amazon EKS User Guide* .
   *
   *
   * Windows AMI types are only supported for commercial Regions that support Windows Amazon EKS.
   *
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnNodegroup cfnNodegroup = CfnNodegroup.Builder.create(this, "MyCfnNodegroup")
   * .clusterName("clusterName")
   * .nodeRole("nodeRole")
   * .subnets(List.of("subnets"))
   * // the properties below are optional
   * .amiType("amiType")
   * .capacityType("capacityType")
   * .diskSize(123)
   * .forceUpdateEnabled(false)
   * .instanceTypes(List.of("instanceTypes"))
   * .labels(Map.of(
   * "labelsKey", "labels"))
   * .launchTemplate(LaunchTemplateSpecificationProperty.builder()
   * .id("id")
   * .name("name")
   * .version("version")
   * .build())
   * .nodegroupName("nodegroupName")
   * .releaseVersion("releaseVersion")
   * .remoteAccess(RemoteAccessProperty.builder()
   * .ec2SshKey("ec2SshKey")
   * // the properties below are optional
   * .sourceSecurityGroups(List.of("sourceSecurityGroups"))
   * .build())
   * .scalingConfig(ScalingConfigProperty.builder()
   * .desiredSize(123)
   * .maxSize(123)
   * .minSize(123)
   * .build())
   * .tags(Map.of(
   * "tagsKey", "tags"))
   * .taints(List.of(TaintProperty.builder()
   * .effect("effect")
   * .key("key")
   * .value("value")
   * .build()))
   * .updateConfig(UpdateConfigProperty.builder()
   * .maxUnavailable(123)
   * .maxUnavailablePercentage(123)
   * .build())
   * .version("version")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html)
   */
  public inline fun cfnNodegroup(
    scope: Construct,
    id: String,
    block: CfnNodegroupDsl.() -> Unit = {},
  ): CfnNodegroup {
    val builder = CfnNodegroupDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * An object representing a node group launch template specification.
   *
   * The launch template can't include
   * [`SubnetId`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
   * ,
   * [`IamInstanceProfile`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_IamInstanceProfile.html)
   * ,
   * [`RequestSpotInstances`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html)
   * ,
   * [`HibernationOptions`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html)
   * , or
   * [`TerminateInstances`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html)
   * , or the node group deployment or update will fail. For more information about launch templates,
   * see
   * [`CreateLaunchTemplate`](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)
   * in the Amazon EC2 API Reference. For more information about using launch templates with Amazon
   * EKS, see [Launch template
   * support](https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html) in the *Amazon
   * EKS User Guide* .
   *
   * You must specify either the launch template ID or the launch template name in the request, but
   * not both.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * LaunchTemplateSpecificationProperty launchTemplateSpecificationProperty =
   * LaunchTemplateSpecificationProperty.builder()
   * .id("id")
   * .name("name")
   * .version("version")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-launchtemplatespecification.html)
   */
  public inline
      fun cfnNodegroupLaunchTemplateSpecificationProperty(block: CfnNodegroupLaunchTemplateSpecificationPropertyDsl.() -> Unit
      = {}): CfnNodegroup.LaunchTemplateSpecificationProperty {
    val builder = CfnNodegroupLaunchTemplateSpecificationPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for defining a `CfnNodegroup`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * CfnNodegroupProps cfnNodegroupProps = CfnNodegroupProps.builder()
   * .clusterName("clusterName")
   * .nodeRole("nodeRole")
   * .subnets(List.of("subnets"))
   * // the properties below are optional
   * .amiType("amiType")
   * .capacityType("capacityType")
   * .diskSize(123)
   * .forceUpdateEnabled(false)
   * .instanceTypes(List.of("instanceTypes"))
   * .labels(Map.of(
   * "labelsKey", "labels"))
   * .launchTemplate(LaunchTemplateSpecificationProperty.builder()
   * .id("id")
   * .name("name")
   * .version("version")
   * .build())
   * .nodegroupName("nodegroupName")
   * .releaseVersion("releaseVersion")
   * .remoteAccess(RemoteAccessProperty.builder()
   * .ec2SshKey("ec2SshKey")
   * // the properties below are optional
   * .sourceSecurityGroups(List.of("sourceSecurityGroups"))
   * .build())
   * .scalingConfig(ScalingConfigProperty.builder()
   * .desiredSize(123)
   * .maxSize(123)
   * .minSize(123)
   * .build())
   * .tags(Map.of(
   * "tagsKey", "tags"))
   * .taints(List.of(TaintProperty.builder()
   * .effect("effect")
   * .key("key")
   * .value("value")
   * .build()))
   * .updateConfig(UpdateConfigProperty.builder()
   * .maxUnavailable(123)
   * .maxUnavailablePercentage(123)
   * .build())
   * .version("version")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-nodegroup.html)
   */
  public inline fun cfnNodegroupProps(block: CfnNodegroupPropsDsl.() -> Unit = {}):
      CfnNodegroupProps {
    val builder = CfnNodegroupPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * An object representing the remote access configuration for the managed node group.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * RemoteAccessProperty remoteAccessProperty = RemoteAccessProperty.builder()
   * .ec2SshKey("ec2SshKey")
   * // the properties below are optional
   * .sourceSecurityGroups(List.of("sourceSecurityGroups"))
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-remoteaccess.html)
   */
  public inline
      fun cfnNodegroupRemoteAccessProperty(block: CfnNodegroupRemoteAccessPropertyDsl.() -> Unit =
      {}): CfnNodegroup.RemoteAccessProperty {
    val builder = CfnNodegroupRemoteAccessPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * An object representing the scaling configuration details for the Auto Scaling group that is
   * associated with your node group.
   *
   * When creating a node group, you must specify all or none of the properties. When updating a
   * node group, you can specify any or none of the properties.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * ScalingConfigProperty scalingConfigProperty = ScalingConfigProperty.builder()
   * .desiredSize(123)
   * .maxSize(123)
   * .minSize(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-scalingconfig.html)
   */
  public inline
      fun cfnNodegroupScalingConfigProperty(block: CfnNodegroupScalingConfigPropertyDsl.() -> Unit =
      {}): CfnNodegroup.ScalingConfigProperty {
    val builder = CfnNodegroupScalingConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * A property that allows a node to repel a set of pods.
   *
   * For more information, see [Node taints on managed node
   * groups](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) .
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * TaintProperty taintProperty = TaintProperty.builder()
   * .effect("effect")
   * .key("key")
   * .value("value")
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-taint.html)
   */
  public inline fun cfnNodegroupTaintProperty(block: CfnNodegroupTaintPropertyDsl.() -> Unit = {}):
      CfnNodegroup.TaintProperty {
    val builder = CfnNodegroupTaintPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The update configuration for the node group.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * UpdateConfigProperty updateConfigProperty = UpdateConfigProperty.builder()
   * .maxUnavailable(123)
   * .maxUnavailablePercentage(123)
   * .build();
   * ```
   *
   * [Documentation](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-updateconfig.html)
   */
  public inline
      fun cfnNodegroupUpdateConfigProperty(block: CfnNodegroupUpdateConfigPropertyDsl.() -> Unit =
      {}): CfnNodegroup.UpdateConfigProperty {
    val builder = CfnNodegroupUpdateConfigPropertyDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * A Cluster represents a managed Kubernetes Service (EKS).
   *
   * This is a fully managed cluster of API Servers (control-plane)
   * The user is still required to create the worker nodes.
   *
   * Example:
   *
   * ```
   * Cluster cluster = Cluster.Builder.create(this, "HelloEKS")
   * .version(KubernetesVersion.V1_27)
   * .defaultCapacity(0)
   * .build();
   * cluster.addNodegroupCapacity("custom-node-group", NodegroupOptions.builder()
   * .instanceTypes(List.of(new InstanceType("m5.large")))
   * .minSize(4)
   * .diskSize(100)
   * .amiType(NodegroupAmiType.AL2_X86_64_GPU)
   * .build());
   * ```
   */
  public inline fun cluster(
    scope: Construct,
    id: String,
    block: ClusterDsl.() -> Unit = {},
  ): Cluster {
    val builder = ClusterDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Attributes for EKS clusters.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * AutoScalingGroup asg;
   * ICluster importedCluster = Cluster.fromClusterAttributes(this, "ImportedCluster",
   * ClusterAttributes.builder()
   * .clusterName(cluster.getClusterName())
   * .clusterSecurityGroupId(cluster.getClusterSecurityGroupId())
   * .build());
   * importedCluster.connectAutoScalingGroupCapacity(asg,
   * AutoScalingGroupOptions.builder().build());
   * ```
   */
  public inline fun clusterAttributes(block: ClusterAttributesDsl.() -> Unit = {}):
      ClusterAttributes {
    val builder = ClusterAttributesDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for EKS clusters.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.*;
   * import software.amazon.awscdk.services.ec2.*;
   * import software.amazon.awscdk.services.eks.*;
   * import software.amazon.awscdk.services.iam.*;
   * import software.amazon.awscdk.services.kms.*;
   * import software.amazon.awscdk.services.lambda.*;
   * AlbControllerVersion albControllerVersion;
   * EndpointAccess endpointAccess;
   * Key key;
   * KubernetesVersion kubernetesVersion;
   * LayerVersion layerVersion;
   * Object policy;
   * Role role;
   * SecurityGroup securityGroup;
   * Size size;
   * Subnet subnet;
   * SubnetFilter subnetFilter;
   * Vpc vpc;
   * ClusterOptions clusterOptions = ClusterOptions.builder()
   * .version(kubernetesVersion)
   * // the properties below are optional
   * .albController(AlbControllerOptions.builder()
   * .version(albControllerVersion)
   * // the properties below are optional
   * .policy(policy)
   * .repository("repository")
   * .build())
   * .awscliLayer(layerVersion)
   * .clusterHandlerEnvironment(Map.of(
   * "clusterHandlerEnvironmentKey", "clusterHandlerEnvironment"))
   * .clusterHandlerSecurityGroup(securityGroup)
   * .clusterLogging(List.of(ClusterLoggingTypes.API))
   * .clusterName("clusterName")
   * .coreDnsComputeType(CoreDnsComputeType.EC2)
   * .endpointAccess(endpointAccess)
   * .ipFamily(IpFamily.IP_V4)
   * .kubectlEnvironment(Map.of(
   * "kubectlEnvironmentKey", "kubectlEnvironment"))
   * .kubectlLayer(layerVersion)
   * .kubectlMemory(size)
   * .mastersRole(role)
   * .onEventLayer(layerVersion)
   * .outputClusterName(false)
   * .outputConfigCommand(false)
   * .outputMastersRoleArn(false)
   * .placeClusterHandlerInVpc(false)
   * .prune(false)
   * .role(role)
   * .secretsEncryptionKey(key)
   * .securityGroup(securityGroup)
   * .serviceIpv4Cidr("serviceIpv4Cidr")
   * .vpc(vpc)
   * .vpcSubnets(List.of(SubnetSelection.builder()
   * .availabilityZones(List.of("availabilityZones"))
   * .onePerAz(false)
   * .subnetFilters(List.of(subnetFilter))
   * .subnetGroupName("subnetGroupName")
   * .subnets(List.of(subnet))
   * .subnetType(SubnetType.PRIVATE_ISOLATED)
   * .build()))
   * .build();
   * ```
   */
  public inline fun clusterOptions(block: ClusterOptionsDsl.() -> Unit = {}): ClusterOptions {
    val builder = ClusterOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Common configuration props for EKS clusters.
   *
   * Example:
   *
   * ```
   * Cluster cluster = Cluster.Builder.create(this, "HelloEKS")
   * .version(KubernetesVersion.V1_27)
   * .defaultCapacity(0)
   * .build();
   * cluster.addNodegroupCapacity("custom-node-group", NodegroupOptions.builder()
   * .instanceTypes(List.of(new InstanceType("m5.large")))
   * .minSize(4)
   * .diskSize(100)
   * .amiType(NodegroupAmiType.AL2_X86_64_GPU)
   * .build());
   * ```
   */
  public inline fun clusterProps(block: ClusterPropsDsl.() -> Unit = {}): ClusterProps {
    val builder = ClusterPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for configuring an EKS cluster.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.ec2.*;
   * import software.amazon.awscdk.services.eks.*;
   * import software.amazon.awscdk.services.iam.*;
   * KubernetesVersion kubernetesVersion;
   * Role role;
   * SecurityGroup securityGroup;
   * Subnet subnet;
   * SubnetFilter subnetFilter;
   * Vpc vpc;
   * CommonClusterOptions commonClusterOptions = CommonClusterOptions.builder()
   * .version(kubernetesVersion)
   * // the properties below are optional
   * .clusterName("clusterName")
   * .outputClusterName(false)
   * .outputConfigCommand(false)
   * .role(role)
   * .securityGroup(securityGroup)
   * .vpc(vpc)
   * .vpcSubnets(List.of(SubnetSelection.builder()
   * .availabilityZones(List.of("availabilityZones"))
   * .onePerAz(false)
   * .subnetFilters(List.of(subnetFilter))
   * .subnetGroupName("subnetGroupName")
   * .subnets(List.of(subnet))
   * .subnetType(SubnetType.PRIVATE_ISOLATED)
   * .build()))
   * .build();
   * ```
   */
  public inline fun commonClusterOptions(block: CommonClusterOptionsDsl.() -> Unit = {}):
      CommonClusterOptions {
    val builder = CommonClusterOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Construct an Amazon Linux 2 image from the latest EKS Optimized AMI published in SSM.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * EksOptimizedImage eksOptimizedImage = EksOptimizedImage.Builder.create()
   * .cpuArch(CpuArch.ARM_64)
   * .kubernetesVersion("kubernetesVersion")
   * .nodeType(NodeType.STANDARD)
   * .build();
   * ```
   */
  public inline fun eksOptimizedImage(block: EksOptimizedImageDsl.() -> Unit = {}):
      EksOptimizedImage {
    val builder = EksOptimizedImageDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for EksOptimizedImage.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * EksOptimizedImageProps eksOptimizedImageProps = EksOptimizedImageProps.builder()
   * .cpuArch(CpuArch.ARM_64)
   * .kubernetesVersion("kubernetesVersion")
   * .nodeType(NodeType.STANDARD)
   * .build();
   * ```
   */
  public inline fun eksOptimizedImageProps(block: EksOptimizedImagePropsDsl.() -> Unit = {}):
      EksOptimizedImageProps {
    val builder = EksOptimizedImagePropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Defines an EKS cluster that runs entirely on AWS Fargate.
   *
   * The cluster is created with a default Fargate Profile that matches the
   * "default" and "kube-system" namespaces. You can add additional profiles using
   * `addFargateProfile`.
   *
   * Example:
   *
   * ```
   * FargateCluster cluster = FargateCluster.Builder.create(this, "MyCluster")
   * .version(KubernetesVersion.V1_27)
   * .build();
   * ```
   */
  public inline fun fargateCluster(
    scope: Construct,
    id: String,
    block: FargateClusterDsl.() -> Unit = {},
  ): FargateCluster {
    val builder = FargateClusterDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Configuration props for EKS Fargate.
   *
   * Example:
   *
   * ```
   * FargateCluster cluster = FargateCluster.Builder.create(this, "MyCluster")
   * .version(KubernetesVersion.V1_27)
   * .build();
   * ```
   */
  public inline fun fargateClusterProps(block: FargateClusterPropsDsl.() -> Unit = {}):
      FargateClusterProps {
    val builder = FargateClusterPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Fargate profiles allows an administrator to declare which pods run on Fargate.
   *
   * This declaration is done through the profile’s selectors. Each
   * profile can have up to five selectors that contain a namespace and optional
   * labels. You must define a namespace for every selector. The label field
   * consists of multiple optional key-value pairs. Pods that match a selector (by
   * matching a namespace for the selector and all of the labels specified in the
   * selector) are scheduled on Fargate. If a namespace selector is defined
   * without any labels, Amazon EKS will attempt to schedule all pods that run in
   * that namespace onto Fargate using the profile. If a to-be-scheduled pod
   * matches any of the selectors in the Fargate profile, then that pod is
   * scheduled on Fargate.
   *
   * If a pod matches multiple Fargate profiles, Amazon EKS picks one of the
   * matches at random. In this case, you can specify which profile a pod should
   * use by adding the following Kubernetes label to the pod specification:
   * eks.amazonaws.com/fargate-profile: profile_name. However, the pod must still
   * match a selector in that profile in order to be scheduled onto Fargate.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * FargateProfile.Builder.create(this, "MyProfile")
   * .cluster(cluster)
   * .selectors(List.of(Selector.builder().namespace("default").build()))
   * .build();
   * ```
   */
  public inline fun fargateProfile(
    scope: Construct,
    id: String,
    block: FargateProfileDsl.() -> Unit = {},
  ): FargateProfile {
    val builder = FargateProfileDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for defining EKS Fargate Profiles.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * cluster.addFargateProfile("MyProfile", FargateProfileOptions.builder()
   * .selectors(List.of(Selector.builder().namespace("default").build()))
   * .build());
   * ```
   */
  public inline fun fargateProfileOptions(block: FargateProfileOptionsDsl.() -> Unit = {}):
      FargateProfileOptions {
    val builder = FargateProfileOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Configuration props for EKS Fargate Profiles.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * FargateProfile.Builder.create(this, "MyProfile")
   * .cluster(cluster)
   * .selectors(List.of(Selector.builder().namespace("default").build()))
   * .build();
   * ```
   */
  public inline fun fargateProfileProps(block: FargateProfilePropsDsl.() -> Unit = {}):
      FargateProfileProps {
    val builder = FargateProfilePropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Represents a helm chart within the Kubernetes system.
   *
   * Applies/deletes the resources using `kubectl` in sync with the resource.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * // option 1: use a construct
   * // option 1: use a construct
   * HelmChart.Builder.create(this, "MyOCIChart")
   * .cluster(cluster)
   * .chart("some-chart")
   * .repository("oci://${ACCOUNT_ID}.dkr.ecr.${ACCOUNT_REGION}.amazonaws.com/${REPO_NAME}")
   * .namespace("oci")
   * .version("0.0.1")
   * .build();
   * ```
   */
  public inline fun helmChart(
    scope: Construct,
    id: String,
    block: HelmChartDsl.() -> Unit = {},
  ): HelmChart {
    val builder = HelmChartDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Helm Chart options.
   *
   * Example:
   *
   * ```
   * import software.amazon.awscdk.services.s3.assets.*;
   * Cluster cluster;
   * Asset chartAsset = Asset.Builder.create(this, "ChartAsset")
   * .path("/path/to/asset")
   * .build();
   * cluster.addHelmChart("test-chart", HelmChartOptions.builder()
   * .chartAsset(chartAsset)
   * .build());
   * ```
   */
  public inline fun helmChartOptions(block: HelmChartOptionsDsl.() -> Unit = {}): HelmChartOptions {
    val builder = HelmChartOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Helm Chart properties.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * // option 1: use a construct
   * // option 1: use a construct
   * HelmChart.Builder.create(this, "MyOCIChart")
   * .cluster(cluster)
   * .chart("some-chart")
   * .repository("oci://${ACCOUNT_ID}.dkr.ecr.${ACCOUNT_REGION}.amazonaws.com/${REPO_NAME}")
   * .namespace("oci")
   * .version("0.0.1")
   * .build();
   * ```
   */
  public inline fun helmChartProps(block: HelmChartPropsDsl.() -> Unit = {}): HelmChartProps {
    val builder = HelmChartPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for fetching an IngressLoadBalancerAddress.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.*;
   * import software.amazon.awscdk.services.eks.*;
   * IngressLoadBalancerAddressOptions ingressLoadBalancerAddressOptions =
   * IngressLoadBalancerAddressOptions.builder()
   * .namespace("namespace")
   * .timeout(Duration.minutes(30))
   * .build();
   * ```
   */
  public inline
      fun ingressLoadBalancerAddressOptions(block: IngressLoadBalancerAddressOptionsDsl.() -> Unit =
      {}): IngressLoadBalancerAddressOptions {
    val builder = IngressLoadBalancerAddressOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Implementation of Kubectl Lambda.
   *
   * Example:
   *
   * ```
   * IRole handlerRole = Role.fromRoleArn(this, "HandlerRole",
   * "arn:aws:iam::123456789012:role/lambda-role");
   * // get the serivceToken from the custom resource provider
   * String functionArn = Function.fromFunctionName(this, "ProviderOnEventFunc",
   * "ProviderframeworkonEvent-XXX").getFunctionArn();
   * IKubectlProvider kubectlProvider = KubectlProvider.fromKubectlProviderAttributes(this,
   * "KubectlProvider", KubectlProviderAttributes.builder()
   * .functionArn(functionArn)
   * .kubectlRoleArn("arn:aws:iam::123456789012:role/kubectl-role")
   * .handlerRole(handlerRole)
   * .build());
   * ICluster cluster = Cluster.fromClusterAttributes(this, "Cluster", ClusterAttributes.builder()
   * .clusterName("cluster")
   * .kubectlProvider(kubectlProvider)
   * .build());
   * ```
   */
  public inline fun kubectlProvider(
    scope: Construct,
    id: String,
    block: KubectlProviderDsl.() -> Unit = {},
  ): KubectlProvider {
    val builder = KubectlProviderDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Kubectl Provider Attributes.
   *
   * Example:
   *
   * ```
   * IRole handlerRole = Role.fromRoleArn(this, "HandlerRole",
   * "arn:aws:iam::123456789012:role/lambda-role");
   * // get the serivceToken from the custom resource provider
   * String functionArn = Function.fromFunctionName(this, "ProviderOnEventFunc",
   * "ProviderframeworkonEvent-XXX").getFunctionArn();
   * IKubectlProvider kubectlProvider = KubectlProvider.fromKubectlProviderAttributes(this,
   * "KubectlProvider", KubectlProviderAttributes.builder()
   * .functionArn(functionArn)
   * .kubectlRoleArn("arn:aws:iam::123456789012:role/kubectl-role")
   * .handlerRole(handlerRole)
   * .build());
   * ICluster cluster = Cluster.fromClusterAttributes(this, "Cluster", ClusterAttributes.builder()
   * .clusterName("cluster")
   * .kubectlProvider(kubectlProvider)
   * .build());
   * ```
   */
  public inline fun kubectlProviderAttributes(block: KubectlProviderAttributesDsl.() -> Unit = {}):
      KubectlProviderAttributes {
    val builder = KubectlProviderAttributesDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for a KubectlProvider.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * Cluster cluster;
   * KubectlProviderProps kubectlProviderProps = KubectlProviderProps.builder()
   * .cluster(cluster)
   * .build();
   * ```
   */
  public inline fun kubectlProviderProps(block: KubectlProviderPropsDsl.() -> Unit = {}):
      KubectlProviderProps {
    val builder = KubectlProviderPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Represents a manifest within the Kubernetes system.
   *
   * Alternatively, you can use `cluster.addManifest(resource[, resource, ...])`
   * to define resources on this cluster.
   *
   * Applies/deletes the manifest using `kubectl`.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * KubernetesManifest namespace = cluster.addManifest("my-namespace", Map.of(
   * "apiVersion", "v1",
   * "kind", "Namespace",
   * "metadata", Map.of("name", "my-app")));
   * KubernetesManifest service = cluster.addManifest("my-service", Map.of(
   * "metadata", Map.of(
   * "name", "myservice",
   * "namespace", "my-app"),
   * "spec", Map.of()));
   * service.node.addDependency(namespace);
   * ```
   */
  public inline fun kubernetesManifest(
    scope: Construct,
    id: String,
    block: KubernetesManifestDsl.() -> Unit = {},
  ): KubernetesManifest {
    val builder = KubernetesManifestDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for `KubernetesManifest`.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * KubernetesManifestOptions kubernetesManifestOptions = KubernetesManifestOptions.builder()
   * .ingressAlb(false)
   * .ingressAlbScheme(AlbScheme.INTERNAL)
   * .prune(false)
   * .skipValidation(false)
   * .build();
   * ```
   */
  public inline fun kubernetesManifestOptions(block: KubernetesManifestOptionsDsl.() -> Unit = {}):
      KubernetesManifestOptions {
    val builder = KubernetesManifestOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for KubernetesManifest.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * Map<String, String> appLabel = Map.of("app", "hello-kubernetes");
   * Map<String, Object> deployment = Map.of(
   * "apiVersion", "apps/v1",
   * "kind", "Deployment",
   * "metadata", Map.of("name", "hello-kubernetes"),
   * "spec", Map.of(
   * "replicas", 3,
   * "selector", Map.of("matchLabels", appLabel),
   * "template", Map.of(
   * "metadata", Map.of("labels", appLabel),
   * "spec", Map.of(
   * "containers", List.of(Map.of(
   * "name", "hello-kubernetes",
   * "image", "paulbouwer/hello-kubernetes:1.5",
   * "ports", List.of(Map.of("containerPort", 8080))))))));
   * Map<String, Object> service = Map.of(
   * "apiVersion", "v1",
   * "kind", "Service",
   * "metadata", Map.of("name", "hello-kubernetes"),
   * "spec", Map.of(
   * "type", "LoadBalancer",
   * "ports", List.of(Map.of("port", 80, "targetPort", 8080)),
   * "selector", appLabel));
   * // option 1: use a construct
   * // option 1: use a construct
   * KubernetesManifest.Builder.create(this, "hello-kub")
   * .cluster(cluster)
   * .manifest(List.of(deployment, service))
   * .build();
   * // or, option2: use `addManifest`
   * cluster.addManifest("hello-kub", service, deployment);
   * ```
   */
  public inline fun kubernetesManifestProps(block: KubernetesManifestPropsDsl.() -> Unit = {}):
      KubernetesManifestProps {
    val builder = KubernetesManifestPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Represents a value of a specific object deployed in the cluster.
   *
   * Use this to fetch any information available by the `kubectl get` command.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * // query the load balancer address
   * KubernetesObjectValue myServiceAddress = KubernetesObjectValue.Builder.create(this,
   * "LoadBalancerAttribute")
   * .cluster(cluster)
   * .objectType("service")
   * .objectName("my-service")
   * .jsonPath(".status.loadBalancer.ingress[0].hostname")
   * .build();
   * // pass the address to a lambda function
   * Function proxyFunction = Function.Builder.create(this, "ProxyFunction")
   * .handler("index.handler")
   * .code(Code.fromInline("my-code"))
   * .runtime(Runtime.NODEJS_14_X)
   * .environment(Map.of(
   * "myServiceAddress", myServiceAddress.getValue()))
   * .build();
   * ```
   */
  public inline fun kubernetesObjectValue(
    scope: Construct,
    id: String,
    block: KubernetesObjectValueDsl.() -> Unit = {},
  ): KubernetesObjectValue {
    val builder = KubernetesObjectValueDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for KubernetesObjectValue.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * // query the load balancer address
   * KubernetesObjectValue myServiceAddress = KubernetesObjectValue.Builder.create(this,
   * "LoadBalancerAttribute")
   * .cluster(cluster)
   * .objectType("service")
   * .objectName("my-service")
   * .jsonPath(".status.loadBalancer.ingress[0].hostname")
   * .build();
   * // pass the address to a lambda function
   * Function proxyFunction = Function.Builder.create(this, "ProxyFunction")
   * .handler("index.handler")
   * .code(Code.fromInline("my-code"))
   * .runtime(Runtime.NODEJS_14_X)
   * .environment(Map.of(
   * "myServiceAddress", myServiceAddress.getValue()))
   * .build();
   * ```
   */
  public inline fun kubernetesObjectValueProps(block: KubernetesObjectValuePropsDsl.() -> Unit =
      {}): KubernetesObjectValueProps {
    val builder = KubernetesObjectValuePropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * A CloudFormation resource which applies/restores a JSON patch into a Kubernetes resource.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * KubernetesPatch.Builder.create(this, "hello-kub-deployment-label")
   * .cluster(cluster)
   * .resourceName("deployment/hello-kubernetes")
   * .applyPatch(Map.of("spec", Map.of("replicas", 5)))
   * .restorePatch(Map.of("spec", Map.of("replicas", 3)))
   * .build();
   * ```
   *
   * [Documentation](https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/)
   */
  public inline fun kubernetesPatch(
    scope: Construct,
    id: String,
    block: KubernetesPatchDsl.() -> Unit = {},
  ): KubernetesPatch {
    val builder = KubernetesPatchDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for KubernetesPatch.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * KubernetesPatch.Builder.create(this, "hello-kub-deployment-label")
   * .cluster(cluster)
   * .resourceName("deployment/hello-kubernetes")
   * .applyPatch(Map.of("spec", Map.of("replicas", 5)))
   * .restorePatch(Map.of("spec", Map.of("replicas", 3)))
   * .build();
   * ```
   */
  public inline fun kubernetesPatchProps(block: KubernetesPatchPropsDsl.() -> Unit = {}):
      KubernetesPatchProps {
    val builder = KubernetesPatchPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Launch template property specification.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * String userData = "MIME-Version: 1.0\nContent-Type: multipart/mixed;
   * boundary=\"==MYBOUNDARY==\"\n\n--==MYBOUNDARY==\nContent-Type: text/x-shellscript;
   * charset=\"us-ascii\"\n\n#!/bin/bash\necho \"Running custom user data
   * script\"\n\n--==MYBOUNDARY==--\\\n";
   * CfnLaunchTemplate lt = CfnLaunchTemplate.Builder.create(this, "LaunchTemplate")
   * .launchTemplateData(LaunchTemplateDataProperty.builder()
   * .instanceType("t3.small")
   * .userData(Fn.base64(userData))
   * .build())
   * .build();
   * cluster.addNodegroupCapacity("extra-ng", NodegroupOptions.builder()
   * .launchTemplateSpec(LaunchTemplateSpec.builder()
   * .id(lt.getRef())
   * .version(lt.getAttrLatestVersionNumber())
   * .build())
   * .build());
   * ```
   */
  public inline fun launchTemplateSpec(block: LaunchTemplateSpecDsl.() -> Unit = {}):
      LaunchTemplateSpec {
    val builder = LaunchTemplateSpecDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The Nodegroup resource class.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.ec2.*;
   * import software.amazon.awscdk.services.eks.*;
   * import software.amazon.awscdk.services.iam.*;
   * Cluster cluster;
   * InstanceType instanceType;
   * Role role;
   * SecurityGroup securityGroup;
   * Subnet subnet;
   * SubnetFilter subnetFilter;
   * Nodegroup nodegroup = Nodegroup.Builder.create(this, "MyNodegroup")
   * .cluster(cluster)
   * // the properties below are optional
   * .amiType(NodegroupAmiType.AL2_X86_64)
   * .capacityType(CapacityType.SPOT)
   * .desiredSize(123)
   * .diskSize(123)
   * .forceUpdate(false)
   * .instanceTypes(List.of(instanceType))
   * .labels(Map.of(
   * "labelsKey", "labels"))
   * .launchTemplateSpec(LaunchTemplateSpec.builder()
   * .id("id")
   * // the properties below are optional
   * .version("version")
   * .build())
   * .maxSize(123)
   * .minSize(123)
   * .nodegroupName("nodegroupName")
   * .nodeRole(role)
   * .releaseVersion("releaseVersion")
   * .remoteAccess(NodegroupRemoteAccess.builder()
   * .sshKeyName("sshKeyName")
   * // the properties below are optional
   * .sourceSecurityGroups(List.of(securityGroup))
   * .build())
   * .subnets(SubnetSelection.builder()
   * .availabilityZones(List.of("availabilityZones"))
   * .onePerAz(false)
   * .subnetFilters(List.of(subnetFilter))
   * .subnetGroupName("subnetGroupName")
   * .subnets(List.of(subnet))
   * .subnetType(SubnetType.PRIVATE_ISOLATED)
   * .build())
   * .tags(Map.of(
   * "tagsKey", "tags"))
   * .taints(List.of(TaintSpec.builder()
   * .effect(TaintEffect.NO_SCHEDULE)
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   */
  public inline fun nodegroup(
    scope: Construct,
    id: String,
    block: NodegroupDsl.() -> Unit = {},
  ): Nodegroup {
    val builder = NodegroupDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * The Nodegroup Options for addNodeGroup() method.
   *
   * Example:
   *
   * ```
   * Cluster cluster = Cluster.Builder.create(this, "HelloEKS")
   * .version(KubernetesVersion.V1_27)
   * .defaultCapacity(0)
   * .build();
   * cluster.addNodegroupCapacity("custom-node-group", NodegroupOptions.builder()
   * .instanceTypes(List.of(new InstanceType("m5.large")))
   * .minSize(4)
   * .diskSize(100)
   * .amiType(NodegroupAmiType.AL2_X86_64_GPU)
   * .build());
   * ```
   */
  public inline fun nodegroupOptions(block: NodegroupOptionsDsl.() -> Unit = {}): NodegroupOptions {
    val builder = NodegroupOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * NodeGroup properties interface.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.ec2.*;
   * import software.amazon.awscdk.services.eks.*;
   * import software.amazon.awscdk.services.iam.*;
   * Cluster cluster;
   * InstanceType instanceType;
   * Role role;
   * SecurityGroup securityGroup;
   * Subnet subnet;
   * SubnetFilter subnetFilter;
   * NodegroupProps nodegroupProps = NodegroupProps.builder()
   * .cluster(cluster)
   * // the properties below are optional
   * .amiType(NodegroupAmiType.AL2_X86_64)
   * .capacityType(CapacityType.SPOT)
   * .desiredSize(123)
   * .diskSize(123)
   * .forceUpdate(false)
   * .instanceTypes(List.of(instanceType))
   * .labels(Map.of(
   * "labelsKey", "labels"))
   * .launchTemplateSpec(LaunchTemplateSpec.builder()
   * .id("id")
   * // the properties below are optional
   * .version("version")
   * .build())
   * .maxSize(123)
   * .minSize(123)
   * .nodegroupName("nodegroupName")
   * .nodeRole(role)
   * .releaseVersion("releaseVersion")
   * .remoteAccess(NodegroupRemoteAccess.builder()
   * .sshKeyName("sshKeyName")
   * // the properties below are optional
   * .sourceSecurityGroups(List.of(securityGroup))
   * .build())
   * .subnets(SubnetSelection.builder()
   * .availabilityZones(List.of("availabilityZones"))
   * .onePerAz(false)
   * .subnetFilters(List.of(subnetFilter))
   * .subnetGroupName("subnetGroupName")
   * .subnets(List.of(subnet))
   * .subnetType(SubnetType.PRIVATE_ISOLATED)
   * .build())
   * .tags(Map.of(
   * "tagsKey", "tags"))
   * .taints(List.of(TaintSpec.builder()
   * .effect(TaintEffect.NO_SCHEDULE)
   * .key("key")
   * .value("value")
   * .build()))
   * .build();
   * ```
   */
  public inline fun nodegroupProps(block: NodegroupPropsDsl.() -> Unit = {}): NodegroupProps {
    val builder = NodegroupPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * The remote access (SSH) configuration to use with your node group.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.ec2.*;
   * import software.amazon.awscdk.services.eks.*;
   * SecurityGroup securityGroup;
   * NodegroupRemoteAccess nodegroupRemoteAccess = NodegroupRemoteAccess.builder()
   * .sshKeyName("sshKeyName")
   * // the properties below are optional
   * .sourceSecurityGroups(List.of(securityGroup))
   * .build();
   * ```
   *
   * [Documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-eks-nodegroup-remoteaccess.html)
   */
  public inline fun nodegroupRemoteAccess(block: NodegroupRemoteAccessDsl.() -> Unit = {}):
      NodegroupRemoteAccess {
    val builder = NodegroupRemoteAccessDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * IAM OIDC identity providers are entities in IAM that describe an external identity provider
   * (IdP) service that supports the OpenID Connect (OIDC) standard, such as Google or Salesforce.
   *
   * You use an IAM OIDC identity provider
   * when you want to establish trust between an OIDC-compatible IdP and your AWS
   * account.
   *
   * This implementation has default values for thumbprints and clientIds props
   * that will be compatible with the eks cluster
   *
   * Example:
   *
   * ```
   * // or create a new one using an existing issuer url
   * String issuerUrl;
   * // you can import an existing provider
   * IOpenIdConnectProvider provider = OpenIdConnectProvider.fromOpenIdConnectProviderArn(this,
   * "Provider", "arn:aws:iam::123456:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/AB123456ABC");
   * OpenIdConnectProvider provider2 = OpenIdConnectProvider.Builder.create(this, "Provider")
   * .url(issuerUrl)
   * .build();
   * ICluster cluster = Cluster.fromClusterAttributes(this, "MyCluster", ClusterAttributes.builder()
   * .clusterName("Cluster")
   * .openIdConnectProvider(provider)
   * .kubectlRoleArn("arn:aws:iam::123456:role/service-role/k8sservicerole")
   * .build());
   * ServiceAccount serviceAccount = cluster.addServiceAccount("MyServiceAccount");
   * Bucket bucket = new Bucket(this, "Bucket");
   * bucket.grantReadWrite(serviceAccount);
   * ```
   *
   * [Documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html)
   */
  public inline fun openIdConnectProvider(
    scope: Construct,
    id: String,
    block: OpenIdConnectProviderDsl.() -> Unit = {},
  ): OpenIdConnectProvider {
    val builder = OpenIdConnectProviderDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Initialization properties for `OpenIdConnectProvider`.
   *
   * Example:
   *
   * ```
   * // or create a new one using an existing issuer url
   * String issuerUrl;
   * // you can import an existing provider
   * IOpenIdConnectProvider provider = OpenIdConnectProvider.fromOpenIdConnectProviderArn(this,
   * "Provider", "arn:aws:iam::123456:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/AB123456ABC");
   * OpenIdConnectProvider provider2 = OpenIdConnectProvider.Builder.create(this, "Provider")
   * .url(issuerUrl)
   * .build();
   * ICluster cluster = Cluster.fromClusterAttributes(this, "MyCluster", ClusterAttributes.builder()
   * .clusterName("Cluster")
   * .openIdConnectProvider(provider)
   * .kubectlRoleArn("arn:aws:iam::123456:role/service-role/k8sservicerole")
   * .build());
   * ServiceAccount serviceAccount = cluster.addServiceAccount("MyServiceAccount");
   * Bucket bucket = new Bucket(this, "Bucket");
   * bucket.grantReadWrite(serviceAccount);
   * ```
   */
  public inline fun openIdConnectProviderProps(block: OpenIdConnectProviderPropsDsl.() -> Unit =
      {}): OpenIdConnectProviderProps {
    val builder = OpenIdConnectProviderPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Fargate profile selector.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * Selector selector = Selector.builder()
   * .namespace("namespace")
   * // the properties below are optional
   * .labels(Map.of(
   * "labelsKey", "labels"))
   * .build();
   * ```
   */
  public inline fun selector(block: SelectorDsl.() -> Unit = {}): Selector {
    val builder = SelectorDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Service Account.
   *
   * Example:
   *
   * ```
   * // or create a new one using an existing issuer url
   * String issuerUrl;
   * // you can import an existing provider
   * IOpenIdConnectProvider provider = OpenIdConnectProvider.fromOpenIdConnectProviderArn(this,
   * "Provider", "arn:aws:iam::123456:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/AB123456ABC");
   * OpenIdConnectProvider provider2 = OpenIdConnectProvider.Builder.create(this, "Provider")
   * .url(issuerUrl)
   * .build();
   * ICluster cluster = Cluster.fromClusterAttributes(this, "MyCluster", ClusterAttributes.builder()
   * .clusterName("Cluster")
   * .openIdConnectProvider(provider)
   * .kubectlRoleArn("arn:aws:iam::123456:role/service-role/k8sservicerole")
   * .build());
   * ServiceAccount serviceAccount = cluster.addServiceAccount("MyServiceAccount");
   * Bucket bucket = new Bucket(this, "Bucket");
   * bucket.grantReadWrite(serviceAccount);
   * ```
   */
  public inline fun serviceAccount(
    scope: Construct,
    id: String,
    block: ServiceAccountDsl.() -> Unit = {},
  ): ServiceAccount {
    val builder = ServiceAccountDsl(scope, id)
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for `ServiceAccount`.
   *
   * Example:
   *
   * ```
   * Cluster cluster;
   * // add service account with annotations and labels
   * ServiceAccount serviceAccount = cluster.addServiceAccount("MyServiceAccount",
   * ServiceAccountOptions.builder()
   * .annotations(Map.of(
   * "eks.amazonaws.com/sts-regional-endpoints", "false"))
   * .labels(Map.of(
   * "some-label", "with-some-value"))
   * .build());
   * ```
   */
  public inline fun serviceAccountOptions(block: ServiceAccountOptionsDsl.() -> Unit = {}):
      ServiceAccountOptions {
    val builder = ServiceAccountOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Properties for defining service accounts.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * Cluster cluster;
   * ServiceAccountProps serviceAccountProps = ServiceAccountProps.builder()
   * .cluster(cluster)
   * // the properties below are optional
   * .annotations(Map.of(
   * "annotationsKey", "annotations"))
   * .labels(Map.of(
   * "labelsKey", "labels"))
   * .name("name")
   * .namespace("namespace")
   * .build();
   * ```
   */
  public inline fun serviceAccountProps(block: ServiceAccountPropsDsl.() -> Unit = {}):
      ServiceAccountProps {
    val builder = ServiceAccountPropsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Options for fetching a ServiceLoadBalancerAddress.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.*;
   * import software.amazon.awscdk.services.eks.*;
   * ServiceLoadBalancerAddressOptions serviceLoadBalancerAddressOptions =
   * ServiceLoadBalancerAddressOptions.builder()
   * .namespace("namespace")
   * .timeout(Duration.minutes(30))
   * .build();
   * ```
   */
  public inline
      fun serviceLoadBalancerAddressOptions(block: ServiceLoadBalancerAddressOptionsDsl.() -> Unit =
      {}): ServiceLoadBalancerAddressOptions {
    val builder = ServiceLoadBalancerAddressOptionsDsl()
    builder.apply(block)
    return builder.build()
  }

  /**
   * Taint interface.
   *
   * Example:
   *
   * ```
   * // The code below shows an example of how to instantiate this type.
   * // The values are placeholders you should change.
   * import software.amazon.awscdk.services.eks.*;
   * TaintSpec taintSpec = TaintSpec.builder()
   * .effect(TaintEffect.NO_SCHEDULE)
   * .key("key")
   * .value("value")
   * .build();
   * ```
   */
  public inline fun taintSpec(block: TaintSpecDsl.() -> Unit = {}): TaintSpec {
    val builder = TaintSpecDsl()
    builder.apply(block)
    return builder.build()
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy