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

io.cloudshiftdev.awscdk.services.opensearchservice.DomainProps.kt Maven / Gradle / Ivy

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

package io.cloudshiftdev.awscdk.services.opensearchservice

import io.cloudshiftdev.awscdk.RemovalPolicy
import io.cloudshiftdev.awscdk.common.CdkDslMarker
import io.cloudshiftdev.awscdk.common.CdkObject
import io.cloudshiftdev.awscdk.common.CdkObjectWrappers
import io.cloudshiftdev.awscdk.services.ec2.ISecurityGroup
import io.cloudshiftdev.awscdk.services.ec2.IVpc
import io.cloudshiftdev.awscdk.services.ec2.SubnetSelection
import io.cloudshiftdev.awscdk.services.iam.PolicyStatement
import kotlin.Boolean
import kotlin.Number
import kotlin.String
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * Properties for an Amazon OpenSearch Service domain.
 *
 * Example:
 *
 * ```
 * Domain domain = Domain.Builder.create(this, "Domain")
 * .version(EngineVersion.OPENSEARCH_1_0)
 * .ebs(EbsOptions.builder()
 * .volumeSize(100)
 * .volumeType(EbsDeviceVolumeType.GENERAL_PURPOSE_SSD)
 * .build())
 * .nodeToNodeEncryption(true)
 * .encryptionAtRest(EncryptionAtRestOptions.builder()
 * .enabled(true)
 * .build())
 * .build();
 * ```
 */
public interface DomainProps {
  /**
   * Domain access policies.
   *
   * Default: - No access policies.
   */
  public fun accessPolicies(): List =
      unwrap(this).getAccessPolicies()?.map(PolicyStatement::wrap) ?: emptyList()

  /**
   * Additional options to specify for the Amazon OpenSearch Service domain.
   *
   * Default: - no advanced options are specified
   *
   * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomain-configure-advanced-options)
   */
  public fun advancedOptions(): Map = unwrap(this).getAdvancedOptions() ?:
      emptyMap()

  /**
   * The hour in UTC during which the service takes an automated daily snapshot of the indices in
   * the Amazon OpenSearch Service domain.
   *
   * Only applies for Elasticsearch versions
   * below 5.3.
   *
   * Default: - Hourly automated snapshots not used
   */
  public fun automatedSnapshotStartHour(): Number? = unwrap(this).getAutomatedSnapshotStartHour()

  /**
   * The cluster capacity configuration for the Amazon OpenSearch Service domain.
   *
   * Default: - 1 r5.large.search data node; no dedicated master nodes.
   */
  public fun capacity(): CapacityConfig? = unwrap(this).getCapacity()?.let(CapacityConfig::wrap)

  /**
   * Configures Amazon OpenSearch Service to use Amazon Cognito authentication for OpenSearch
   * Dashboards.
   *
   * Default: - Cognito not used for authentication to OpenSearch Dashboards.
   */
  public fun cognitoDashboardsAuth(): CognitoOptions? =
      unwrap(this).getCognitoDashboardsAuth()?.let(CognitoOptions::wrap)

  /**
   * Whether to enable or disable cold storage on the domain.
   *
   * You must enable UltraWarm storage to enable cold storage.
   *
   * Default: - undefined
   *
   * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/cold-storage.html)
   */
  public fun coldStorageEnabled(): Boolean? = unwrap(this).getColdStorageEnabled()

  /**
   * To configure a custom domain configure these options.
   *
   * If you specify a Route53 hosted zone it will create a CNAME record and use DNS validation for
   * the certificate
   *
   * Default: - no custom domain endpoint will be configured
   */
  public fun customEndpoint(): CustomEndpointOptions? =
      unwrap(this).getCustomEndpoint()?.let(CustomEndpointOptions::wrap)

  /**
   * Enforces a particular physical domain name.
   *
   * Default: - A name will be auto-generated.
   */
  public fun domainName(): String? = unwrap(this).getDomainName()

  /**
   * The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are attached to data
   * nodes in the Amazon OpenSearch Service domain.
   *
   * Default: - 10 GiB General Purpose (SSD) volumes per node.
   */
  public fun ebs(): EbsOptions? = unwrap(this).getEbs()?.let(EbsOptions::wrap)

  /**
   * Specifies whether automatic service software updates are enabled for the domain.
   *
   * Default: - false
   *
   * [Documentation](https://docs.aws.amazon.com/it_it/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-softwareupdateoptions.html)
   */
  public fun enableAutoSoftwareUpdate(): Boolean? = unwrap(this).getEnableAutoSoftwareUpdate()

  /**
   * To upgrade an Amazon OpenSearch Service domain to a new version, rather than replacing the
   * entire domain resource, use the EnableVersionUpgrade update policy.
   *
   * Default: - false
   *
   * [Documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-upgradeopensearchdomain)
   */
  public fun enableVersionUpgrade(): Boolean? = unwrap(this).getEnableVersionUpgrade()

  /**
   * Encryption at rest options for the cluster.
   *
   * Default: - No encryption at rest
   */
  public fun encryptionAtRest(): EncryptionAtRestOptions? =
      unwrap(this).getEncryptionAtRest()?.let(EncryptionAtRestOptions::wrap)

  /**
   * True to require that all traffic to the domain arrive over HTTPS.
   *
   * Default: - false
   */
  public fun enforceHttps(): Boolean? = unwrap(this).getEnforceHttps()

  /**
   * Specifies options for fine-grained access control.
   *
   * Requires Elasticsearch version 6.7 or later or OpenSearch version 1.0 or later. Enabling
   * fine-grained access control
   * also requires encryption of data at rest and node-to-node encryption, along with
   * enforced HTTPS.
   *
   * Default: - fine-grained access control is disabled
   */
  public fun fineGrainedAccessControl(): AdvancedSecurityOptions? =
      unwrap(this).getFineGrainedAccessControl()?.let(AdvancedSecurityOptions::wrap)

  /**
   * Specify either dual stack or IPv4 as your IP address type.
   *
   * Dual stack allows you to share domain resources across IPv4 and IPv6 address types, and is the
   * recommended option.
   *
   * If you set your IP address type to dual stack, you can't change your address type later.
   *
   * Default: - IpAddressType.IPV4
   */
  public fun ipAddressType(): IpAddressType? =
      unwrap(this).getIpAddressType()?.let(IpAddressType::wrap)

  /**
   * Configuration log publishing configuration options.
   *
   * Default: - No logs are published
   */
  public fun logging(): LoggingOptions? = unwrap(this).getLogging()?.let(LoggingOptions::wrap)

  /**
   * Specify true to enable node to node encryption.
   *
   * Requires Elasticsearch version 6.0 or later or OpenSearch version 1.0 or later.
   *
   * Default: - Node to node encryption is not enabled.
   */
  public fun nodeToNodeEncryption(): Boolean? = unwrap(this).getNodeToNodeEncryption()

  /**
   * Options for enabling a domain's off-peak window, during which OpenSearch Service can perform
   * mandatory configuration changes on the domain.
   *
   * Off-peak windows were introduced on February 16, 2023.
   * All domains created before this date have the off-peak window disabled by default.
   * You must manually enable and configure the off-peak window for these domains.
   * All domains created after this date will have the off-peak window enabled by default.
   * You can't disable the off-peak window for a domain after it's enabled.
   *
   * Default: - Disabled for domains created before February 16, 2023. Enabled for domains created
   * after. Enabled if `offPeakWindowStart` is set.
   *
   * [Documentation](https://docs.aws.amazon.com/it_it/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-offpeakwindow.html)
   */
  public fun offPeakWindowEnabled(): Boolean? = unwrap(this).getOffPeakWindowEnabled()

  /**
   * Start time for the off-peak window, in Coordinated Universal Time (UTC).
   *
   * The window length will always be 10 hours, so you can't specify an end time.
   * For example, if you specify 11:00 P.M. UTC as a start time, the end time will automatically be
   * set to 9:00 A.M.
   *
   * Default: - 10:00 P.M. local time
   */
  public fun offPeakWindowStart(): WindowStartTime? =
      unwrap(this).getOffPeakWindowStart()?.let(WindowStartTime::wrap)

  /**
   * Policy to apply when the domain is removed from the stack.
   *
   * Default: RemovalPolicy.RETAIN
   */
  public fun removalPolicy(): RemovalPolicy? =
      unwrap(this).getRemovalPolicy()?.let(RemovalPolicy::wrap)

  /**
   * The list of security groups that are associated with the VPC endpoints for the domain.
   *
   * Only used if `vpc` is specified.
   *
   * Default: - One new security group is created.
   *
   * [Documentation](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)
   */
  public fun securityGroups(): List =
      unwrap(this).getSecurityGroups()?.map(ISecurityGroup::wrap) ?: emptyList()

  /**
   * Specify whether to create a CloudWatch Logs resource policy or not.
   *
   * When logging is enabled for the domain, a CloudWatch Logs resource policy is created by
   * default.
   * However, CloudWatch Logs supports only 10 resource policies per region.
   * If you enable logging for several domains, it may hit the quota and cause an error.
   * By setting this property to true, creating a resource policy is suppressed, allowing you to
   * avoid this problem.
   *
   * If you set this option to true, you must create a resource policy before deployment.
   *
   * Default: - false
   *
   * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createdomain-configure-slow-logs.html)
   */
  public fun suppressLogsResourcePolicy(): Boolean? = unwrap(this).getSuppressLogsResourcePolicy()

  /**
   * The minimum TLS version required for traffic to the domain.
   *
   * Default: - TLSSecurityPolicy.TLS_1_0
   */
  public fun tlsSecurityPolicy(): TLSSecurityPolicy? =
      unwrap(this).getTlsSecurityPolicy()?.let(TLSSecurityPolicy::wrap)

  /**
   * Configures the domain so that unsigned basic auth is enabled.
   *
   * If no master user is provided a default master user
   * with username `admin` and a dynamically generated password stored in KMS is created. The
   * password can be retrieved
   * by getting `masterUserPassword` from the domain instance.
   *
   * Setting this to true will also add an access policy that allows unsigned
   * access, enable node to node encryption, encryption at rest. If conflicting
   * settings are encountered (like disabling encryption at rest) enabling this
   * setting will cause a failure.
   *
   * Default: - false
   */
  public fun useUnsignedBasicAuth(): Boolean? = unwrap(this).getUseUnsignedBasicAuth()

  /**
   * The Elasticsearch/OpenSearch version that your domain will leverage.
   */
  public fun version(): EngineVersion

  /**
   * Place the domain inside this VPC.
   *
   * Default: - Domain is not placed in a VPC.
   *
   * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)
   */
  public fun vpc(): IVpc? = unwrap(this).getVpc()?.let(IVpc::wrap)

  /**
   * The specific vpc subnets the domain will be placed in.
   *
   * You must provide one subnet for each Availability Zone
   * that your domain uses. For example, you must specify three subnet IDs for a three Availability
   * Zone
   * domain.
   *
   * Only used if `vpc` is specified.
   *
   * Default: - All private subnets.
   *
   * [Documentation](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)
   */
  public fun vpcSubnets(): List =
      unwrap(this).getVpcSubnets()?.map(SubnetSelection::wrap) ?: emptyList()

  /**
   * The cluster zone awareness configuration for the Amazon OpenSearch Service domain.
   *
   * Default: - no zone awareness (1 AZ)
   */
  public fun zoneAwareness(): ZoneAwarenessConfig? =
      unwrap(this).getZoneAwareness()?.let(ZoneAwarenessConfig::wrap)

  /**
   * A builder for [DomainProps]
   */
  @CdkDslMarker
  public interface Builder {
    /**
     * @param accessPolicies Domain access policies.
     */
    public fun accessPolicies(accessPolicies: List)

    /**
     * @param accessPolicies Domain access policies.
     */
    public fun accessPolicies(vararg accessPolicies: PolicyStatement)

    /**
     * @param advancedOptions Additional options to specify for the Amazon OpenSearch Service
     * domain.
     */
    public fun advancedOptions(advancedOptions: Map)

    /**
     * @param automatedSnapshotStartHour The hour in UTC during which the service takes an automated
     * daily snapshot of the indices in the Amazon OpenSearch Service domain.
     * Only applies for Elasticsearch versions
     * below 5.3.
     */
    public fun automatedSnapshotStartHour(automatedSnapshotStartHour: Number)

    /**
     * @param capacity The cluster capacity configuration for the Amazon OpenSearch Service domain.
     */
    public fun capacity(capacity: CapacityConfig)

    /**
     * @param capacity The cluster capacity configuration for the Amazon OpenSearch Service domain.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("d17b221e87d243df16c7252c6ebb457f876efd1c16e0fc27b4390f1c30df304b")
    public fun capacity(capacity: CapacityConfig.Builder.() -> Unit)

    /**
     * @param cognitoDashboardsAuth Configures Amazon OpenSearch Service to use Amazon Cognito
     * authentication for OpenSearch Dashboards.
     */
    public fun cognitoDashboardsAuth(cognitoDashboardsAuth: CognitoOptions)

    /**
     * @param cognitoDashboardsAuth Configures Amazon OpenSearch Service to use Amazon Cognito
     * authentication for OpenSearch Dashboards.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("f7b0909f0598e484969e326b739d47118b07ab6ec85c8226ca4af46f560057a7")
    public fun cognitoDashboardsAuth(cognitoDashboardsAuth: CognitoOptions.Builder.() -> Unit)

    /**
     * @param coldStorageEnabled Whether to enable or disable cold storage on the domain.
     * You must enable UltraWarm storage to enable cold storage.
     */
    public fun coldStorageEnabled(coldStorageEnabled: Boolean)

    /**
     * @param customEndpoint To configure a custom domain configure these options.
     * If you specify a Route53 hosted zone it will create a CNAME record and use DNS validation for
     * the certificate
     */
    public fun customEndpoint(customEndpoint: CustomEndpointOptions)

    /**
     * @param customEndpoint To configure a custom domain configure these options.
     * If you specify a Route53 hosted zone it will create a CNAME record and use DNS validation for
     * the certificate
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("fdf5b2d75b35bcdddb04ffe29da4de4c9e4bf733b565a995741a0537ac14a7b9")
    public fun customEndpoint(customEndpoint: CustomEndpointOptions.Builder.() -> Unit)

    /**
     * @param domainName Enforces a particular physical domain name.
     */
    public fun domainName(domainName: String)

    /**
     * @param ebs The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are
     * attached to data nodes in the Amazon OpenSearch Service domain.
     */
    public fun ebs(ebs: EbsOptions)

    /**
     * @param ebs The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are
     * attached to data nodes in the Amazon OpenSearch Service domain.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("9001bb79f0578857cecc95ce96cf807ea71335c7e4d4e8c72e2c6221420d13b0")
    public fun ebs(ebs: EbsOptions.Builder.() -> Unit)

    /**
     * @param enableAutoSoftwareUpdate Specifies whether automatic service software updates are
     * enabled for the domain.
     */
    public fun enableAutoSoftwareUpdate(enableAutoSoftwareUpdate: Boolean)

    /**
     * @param enableVersionUpgrade To upgrade an Amazon OpenSearch Service domain to a new version,
     * rather than replacing the entire domain resource, use the EnableVersionUpgrade update policy.
     */
    public fun enableVersionUpgrade(enableVersionUpgrade: Boolean)

    /**
     * @param encryptionAtRest Encryption at rest options for the cluster.
     */
    public fun encryptionAtRest(encryptionAtRest: EncryptionAtRestOptions)

    /**
     * @param encryptionAtRest Encryption at rest options for the cluster.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("ed3218d8f8662ab49b5919a4e80ec6ccb6b765caa314fdef579be7c881f5c5c9")
    public fun encryptionAtRest(encryptionAtRest: EncryptionAtRestOptions.Builder.() -> Unit)

    /**
     * @param enforceHttps True to require that all traffic to the domain arrive over HTTPS.
     */
    public fun enforceHttps(enforceHttps: Boolean)

    /**
     * @param fineGrainedAccessControl Specifies options for fine-grained access control.
     * Requires Elasticsearch version 6.7 or later or OpenSearch version 1.0 or later. Enabling
     * fine-grained access control
     * also requires encryption of data at rest and node-to-node encryption, along with
     * enforced HTTPS.
     */
    public fun fineGrainedAccessControl(fineGrainedAccessControl: AdvancedSecurityOptions)

    /**
     * @param fineGrainedAccessControl Specifies options for fine-grained access control.
     * Requires Elasticsearch version 6.7 or later or OpenSearch version 1.0 or later. Enabling
     * fine-grained access control
     * also requires encryption of data at rest and node-to-node encryption, along with
     * enforced HTTPS.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("0451d562325cd4aabdf0096513de3e8ffcba6027563de5d5fb19f0f1190359f5")
    public
        fun fineGrainedAccessControl(fineGrainedAccessControl: AdvancedSecurityOptions.Builder.() -> Unit)

    /**
     * @param ipAddressType Specify either dual stack or IPv4 as your IP address type.
     * Dual stack allows you to share domain resources across IPv4 and IPv6 address types, and is
     * the recommended option.
     *
     * If you set your IP address type to dual stack, you can't change your address type later.
     */
    public fun ipAddressType(ipAddressType: IpAddressType)

    /**
     * @param logging Configuration log publishing configuration options.
     */
    public fun logging(logging: LoggingOptions)

    /**
     * @param logging Configuration log publishing configuration options.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("18c4305abd171c7ac1ab935481ae51bb0128240a90888efbfc49e28faef3f3d7")
    public fun logging(logging: LoggingOptions.Builder.() -> Unit)

    /**
     * @param nodeToNodeEncryption Specify true to enable node to node encryption.
     * Requires Elasticsearch version 6.0 or later or OpenSearch version 1.0 or later.
     */
    public fun nodeToNodeEncryption(nodeToNodeEncryption: Boolean)

    /**
     * @param offPeakWindowEnabled Options for enabling a domain's off-peak window, during which
     * OpenSearch Service can perform mandatory configuration changes on the domain.
     * Off-peak windows were introduced on February 16, 2023.
     * All domains created before this date have the off-peak window disabled by default.
     * You must manually enable and configure the off-peak window for these domains.
     * All domains created after this date will have the off-peak window enabled by default.
     * You can't disable the off-peak window for a domain after it's enabled.
     */
    public fun offPeakWindowEnabled(offPeakWindowEnabled: Boolean)

    /**
     * @param offPeakWindowStart Start time for the off-peak window, in Coordinated Universal Time
     * (UTC).
     * The window length will always be 10 hours, so you can't specify an end time.
     * For example, if you specify 11:00 P.M. UTC as a start time, the end time will automatically
     * be set to 9:00 A.M.
     */
    public fun offPeakWindowStart(offPeakWindowStart: WindowStartTime)

    /**
     * @param offPeakWindowStart Start time for the off-peak window, in Coordinated Universal Time
     * (UTC).
     * The window length will always be 10 hours, so you can't specify an end time.
     * For example, if you specify 11:00 P.M. UTC as a start time, the end time will automatically
     * be set to 9:00 A.M.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("7a7241b81db94838055df7bc3fb613e6fbbe54d245153be4d536750027c8d210")
    public fun offPeakWindowStart(offPeakWindowStart: WindowStartTime.Builder.() -> Unit)

    /**
     * @param removalPolicy Policy to apply when the domain is removed from the stack.
     */
    public fun removalPolicy(removalPolicy: RemovalPolicy)

    /**
     * @param securityGroups The list of security groups that are associated with the VPC endpoints
     * for the domain.
     * Only used if `vpc` is specified.
     */
    public fun securityGroups(securityGroups: List)

    /**
     * @param securityGroups The list of security groups that are associated with the VPC endpoints
     * for the domain.
     * Only used if `vpc` is specified.
     */
    public fun securityGroups(vararg securityGroups: ISecurityGroup)

    /**
     * @param suppressLogsResourcePolicy Specify whether to create a CloudWatch Logs resource policy
     * or not.
     * When logging is enabled for the domain, a CloudWatch Logs resource policy is created by
     * default.
     * However, CloudWatch Logs supports only 10 resource policies per region.
     * If you enable logging for several domains, it may hit the quota and cause an error.
     * By setting this property to true, creating a resource policy is suppressed, allowing you to
     * avoid this problem.
     *
     * If you set this option to true, you must create a resource policy before deployment.
     */
    public fun suppressLogsResourcePolicy(suppressLogsResourcePolicy: Boolean)

    /**
     * @param tlsSecurityPolicy The minimum TLS version required for traffic to the domain.
     */
    public fun tlsSecurityPolicy(tlsSecurityPolicy: TLSSecurityPolicy)

    /**
     * @param useUnsignedBasicAuth Configures the domain so that unsigned basic auth is enabled.
     * If no master user is provided a default master user
     * with username `admin` and a dynamically generated password stored in KMS is created. The
     * password can be retrieved
     * by getting `masterUserPassword` from the domain instance.
     *
     * Setting this to true will also add an access policy that allows unsigned
     * access, enable node to node encryption, encryption at rest. If conflicting
     * settings are encountered (like disabling encryption at rest) enabling this
     * setting will cause a failure.
     */
    public fun useUnsignedBasicAuth(useUnsignedBasicAuth: Boolean)

    /**
     * @param version The Elasticsearch/OpenSearch version that your domain will leverage. 
     */
    public fun version(version: EngineVersion)

    /**
     * @param vpc Place the domain inside this VPC.
     */
    public fun vpc(vpc: IVpc)

    /**
     * @param vpcSubnets The specific vpc subnets the domain will be placed in.
     * You must provide one subnet for each Availability Zone
     * that your domain uses. For example, you must specify three subnet IDs for a three
     * Availability Zone
     * domain.
     *
     * Only used if `vpc` is specified.
     */
    public fun vpcSubnets(vpcSubnets: List)

    /**
     * @param vpcSubnets The specific vpc subnets the domain will be placed in.
     * You must provide one subnet for each Availability Zone
     * that your domain uses. For example, you must specify three subnet IDs for a three
     * Availability Zone
     * domain.
     *
     * Only used if `vpc` is specified.
     */
    public fun vpcSubnets(vararg vpcSubnets: SubnetSelection)

    /**
     * @param zoneAwareness The cluster zone awareness configuration for the Amazon OpenSearch
     * Service domain.
     */
    public fun zoneAwareness(zoneAwareness: ZoneAwarenessConfig)

    /**
     * @param zoneAwareness The cluster zone awareness configuration for the Amazon OpenSearch
     * Service domain.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("405ef68e0f28476fbc594af980692b73b8b213552bcce55e1e8ac5a96a025481")
    public fun zoneAwareness(zoneAwareness: ZoneAwarenessConfig.Builder.() -> Unit)
  }

  private class BuilderImpl : Builder {
    private val cdkBuilder: software.amazon.awscdk.services.opensearchservice.DomainProps.Builder =
        software.amazon.awscdk.services.opensearchservice.DomainProps.builder()

    /**
     * @param accessPolicies Domain access policies.
     */
    override fun accessPolicies(accessPolicies: List) {
      cdkBuilder.accessPolicies(accessPolicies.map(PolicyStatement.Companion::unwrap))
    }

    /**
     * @param accessPolicies Domain access policies.
     */
    override fun accessPolicies(vararg accessPolicies: PolicyStatement): Unit =
        accessPolicies(accessPolicies.toList())

    /**
     * @param advancedOptions Additional options to specify for the Amazon OpenSearch Service
     * domain.
     */
    override fun advancedOptions(advancedOptions: Map) {
      cdkBuilder.advancedOptions(advancedOptions)
    }

    /**
     * @param automatedSnapshotStartHour The hour in UTC during which the service takes an automated
     * daily snapshot of the indices in the Amazon OpenSearch Service domain.
     * Only applies for Elasticsearch versions
     * below 5.3.
     */
    override fun automatedSnapshotStartHour(automatedSnapshotStartHour: Number) {
      cdkBuilder.automatedSnapshotStartHour(automatedSnapshotStartHour)
    }

    /**
     * @param capacity The cluster capacity configuration for the Amazon OpenSearch Service domain.
     */
    override fun capacity(capacity: CapacityConfig) {
      cdkBuilder.capacity(capacity.let(CapacityConfig.Companion::unwrap))
    }

    /**
     * @param capacity The cluster capacity configuration for the Amazon OpenSearch Service domain.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("d17b221e87d243df16c7252c6ebb457f876efd1c16e0fc27b4390f1c30df304b")
    override fun capacity(capacity: CapacityConfig.Builder.() -> Unit): Unit =
        capacity(CapacityConfig(capacity))

    /**
     * @param cognitoDashboardsAuth Configures Amazon OpenSearch Service to use Amazon Cognito
     * authentication for OpenSearch Dashboards.
     */
    override fun cognitoDashboardsAuth(cognitoDashboardsAuth: CognitoOptions) {
      cdkBuilder.cognitoDashboardsAuth(cognitoDashboardsAuth.let(CognitoOptions.Companion::unwrap))
    }

    /**
     * @param cognitoDashboardsAuth Configures Amazon OpenSearch Service to use Amazon Cognito
     * authentication for OpenSearch Dashboards.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("f7b0909f0598e484969e326b739d47118b07ab6ec85c8226ca4af46f560057a7")
    override fun cognitoDashboardsAuth(cognitoDashboardsAuth: CognitoOptions.Builder.() -> Unit):
        Unit = cognitoDashboardsAuth(CognitoOptions(cognitoDashboardsAuth))

    /**
     * @param coldStorageEnabled Whether to enable or disable cold storage on the domain.
     * You must enable UltraWarm storage to enable cold storage.
     */
    override fun coldStorageEnabled(coldStorageEnabled: Boolean) {
      cdkBuilder.coldStorageEnabled(coldStorageEnabled)
    }

    /**
     * @param customEndpoint To configure a custom domain configure these options.
     * If you specify a Route53 hosted zone it will create a CNAME record and use DNS validation for
     * the certificate
     */
    override fun customEndpoint(customEndpoint: CustomEndpointOptions) {
      cdkBuilder.customEndpoint(customEndpoint.let(CustomEndpointOptions.Companion::unwrap))
    }

    /**
     * @param customEndpoint To configure a custom domain configure these options.
     * If you specify a Route53 hosted zone it will create a CNAME record and use DNS validation for
     * the certificate
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("fdf5b2d75b35bcdddb04ffe29da4de4c9e4bf733b565a995741a0537ac14a7b9")
    override fun customEndpoint(customEndpoint: CustomEndpointOptions.Builder.() -> Unit): Unit =
        customEndpoint(CustomEndpointOptions(customEndpoint))

    /**
     * @param domainName Enforces a particular physical domain name.
     */
    override fun domainName(domainName: String) {
      cdkBuilder.domainName(domainName)
    }

    /**
     * @param ebs The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are
     * attached to data nodes in the Amazon OpenSearch Service domain.
     */
    override fun ebs(ebs: EbsOptions) {
      cdkBuilder.ebs(ebs.let(EbsOptions.Companion::unwrap))
    }

    /**
     * @param ebs The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are
     * attached to data nodes in the Amazon OpenSearch Service domain.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("9001bb79f0578857cecc95ce96cf807ea71335c7e4d4e8c72e2c6221420d13b0")
    override fun ebs(ebs: EbsOptions.Builder.() -> Unit): Unit = ebs(EbsOptions(ebs))

    /**
     * @param enableAutoSoftwareUpdate Specifies whether automatic service software updates are
     * enabled for the domain.
     */
    override fun enableAutoSoftwareUpdate(enableAutoSoftwareUpdate: Boolean) {
      cdkBuilder.enableAutoSoftwareUpdate(enableAutoSoftwareUpdate)
    }

    /**
     * @param enableVersionUpgrade To upgrade an Amazon OpenSearch Service domain to a new version,
     * rather than replacing the entire domain resource, use the EnableVersionUpgrade update policy.
     */
    override fun enableVersionUpgrade(enableVersionUpgrade: Boolean) {
      cdkBuilder.enableVersionUpgrade(enableVersionUpgrade)
    }

    /**
     * @param encryptionAtRest Encryption at rest options for the cluster.
     */
    override fun encryptionAtRest(encryptionAtRest: EncryptionAtRestOptions) {
      cdkBuilder.encryptionAtRest(encryptionAtRest.let(EncryptionAtRestOptions.Companion::unwrap))
    }

    /**
     * @param encryptionAtRest Encryption at rest options for the cluster.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("ed3218d8f8662ab49b5919a4e80ec6ccb6b765caa314fdef579be7c881f5c5c9")
    override fun encryptionAtRest(encryptionAtRest: EncryptionAtRestOptions.Builder.() -> Unit):
        Unit = encryptionAtRest(EncryptionAtRestOptions(encryptionAtRest))

    /**
     * @param enforceHttps True to require that all traffic to the domain arrive over HTTPS.
     */
    override fun enforceHttps(enforceHttps: Boolean) {
      cdkBuilder.enforceHttps(enforceHttps)
    }

    /**
     * @param fineGrainedAccessControl Specifies options for fine-grained access control.
     * Requires Elasticsearch version 6.7 or later or OpenSearch version 1.0 or later. Enabling
     * fine-grained access control
     * also requires encryption of data at rest and node-to-node encryption, along with
     * enforced HTTPS.
     */
    override fun fineGrainedAccessControl(fineGrainedAccessControl: AdvancedSecurityOptions) {
      cdkBuilder.fineGrainedAccessControl(fineGrainedAccessControl.let(AdvancedSecurityOptions.Companion::unwrap))
    }

    /**
     * @param fineGrainedAccessControl Specifies options for fine-grained access control.
     * Requires Elasticsearch version 6.7 or later or OpenSearch version 1.0 or later. Enabling
     * fine-grained access control
     * also requires encryption of data at rest and node-to-node encryption, along with
     * enforced HTTPS.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("0451d562325cd4aabdf0096513de3e8ffcba6027563de5d5fb19f0f1190359f5")
    override
        fun fineGrainedAccessControl(fineGrainedAccessControl: AdvancedSecurityOptions.Builder.() -> Unit):
        Unit = fineGrainedAccessControl(AdvancedSecurityOptions(fineGrainedAccessControl))

    /**
     * @param ipAddressType Specify either dual stack or IPv4 as your IP address type.
     * Dual stack allows you to share domain resources across IPv4 and IPv6 address types, and is
     * the recommended option.
     *
     * If you set your IP address type to dual stack, you can't change your address type later.
     */
    override fun ipAddressType(ipAddressType: IpAddressType) {
      cdkBuilder.ipAddressType(ipAddressType.let(IpAddressType.Companion::unwrap))
    }

    /**
     * @param logging Configuration log publishing configuration options.
     */
    override fun logging(logging: LoggingOptions) {
      cdkBuilder.logging(logging.let(LoggingOptions.Companion::unwrap))
    }

    /**
     * @param logging Configuration log publishing configuration options.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("18c4305abd171c7ac1ab935481ae51bb0128240a90888efbfc49e28faef3f3d7")
    override fun logging(logging: LoggingOptions.Builder.() -> Unit): Unit =
        logging(LoggingOptions(logging))

    /**
     * @param nodeToNodeEncryption Specify true to enable node to node encryption.
     * Requires Elasticsearch version 6.0 or later or OpenSearch version 1.0 or later.
     */
    override fun nodeToNodeEncryption(nodeToNodeEncryption: Boolean) {
      cdkBuilder.nodeToNodeEncryption(nodeToNodeEncryption)
    }

    /**
     * @param offPeakWindowEnabled Options for enabling a domain's off-peak window, during which
     * OpenSearch Service can perform mandatory configuration changes on the domain.
     * Off-peak windows were introduced on February 16, 2023.
     * All domains created before this date have the off-peak window disabled by default.
     * You must manually enable and configure the off-peak window for these domains.
     * All domains created after this date will have the off-peak window enabled by default.
     * You can't disable the off-peak window for a domain after it's enabled.
     */
    override fun offPeakWindowEnabled(offPeakWindowEnabled: Boolean) {
      cdkBuilder.offPeakWindowEnabled(offPeakWindowEnabled)
    }

    /**
     * @param offPeakWindowStart Start time for the off-peak window, in Coordinated Universal Time
     * (UTC).
     * The window length will always be 10 hours, so you can't specify an end time.
     * For example, if you specify 11:00 P.M. UTC as a start time, the end time will automatically
     * be set to 9:00 A.M.
     */
    override fun offPeakWindowStart(offPeakWindowStart: WindowStartTime) {
      cdkBuilder.offPeakWindowStart(offPeakWindowStart.let(WindowStartTime.Companion::unwrap))
    }

    /**
     * @param offPeakWindowStart Start time for the off-peak window, in Coordinated Universal Time
     * (UTC).
     * The window length will always be 10 hours, so you can't specify an end time.
     * For example, if you specify 11:00 P.M. UTC as a start time, the end time will automatically
     * be set to 9:00 A.M.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("7a7241b81db94838055df7bc3fb613e6fbbe54d245153be4d536750027c8d210")
    override fun offPeakWindowStart(offPeakWindowStart: WindowStartTime.Builder.() -> Unit): Unit =
        offPeakWindowStart(WindowStartTime(offPeakWindowStart))

    /**
     * @param removalPolicy Policy to apply when the domain is removed from the stack.
     */
    override fun removalPolicy(removalPolicy: RemovalPolicy) {
      cdkBuilder.removalPolicy(removalPolicy.let(RemovalPolicy.Companion::unwrap))
    }

    /**
     * @param securityGroups The list of security groups that are associated with the VPC endpoints
     * for the domain.
     * Only used if `vpc` is specified.
     */
    override fun securityGroups(securityGroups: List) {
      cdkBuilder.securityGroups(securityGroups.map(ISecurityGroup.Companion::unwrap))
    }

    /**
     * @param securityGroups The list of security groups that are associated with the VPC endpoints
     * for the domain.
     * Only used if `vpc` is specified.
     */
    override fun securityGroups(vararg securityGroups: ISecurityGroup): Unit =
        securityGroups(securityGroups.toList())

    /**
     * @param suppressLogsResourcePolicy Specify whether to create a CloudWatch Logs resource policy
     * or not.
     * When logging is enabled for the domain, a CloudWatch Logs resource policy is created by
     * default.
     * However, CloudWatch Logs supports only 10 resource policies per region.
     * If you enable logging for several domains, it may hit the quota and cause an error.
     * By setting this property to true, creating a resource policy is suppressed, allowing you to
     * avoid this problem.
     *
     * If you set this option to true, you must create a resource policy before deployment.
     */
    override fun suppressLogsResourcePolicy(suppressLogsResourcePolicy: Boolean) {
      cdkBuilder.suppressLogsResourcePolicy(suppressLogsResourcePolicy)
    }

    /**
     * @param tlsSecurityPolicy The minimum TLS version required for traffic to the domain.
     */
    override fun tlsSecurityPolicy(tlsSecurityPolicy: TLSSecurityPolicy) {
      cdkBuilder.tlsSecurityPolicy(tlsSecurityPolicy.let(TLSSecurityPolicy.Companion::unwrap))
    }

    /**
     * @param useUnsignedBasicAuth Configures the domain so that unsigned basic auth is enabled.
     * If no master user is provided a default master user
     * with username `admin` and a dynamically generated password stored in KMS is created. The
     * password can be retrieved
     * by getting `masterUserPassword` from the domain instance.
     *
     * Setting this to true will also add an access policy that allows unsigned
     * access, enable node to node encryption, encryption at rest. If conflicting
     * settings are encountered (like disabling encryption at rest) enabling this
     * setting will cause a failure.
     */
    override fun useUnsignedBasicAuth(useUnsignedBasicAuth: Boolean) {
      cdkBuilder.useUnsignedBasicAuth(useUnsignedBasicAuth)
    }

    /**
     * @param version The Elasticsearch/OpenSearch version that your domain will leverage. 
     */
    override fun version(version: EngineVersion) {
      cdkBuilder.version(version.let(EngineVersion.Companion::unwrap))
    }

    /**
     * @param vpc Place the domain inside this VPC.
     */
    override fun vpc(vpc: IVpc) {
      cdkBuilder.vpc(vpc.let(IVpc.Companion::unwrap))
    }

    /**
     * @param vpcSubnets The specific vpc subnets the domain will be placed in.
     * You must provide one subnet for each Availability Zone
     * that your domain uses. For example, you must specify three subnet IDs for a three
     * Availability Zone
     * domain.
     *
     * Only used if `vpc` is specified.
     */
    override fun vpcSubnets(vpcSubnets: List) {
      cdkBuilder.vpcSubnets(vpcSubnets.map(SubnetSelection.Companion::unwrap))
    }

    /**
     * @param vpcSubnets The specific vpc subnets the domain will be placed in.
     * You must provide one subnet for each Availability Zone
     * that your domain uses. For example, you must specify three subnet IDs for a three
     * Availability Zone
     * domain.
     *
     * Only used if `vpc` is specified.
     */
    override fun vpcSubnets(vararg vpcSubnets: SubnetSelection): Unit =
        vpcSubnets(vpcSubnets.toList())

    /**
     * @param zoneAwareness The cluster zone awareness configuration for the Amazon OpenSearch
     * Service domain.
     */
    override fun zoneAwareness(zoneAwareness: ZoneAwarenessConfig) {
      cdkBuilder.zoneAwareness(zoneAwareness.let(ZoneAwarenessConfig.Companion::unwrap))
    }

    /**
     * @param zoneAwareness The cluster zone awareness configuration for the Amazon OpenSearch
     * Service domain.
     */
    @kotlin.Suppress("INAPPLICABLE_JVM_NAME")
    @JvmName("405ef68e0f28476fbc594af980692b73b8b213552bcce55e1e8ac5a96a025481")
    override fun zoneAwareness(zoneAwareness: ZoneAwarenessConfig.Builder.() -> Unit): Unit =
        zoneAwareness(ZoneAwarenessConfig(zoneAwareness))

    public fun build(): software.amazon.awscdk.services.opensearchservice.DomainProps =
        cdkBuilder.build()
  }

  private class Wrapper(
    cdkObject: software.amazon.awscdk.services.opensearchservice.DomainProps,
  ) : CdkObject(cdkObject),
      DomainProps {
    /**
     * Domain access policies.
     *
     * Default: - No access policies.
     */
    override fun accessPolicies(): List =
        unwrap(this).getAccessPolicies()?.map(PolicyStatement::wrap) ?: emptyList()

    /**
     * Additional options to specify for the Amazon OpenSearch Service domain.
     *
     * Default: - no advanced options are specified
     *
     * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomain-configure-advanced-options)
     */
    override fun advancedOptions(): Map = unwrap(this).getAdvancedOptions() ?:
        emptyMap()

    /**
     * The hour in UTC during which the service takes an automated daily snapshot of the indices in
     * the Amazon OpenSearch Service domain.
     *
     * Only applies for Elasticsearch versions
     * below 5.3.
     *
     * Default: - Hourly automated snapshots not used
     */
    override fun automatedSnapshotStartHour(): Number? =
        unwrap(this).getAutomatedSnapshotStartHour()

    /**
     * The cluster capacity configuration for the Amazon OpenSearch Service domain.
     *
     * Default: - 1 r5.large.search data node; no dedicated master nodes.
     */
    override fun capacity(): CapacityConfig? = unwrap(this).getCapacity()?.let(CapacityConfig::wrap)

    /**
     * Configures Amazon OpenSearch Service to use Amazon Cognito authentication for OpenSearch
     * Dashboards.
     *
     * Default: - Cognito not used for authentication to OpenSearch Dashboards.
     */
    override fun cognitoDashboardsAuth(): CognitoOptions? =
        unwrap(this).getCognitoDashboardsAuth()?.let(CognitoOptions::wrap)

    /**
     * Whether to enable or disable cold storage on the domain.
     *
     * You must enable UltraWarm storage to enable cold storage.
     *
     * Default: - undefined
     *
     * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/cold-storage.html)
     */
    override fun coldStorageEnabled(): Boolean? = unwrap(this).getColdStorageEnabled()

    /**
     * To configure a custom domain configure these options.
     *
     * If you specify a Route53 hosted zone it will create a CNAME record and use DNS validation for
     * the certificate
     *
     * Default: - no custom domain endpoint will be configured
     */
    override fun customEndpoint(): CustomEndpointOptions? =
        unwrap(this).getCustomEndpoint()?.let(CustomEndpointOptions::wrap)

    /**
     * Enforces a particular physical domain name.
     *
     * Default: - A name will be auto-generated.
     */
    override fun domainName(): String? = unwrap(this).getDomainName()

    /**
     * The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are attached to
     * data nodes in the Amazon OpenSearch Service domain.
     *
     * Default: - 10 GiB General Purpose (SSD) volumes per node.
     */
    override fun ebs(): EbsOptions? = unwrap(this).getEbs()?.let(EbsOptions::wrap)

    /**
     * Specifies whether automatic service software updates are enabled for the domain.
     *
     * Default: - false
     *
     * [Documentation](https://docs.aws.amazon.com/it_it/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-softwareupdateoptions.html)
     */
    override fun enableAutoSoftwareUpdate(): Boolean? = unwrap(this).getEnableAutoSoftwareUpdate()

    /**
     * To upgrade an Amazon OpenSearch Service domain to a new version, rather than replacing the
     * entire domain resource, use the EnableVersionUpgrade update policy.
     *
     * Default: - false
     *
     * [Documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-upgradeopensearchdomain)
     */
    override fun enableVersionUpgrade(): Boolean? = unwrap(this).getEnableVersionUpgrade()

    /**
     * Encryption at rest options for the cluster.
     *
     * Default: - No encryption at rest
     */
    override fun encryptionAtRest(): EncryptionAtRestOptions? =
        unwrap(this).getEncryptionAtRest()?.let(EncryptionAtRestOptions::wrap)

    /**
     * True to require that all traffic to the domain arrive over HTTPS.
     *
     * Default: - false
     */
    override fun enforceHttps(): Boolean? = unwrap(this).getEnforceHttps()

    /**
     * Specifies options for fine-grained access control.
     *
     * Requires Elasticsearch version 6.7 or later or OpenSearch version 1.0 or later. Enabling
     * fine-grained access control
     * also requires encryption of data at rest and node-to-node encryption, along with
     * enforced HTTPS.
     *
     * Default: - fine-grained access control is disabled
     */
    override fun fineGrainedAccessControl(): AdvancedSecurityOptions? =
        unwrap(this).getFineGrainedAccessControl()?.let(AdvancedSecurityOptions::wrap)

    /**
     * Specify either dual stack or IPv4 as your IP address type.
     *
     * Dual stack allows you to share domain resources across IPv4 and IPv6 address types, and is
     * the recommended option.
     *
     * If you set your IP address type to dual stack, you can't change your address type later.
     *
     * Default: - IpAddressType.IPV4
     */
    override fun ipAddressType(): IpAddressType? =
        unwrap(this).getIpAddressType()?.let(IpAddressType::wrap)

    /**
     * Configuration log publishing configuration options.
     *
     * Default: - No logs are published
     */
    override fun logging(): LoggingOptions? = unwrap(this).getLogging()?.let(LoggingOptions::wrap)

    /**
     * Specify true to enable node to node encryption.
     *
     * Requires Elasticsearch version 6.0 or later or OpenSearch version 1.0 or later.
     *
     * Default: - Node to node encryption is not enabled.
     */
    override fun nodeToNodeEncryption(): Boolean? = unwrap(this).getNodeToNodeEncryption()

    /**
     * Options for enabling a domain's off-peak window, during which OpenSearch Service can perform
     * mandatory configuration changes on the domain.
     *
     * Off-peak windows were introduced on February 16, 2023.
     * All domains created before this date have the off-peak window disabled by default.
     * You must manually enable and configure the off-peak window for these domains.
     * All domains created after this date will have the off-peak window enabled by default.
     * You can't disable the off-peak window for a domain after it's enabled.
     *
     * Default: - Disabled for domains created before February 16, 2023. Enabled for domains created
     * after. Enabled if `offPeakWindowStart` is set.
     *
     * [Documentation](https://docs.aws.amazon.com/it_it/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-offpeakwindow.html)
     */
    override fun offPeakWindowEnabled(): Boolean? = unwrap(this).getOffPeakWindowEnabled()

    /**
     * Start time for the off-peak window, in Coordinated Universal Time (UTC).
     *
     * The window length will always be 10 hours, so you can't specify an end time.
     * For example, if you specify 11:00 P.M. UTC as a start time, the end time will automatically
     * be set to 9:00 A.M.
     *
     * Default: - 10:00 P.M. local time
     */
    override fun offPeakWindowStart(): WindowStartTime? =
        unwrap(this).getOffPeakWindowStart()?.let(WindowStartTime::wrap)

    /**
     * Policy to apply when the domain is removed from the stack.
     *
     * Default: RemovalPolicy.RETAIN
     */
    override fun removalPolicy(): RemovalPolicy? =
        unwrap(this).getRemovalPolicy()?.let(RemovalPolicy::wrap)

    /**
     * The list of security groups that are associated with the VPC endpoints for the domain.
     *
     * Only used if `vpc` is specified.
     *
     * Default: - One new security group is created.
     *
     * [Documentation](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)
     */
    override fun securityGroups(): List =
        unwrap(this).getSecurityGroups()?.map(ISecurityGroup::wrap) ?: emptyList()

    /**
     * Specify whether to create a CloudWatch Logs resource policy or not.
     *
     * When logging is enabled for the domain, a CloudWatch Logs resource policy is created by
     * default.
     * However, CloudWatch Logs supports only 10 resource policies per region.
     * If you enable logging for several domains, it may hit the quota and cause an error.
     * By setting this property to true, creating a resource policy is suppressed, allowing you to
     * avoid this problem.
     *
     * If you set this option to true, you must create a resource policy before deployment.
     *
     * Default: - false
     *
     * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createdomain-configure-slow-logs.html)
     */
    override fun suppressLogsResourcePolicy(): Boolean? =
        unwrap(this).getSuppressLogsResourcePolicy()

    /**
     * The minimum TLS version required for traffic to the domain.
     *
     * Default: - TLSSecurityPolicy.TLS_1_0
     */
    override fun tlsSecurityPolicy(): TLSSecurityPolicy? =
        unwrap(this).getTlsSecurityPolicy()?.let(TLSSecurityPolicy::wrap)

    /**
     * Configures the domain so that unsigned basic auth is enabled.
     *
     * If no master user is provided a default master user
     * with username `admin` and a dynamically generated password stored in KMS is created. The
     * password can be retrieved
     * by getting `masterUserPassword` from the domain instance.
     *
     * Setting this to true will also add an access policy that allows unsigned
     * access, enable node to node encryption, encryption at rest. If conflicting
     * settings are encountered (like disabling encryption at rest) enabling this
     * setting will cause a failure.
     *
     * Default: - false
     */
    override fun useUnsignedBasicAuth(): Boolean? = unwrap(this).getUseUnsignedBasicAuth()

    /**
     * The Elasticsearch/OpenSearch version that your domain will leverage.
     */
    override fun version(): EngineVersion = unwrap(this).getVersion().let(EngineVersion::wrap)

    /**
     * Place the domain inside this VPC.
     *
     * Default: - Domain is not placed in a VPC.
     *
     * [Documentation](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html)
     */
    override fun vpc(): IVpc? = unwrap(this).getVpc()?.let(IVpc::wrap)

    /**
     * The specific vpc subnets the domain will be placed in.
     *
     * You must provide one subnet for each Availability Zone
     * that your domain uses. For example, you must specify three subnet IDs for a three
     * Availability Zone
     * domain.
     *
     * Only used if `vpc` is specified.
     *
     * Default: - All private subnets.
     *
     * [Documentation](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)
     */
    override fun vpcSubnets(): List =
        unwrap(this).getVpcSubnets()?.map(SubnetSelection::wrap) ?: emptyList()

    /**
     * The cluster zone awareness configuration for the Amazon OpenSearch Service domain.
     *
     * Default: - no zone awareness (1 AZ)
     */
    override fun zoneAwareness(): ZoneAwarenessConfig? =
        unwrap(this).getZoneAwareness()?.let(ZoneAwarenessConfig::wrap)
  }

  public companion object {
    public operator fun invoke(block: Builder.() -> Unit = {}): DomainProps {
      val builderImpl = BuilderImpl()
      return Wrapper(builderImpl.apply(block).build())
    }

    internal fun wrap(cdkObject: software.amazon.awscdk.services.opensearchservice.DomainProps):
        DomainProps = CdkObjectWrappers.wrap(cdkObject) as? DomainProps ?: Wrapper(cdkObject)

    internal fun unwrap(wrapped: DomainProps):
        software.amazon.awscdk.services.opensearchservice.DomainProps = (wrapped as
        CdkObject).cdkObject as software.amazon.awscdk.services.opensearchservice.DomainProps
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy