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

com.pulumi.awsnative.opensearchservice.kotlin.DomainArgs.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 1.11.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.awsnative.opensearchservice.kotlin

import com.pulumi.awsnative.kotlin.inputs.TagArgs
import com.pulumi.awsnative.kotlin.inputs.TagArgsBuilder
import com.pulumi.awsnative.opensearchservice.DomainArgs.builder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainAdvancedSecurityOptionsInputArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainAdvancedSecurityOptionsInputArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainClusterConfigArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainClusterConfigArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainCognitoOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainCognitoOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainEbsOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainEbsOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainEncryptionAtRestOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainEncryptionAtRestOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainEndpointOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainEndpointOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainLogPublishingOptionArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainLogPublishingOptionArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainNodeToNodeEncryptionOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainNodeToNodeEncryptionOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainOffPeakWindowOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainOffPeakWindowOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainSnapshotOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainSnapshotOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainSoftwareUpdateOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainSoftwareUpdateOptionsArgsBuilder
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainVpcOptionsArgs
import com.pulumi.awsnative.opensearchservice.kotlin.inputs.DomainVpcOptionsArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Any
import kotlin.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * An example resource schema demonstrating some basic constructs and validation rules.
 * @property accessPolicies An AWS Identity and Access Management ( IAM ) policy document that specifies who can access the OpenSearch Service domain and their permissions. For more information, see [Configuring access policies](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-creating) in the *Amazon OpenSearch Service Developer Guide* .
 * Search the [CloudFormation User Guide](https://docs.aws.amazon.com/cloudformation/) for `AWS::OpenSearchService::Domain` for more information about the expected schema for this property.
 * @property advancedOptions Additional options to specify for the OpenSearch Service domain. For more information, see [AdvancedOptions](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_CreateDomain.html#API_CreateDomain_RequestBody) in the OpenSearch Service API reference.
 * @property advancedSecurityOptions Specifies options for fine-grained access control and SAML authentication.
 * If you specify advanced security options, you must also enable node-to-node encryption ( [NodeToNodeEncryptionOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-nodetonodeencryptionoptions.html) ) and encryption at rest ( [EncryptionAtRestOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-encryptionatrestoptions.html) ). You must also enable `EnforceHTTPS` within [DomainEndpointOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-domainendpointoptions.html) , which requires HTTPS for all traffic to the domain.
 * @property clusterConfig Container for the cluster configuration of a domain.
 * @property cognitoOptions Configures OpenSearch Service to use Amazon Cognito authentication for OpenSearch Dashboards.
 * @property domainEndpointOptions Specifies additional options for the domain endpoint, such as whether to require HTTPS for all traffic or whether to use a custom endpoint rather than the default endpoint.
 * @property domainName A name for the OpenSearch Service domain. The name must have a minimum length of 3 and a maximum length of 28. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the domain name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
 * Required when creating a new domain.
 * > If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.
 * @property ebsOptions The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are attached to data nodes in the OpenSearch Service domain. For more information, see [EBS volume size limits](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html#ebsresource) in the *Amazon OpenSearch Service Developer Guide* .
 * @property encryptionAtRestOptions Whether the domain should encrypt data at rest, and if so, the AWS KMS key to use. See [Encryption of data at rest for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) .
 * If no encryption at rest options were initially specified in the template, updating this property by adding it causes no interruption. However, if you change this property after it's already been set within a template, the domain is deleted and recreated in order to modify the property.
 * @property engineVersion The version of OpenSearch to use. The value must be in the format `OpenSearch_X.Y` or `Elasticsearch_X.Y` . If not specified, the latest version of OpenSearch is used. For information about the versions that OpenSearch Service supports, see [Supported versions of OpenSearch and Elasticsearch](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html#choosing-version) in the *Amazon OpenSearch Service Developer Guide* .
 * If you set the [EnableVersionUpgrade](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-upgradeopensearchdomain) update policy to `true` , you can update `EngineVersion` without interruption. When `EnableVersionUpgrade` is set to `false` , or is not specified, updating `EngineVersion` results in [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) .
 * @property ipAddressType Choose 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.
 * @property logPublishingOptions An object with one or more of the following keys: `SEARCH_SLOW_LOGS` , `ES_APPLICATION_LOGS` , `INDEX_SLOW_LOGS` , `AUDIT_LOGS` , depending on the types of logs you want to publish. Each key needs a valid `LogPublishingOption` value. For the full syntax, see the [examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchservice-domain.html#aws-resource-opensearchservice-domain--examples) .
 * @property nodeToNodeEncryptionOptions Specifies whether node-to-node encryption is enabled. See [Node-to-node encryption for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ntn.html) .
 * @property offPeakWindowOptions Options for a domain's off-peak window, during which OpenSearch Service can perform mandatory configuration changes on the domain.
 * @property snapshotOptions *DEPRECATED* . The automated snapshot configuration for the OpenSearch Service domain indexes.
 * @property softwareUpdateOptions Service software update options for the domain.
 * @property tags An arbitrary set of tags (key-value pairs) for this Domain.
 * @property vpcOptions The virtual private cloud (VPC) configuration for the OpenSearch Service domain. For more information, see [Launching your Amazon OpenSearch Service domains within a VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) in the *Amazon OpenSearch Service Developer Guide* .
 * If you remove this entity altogether, along with its associated properties, it causes a replacement. You might encounter this scenario if you're updating your security configuration from a VPC to a public endpoint.
 */
public data class DomainArgs(
    public val accessPolicies: Output? = null,
    public val advancedOptions: Output>? = null,
    public val advancedSecurityOptions: Output? = null,
    public val clusterConfig: Output? = null,
    public val cognitoOptions: Output? = null,
    public val domainEndpointOptions: Output? = null,
    public val domainName: Output? = null,
    public val ebsOptions: Output? = null,
    public val encryptionAtRestOptions: Output? = null,
    public val engineVersion: Output? = null,
    public val ipAddressType: Output? = null,
    public val logPublishingOptions: Output>? = null,
    public val nodeToNodeEncryptionOptions: Output? = null,
    public val offPeakWindowOptions: Output? = null,
    public val snapshotOptions: Output? = null,
    public val softwareUpdateOptions: Output? = null,
    public val tags: Output>? = null,
    public val vpcOptions: Output? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.awsnative.opensearchservice.DomainArgs =
        com.pulumi.awsnative.opensearchservice.DomainArgs.builder()
            .accessPolicies(accessPolicies?.applyValue({ args0 -> args0 }))
            .advancedOptions(
                advancedOptions?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .advancedSecurityOptions(
                advancedSecurityOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .clusterConfig(clusterConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .cognitoOptions(cognitoOptions?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .domainEndpointOptions(
                domainEndpointOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .domainName(domainName?.applyValue({ args0 -> args0 }))
            .ebsOptions(ebsOptions?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .encryptionAtRestOptions(
                encryptionAtRestOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .engineVersion(engineVersion?.applyValue({ args0 -> args0 }))
            .ipAddressType(ipAddressType?.applyValue({ args0 -> args0 }))
            .logPublishingOptions(
                logPublishingOptions?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value.let({ args0 -> args0.toJava() }))
                    }).toMap()
                }),
            )
            .nodeToNodeEncryptionOptions(
                nodeToNodeEncryptionOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .offPeakWindowOptions(
                offPeakWindowOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .snapshotOptions(snapshotOptions?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .softwareUpdateOptions(
                softwareUpdateOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) }) }))
            .vpcOptions(vpcOptions?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) })).build()
}

/**
 * Builder for [DomainArgs].
 */
@PulumiTagMarker
public class DomainArgsBuilder internal constructor() {
    private var accessPolicies: Output? = null

    private var advancedOptions: Output>? = null

    private var advancedSecurityOptions: Output? = null

    private var clusterConfig: Output? = null

    private var cognitoOptions: Output? = null

    private var domainEndpointOptions: Output? = null

    private var domainName: Output? = null

    private var ebsOptions: Output? = null

    private var encryptionAtRestOptions: Output? = null

    private var engineVersion: Output? = null

    private var ipAddressType: Output? = null

    private var logPublishingOptions: Output>? = null

    private var nodeToNodeEncryptionOptions: Output? = null

    private var offPeakWindowOptions: Output? = null

    private var snapshotOptions: Output? = null

    private var softwareUpdateOptions: Output? = null

    private var tags: Output>? = null

    private var vpcOptions: Output? = null

    /**
     * @param value An AWS Identity and Access Management ( IAM ) policy document that specifies who can access the OpenSearch Service domain and their permissions. For more information, see [Configuring access policies](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-creating) in the *Amazon OpenSearch Service Developer Guide* .
     * Search the [CloudFormation User Guide](https://docs.aws.amazon.com/cloudformation/) for `AWS::OpenSearchService::Domain` for more information about the expected schema for this property.
     */
    @JvmName("fqpyutmkwkosqbho")
    public suspend fun accessPolicies(`value`: Output) {
        this.accessPolicies = value
    }

    /**
     * @param value Additional options to specify for the OpenSearch Service domain. For more information, see [AdvancedOptions](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_CreateDomain.html#API_CreateDomain_RequestBody) in the OpenSearch Service API reference.
     */
    @JvmName("bxiokqbptdkrpima")
    public suspend fun advancedOptions(`value`: Output>) {
        this.advancedOptions = value
    }

    /**
     * @param value Specifies options for fine-grained access control and SAML authentication.
     * If you specify advanced security options, you must also enable node-to-node encryption ( [NodeToNodeEncryptionOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-nodetonodeencryptionoptions.html) ) and encryption at rest ( [EncryptionAtRestOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-encryptionatrestoptions.html) ). You must also enable `EnforceHTTPS` within [DomainEndpointOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-domainendpointoptions.html) , which requires HTTPS for all traffic to the domain.
     */
    @JvmName("jwuhrqmdlpxtmljx")
    public suspend fun advancedSecurityOptions(`value`: Output) {
        this.advancedSecurityOptions = value
    }

    /**
     * @param value Container for the cluster configuration of a domain.
     */
    @JvmName("qdjjiiuerwttagqf")
    public suspend fun clusterConfig(`value`: Output) {
        this.clusterConfig = value
    }

    /**
     * @param value Configures OpenSearch Service to use Amazon Cognito authentication for OpenSearch Dashboards.
     */
    @JvmName("baqrrnokpnmbdipr")
    public suspend fun cognitoOptions(`value`: Output) {
        this.cognitoOptions = value
    }

    /**
     * @param value Specifies additional options for the domain endpoint, such as whether to require HTTPS for all traffic or whether to use a custom endpoint rather than the default endpoint.
     */
    @JvmName("oryuglmukaancwxh")
    public suspend fun domainEndpointOptions(`value`: Output) {
        this.domainEndpointOptions = value
    }

    /**
     * @param value A name for the OpenSearch Service domain. The name must have a minimum length of 3 and a maximum length of 28. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the domain name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     * Required when creating a new domain.
     * > If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.
     */
    @JvmName("blonorumnieoopqf")
    public suspend fun domainName(`value`: Output) {
        this.domainName = value
    }

    /**
     * @param value The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are attached to data nodes in the OpenSearch Service domain. For more information, see [EBS volume size limits](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html#ebsresource) in the *Amazon OpenSearch Service Developer Guide* .
     */
    @JvmName("qaugmcvgyufytelc")
    public suspend fun ebsOptions(`value`: Output) {
        this.ebsOptions = value
    }

    /**
     * @param value Whether the domain should encrypt data at rest, and if so, the AWS KMS key to use. See [Encryption of data at rest for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) .
     * If no encryption at rest options were initially specified in the template, updating this property by adding it causes no interruption. However, if you change this property after it's already been set within a template, the domain is deleted and recreated in order to modify the property.
     */
    @JvmName("whjrpjhcjusxsksv")
    public suspend fun encryptionAtRestOptions(`value`: Output) {
        this.encryptionAtRestOptions = value
    }

    /**
     * @param value The version of OpenSearch to use. The value must be in the format `OpenSearch_X.Y` or `Elasticsearch_X.Y` . If not specified, the latest version of OpenSearch is used. For information about the versions that OpenSearch Service supports, see [Supported versions of OpenSearch and Elasticsearch](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html#choosing-version) in the *Amazon OpenSearch Service Developer Guide* .
     * If you set the [EnableVersionUpgrade](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-upgradeopensearchdomain) update policy to `true` , you can update `EngineVersion` without interruption. When `EnableVersionUpgrade` is set to `false` , or is not specified, updating `EngineVersion` results in [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) .
     */
    @JvmName("ctpcwopadojqyaoa")
    public suspend fun engineVersion(`value`: Output) {
        this.engineVersion = value
    }

    /**
     * @param value Choose 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.
     */
    @JvmName("jnsrpwvmieyiqbiv")
    public suspend fun ipAddressType(`value`: Output) {
        this.ipAddressType = value
    }

    /**
     * @param value An object with one or more of the following keys: `SEARCH_SLOW_LOGS` , `ES_APPLICATION_LOGS` , `INDEX_SLOW_LOGS` , `AUDIT_LOGS` , depending on the types of logs you want to publish. Each key needs a valid `LogPublishingOption` value. For the full syntax, see the [examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchservice-domain.html#aws-resource-opensearchservice-domain--examples) .
     */
    @JvmName("tcuurvhestncnboa")
    public suspend fun logPublishingOptions(`value`: Output>) {
        this.logPublishingOptions = value
    }

    /**
     * @param value Specifies whether node-to-node encryption is enabled. See [Node-to-node encryption for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ntn.html) .
     */
    @JvmName("umikrqraucxtavmp")
    public suspend fun nodeToNodeEncryptionOptions(`value`: Output) {
        this.nodeToNodeEncryptionOptions = value
    }

    /**
     * @param value Options for a domain's off-peak window, during which OpenSearch Service can perform mandatory configuration changes on the domain.
     */
    @JvmName("ppoxuxliooyfylqr")
    public suspend fun offPeakWindowOptions(`value`: Output) {
        this.offPeakWindowOptions = value
    }

    /**
     * @param value *DEPRECATED* . The automated snapshot configuration for the OpenSearch Service domain indexes.
     */
    @JvmName("buynwibcuegnqrrs")
    public suspend fun snapshotOptions(`value`: Output) {
        this.snapshotOptions = value
    }

    /**
     * @param value Service software update options for the domain.
     */
    @JvmName("hdderwkcexyiulhu")
    public suspend fun softwareUpdateOptions(`value`: Output) {
        this.softwareUpdateOptions = value
    }

    /**
     * @param value An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("rjufdgfhsbindmxl")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    @JvmName("ffhyvggcjflrhhyv")
    public suspend fun tags(vararg values: Output) {
        this.tags = Output.all(values.asList())
    }

    /**
     * @param values An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("ntxksckvdqsjdrov")
    public suspend fun tags(values: List>) {
        this.tags = Output.all(values)
    }

    /**
     * @param value The virtual private cloud (VPC) configuration for the OpenSearch Service domain. For more information, see [Launching your Amazon OpenSearch Service domains within a VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) in the *Amazon OpenSearch Service Developer Guide* .
     * If you remove this entity altogether, along with its associated properties, it causes a replacement. You might encounter this scenario if you're updating your security configuration from a VPC to a public endpoint.
     */
    @JvmName("ppoxrjjrosljeiof")
    public suspend fun vpcOptions(`value`: Output) {
        this.vpcOptions = value
    }

    /**
     * @param value An AWS Identity and Access Management ( IAM ) policy document that specifies who can access the OpenSearch Service domain and their permissions. For more information, see [Configuring access policies](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-creating) in the *Amazon OpenSearch Service Developer Guide* .
     * Search the [CloudFormation User Guide](https://docs.aws.amazon.com/cloudformation/) for `AWS::OpenSearchService::Domain` for more information about the expected schema for this property.
     */
    @JvmName("byuwcxyfplpmhcdn")
    public suspend fun accessPolicies(`value`: Any?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.accessPolicies = mapped
    }

    /**
     * @param value Additional options to specify for the OpenSearch Service domain. For more information, see [AdvancedOptions](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_CreateDomain.html#API_CreateDomain_RequestBody) in the OpenSearch Service API reference.
     */
    @JvmName("cnyvlbxofyamokuy")
    public suspend fun advancedOptions(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.advancedOptions = mapped
    }

    /**
     * @param values Additional options to specify for the OpenSearch Service domain. For more information, see [AdvancedOptions](https://docs.aws.amazon.com/opensearch-service/latest/APIReference/API_CreateDomain.html#API_CreateDomain_RequestBody) in the OpenSearch Service API reference.
     */
    @JvmName("btvbrfgvdcttqqfu")
    public fun advancedOptions(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.advancedOptions = mapped
    }

    /**
     * @param value Specifies options for fine-grained access control and SAML authentication.
     * If you specify advanced security options, you must also enable node-to-node encryption ( [NodeToNodeEncryptionOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-nodetonodeencryptionoptions.html) ) and encryption at rest ( [EncryptionAtRestOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-encryptionatrestoptions.html) ). You must also enable `EnforceHTTPS` within [DomainEndpointOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-domainendpointoptions.html) , which requires HTTPS for all traffic to the domain.
     */
    @JvmName("lfleogmyxeqfonxj")
    public suspend fun advancedSecurityOptions(`value`: DomainAdvancedSecurityOptionsInputArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.advancedSecurityOptions = mapped
    }

    /**
     * @param argument Specifies options for fine-grained access control and SAML authentication.
     * If you specify advanced security options, you must also enable node-to-node encryption ( [NodeToNodeEncryptionOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-nodetonodeencryptionoptions.html) ) and encryption at rest ( [EncryptionAtRestOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-encryptionatrestoptions.html) ). You must also enable `EnforceHTTPS` within [DomainEndpointOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-opensearchservice-domain-domainendpointoptions.html) , which requires HTTPS for all traffic to the domain.
     */
    @JvmName("fdgchxeabcgeijbi")
    public suspend fun advancedSecurityOptions(argument: suspend DomainAdvancedSecurityOptionsInputArgsBuilder.() -> Unit) {
        val toBeMapped = DomainAdvancedSecurityOptionsInputArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.advancedSecurityOptions = mapped
    }

    /**
     * @param value Container for the cluster configuration of a domain.
     */
    @JvmName("ayldkquogsjruweo")
    public suspend fun clusterConfig(`value`: DomainClusterConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.clusterConfig = mapped
    }

    /**
     * @param argument Container for the cluster configuration of a domain.
     */
    @JvmName("hjjstkktbekijmer")
    public suspend fun clusterConfig(argument: suspend DomainClusterConfigArgsBuilder.() -> Unit) {
        val toBeMapped = DomainClusterConfigArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.clusterConfig = mapped
    }

    /**
     * @param value Configures OpenSearch Service to use Amazon Cognito authentication for OpenSearch Dashboards.
     */
    @JvmName("jgthqlgxngeksxvl")
    public suspend fun cognitoOptions(`value`: DomainCognitoOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.cognitoOptions = mapped
    }

    /**
     * @param argument Configures OpenSearch Service to use Amazon Cognito authentication for OpenSearch Dashboards.
     */
    @JvmName("inlkkecfhdmwtfil")
    public suspend fun cognitoOptions(argument: suspend DomainCognitoOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainCognitoOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.cognitoOptions = mapped
    }

    /**
     * @param value Specifies additional options for the domain endpoint, such as whether to require HTTPS for all traffic or whether to use a custom endpoint rather than the default endpoint.
     */
    @JvmName("nelltdqyvnmsnkfd")
    public suspend fun domainEndpointOptions(`value`: DomainEndpointOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.domainEndpointOptions = mapped
    }

    /**
     * @param argument Specifies additional options for the domain endpoint, such as whether to require HTTPS for all traffic or whether to use a custom endpoint rather than the default endpoint.
     */
    @JvmName("sgpougcrxenqrxwq")
    public suspend fun domainEndpointOptions(argument: suspend DomainEndpointOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainEndpointOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.domainEndpointOptions = mapped
    }

    /**
     * @param value A name for the OpenSearch Service domain. The name must have a minimum length of 3 and a maximum length of 28. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the domain name. For more information, see [Name Type](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html) .
     * Required when creating a new domain.
     * > If you specify a name, you can't perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.
     */
    @JvmName("rpjkjvsnstrhhtmt")
    public suspend fun domainName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.domainName = mapped
    }

    /**
     * @param value The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are attached to data nodes in the OpenSearch Service domain. For more information, see [EBS volume size limits](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html#ebsresource) in the *Amazon OpenSearch Service Developer Guide* .
     */
    @JvmName("hwrvowakoevxiosf")
    public suspend fun ebsOptions(`value`: DomainEbsOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ebsOptions = mapped
    }

    /**
     * @param argument The configurations of Amazon Elastic Block Store (Amazon EBS) volumes that are attached to data nodes in the OpenSearch Service domain. For more information, see [EBS volume size limits](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/limits.html#ebsresource) in the *Amazon OpenSearch Service Developer Guide* .
     */
    @JvmName("eyiwlygdfepruagc")
    public suspend fun ebsOptions(argument: suspend DomainEbsOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainEbsOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.ebsOptions = mapped
    }

    /**
     * @param value Whether the domain should encrypt data at rest, and if so, the AWS KMS key to use. See [Encryption of data at rest for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) .
     * If no encryption at rest options were initially specified in the template, updating this property by adding it causes no interruption. However, if you change this property after it's already been set within a template, the domain is deleted and recreated in order to modify the property.
     */
    @JvmName("ktmovriwtogndujj")
    public suspend fun encryptionAtRestOptions(`value`: DomainEncryptionAtRestOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.encryptionAtRestOptions = mapped
    }

    /**
     * @param argument Whether the domain should encrypt data at rest, and if so, the AWS KMS key to use. See [Encryption of data at rest for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/encryption-at-rest.html) .
     * If no encryption at rest options were initially specified in the template, updating this property by adding it causes no interruption. However, if you change this property after it's already been set within a template, the domain is deleted and recreated in order to modify the property.
     */
    @JvmName("gcnrhukuasjwuyyj")
    public suspend fun encryptionAtRestOptions(argument: suspend DomainEncryptionAtRestOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainEncryptionAtRestOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.encryptionAtRestOptions = mapped
    }

    /**
     * @param value The version of OpenSearch to use. The value must be in the format `OpenSearch_X.Y` or `Elasticsearch_X.Y` . If not specified, the latest version of OpenSearch is used. For information about the versions that OpenSearch Service supports, see [Supported versions of OpenSearch and Elasticsearch](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html#choosing-version) in the *Amazon OpenSearch Service Developer Guide* .
     * If you set the [EnableVersionUpgrade](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-upgradeopensearchdomain) update policy to `true` , you can update `EngineVersion` without interruption. When `EnableVersionUpgrade` is set to `false` , or is not specified, updating `EngineVersion` results in [replacement](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) .
     */
    @JvmName("yoflqesnshwbbwgc")
    public suspend fun engineVersion(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.engineVersion = mapped
    }

    /**
     * @param value Choose 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.
     */
    @JvmName("fxxufeygcxjhrvqb")
    public suspend fun ipAddressType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ipAddressType = mapped
    }

    /**
     * @param value An object with one or more of the following keys: `SEARCH_SLOW_LOGS` , `ES_APPLICATION_LOGS` , `INDEX_SLOW_LOGS` , `AUDIT_LOGS` , depending on the types of logs you want to publish. Each key needs a valid `LogPublishingOption` value. For the full syntax, see the [examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchservice-domain.html#aws-resource-opensearchservice-domain--examples) .
     */
    @JvmName("ttqplncigwotbiss")
    public suspend fun logPublishingOptions(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.logPublishingOptions = mapped
    }

    /**
     * @param argument An object with one or more of the following keys: `SEARCH_SLOW_LOGS` , `ES_APPLICATION_LOGS` , `INDEX_SLOW_LOGS` , `AUDIT_LOGS` , depending on the types of logs you want to publish. Each key needs a valid `LogPublishingOption` value. For the full syntax, see the [examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchservice-domain.html#aws-resource-opensearchservice-domain--examples) .
     */
    @JvmName("bvvumhrripfijbyj")
    public suspend fun logPublishingOptions(vararg argument: Pair Unit>) {
        val toBeMapped = argument.toList().map { (left, right) ->
            left to
                DomainLogPublishingOptionArgsBuilder().applySuspend { right() }.build()
        }.toMap()
        val mapped = of(toBeMapped)
        this.logPublishingOptions = mapped
    }

    /**
     * @param values An object with one or more of the following keys: `SEARCH_SLOW_LOGS` , `ES_APPLICATION_LOGS` , `INDEX_SLOW_LOGS` , `AUDIT_LOGS` , depending on the types of logs you want to publish. Each key needs a valid `LogPublishingOption` value. For the full syntax, see the [examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opensearchservice-domain.html#aws-resource-opensearchservice-domain--examples) .
     */
    @JvmName("pheescamwmrgexjm")
    public fun logPublishingOptions(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.logPublishingOptions = mapped
    }

    /**
     * @param value Specifies whether node-to-node encryption is enabled. See [Node-to-node encryption for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ntn.html) .
     */
    @JvmName("ylbxdbrjnnvfhitd")
    public suspend fun nodeToNodeEncryptionOptions(`value`: DomainNodeToNodeEncryptionOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.nodeToNodeEncryptionOptions = mapped
    }

    /**
     * @param argument Specifies whether node-to-node encryption is enabled. See [Node-to-node encryption for Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ntn.html) .
     */
    @JvmName("pwyqigkndnmqvoua")
    public suspend fun nodeToNodeEncryptionOptions(argument: suspend DomainNodeToNodeEncryptionOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainNodeToNodeEncryptionOptionsArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.nodeToNodeEncryptionOptions = mapped
    }

    /**
     * @param value Options for a domain's off-peak window, during which OpenSearch Service can perform mandatory configuration changes on the domain.
     */
    @JvmName("dltjrbguwrfbmkpc")
    public suspend fun offPeakWindowOptions(`value`: DomainOffPeakWindowOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.offPeakWindowOptions = mapped
    }

    /**
     * @param argument Options for a domain's off-peak window, during which OpenSearch Service can perform mandatory configuration changes on the domain.
     */
    @JvmName("segbkotryacargiq")
    public suspend fun offPeakWindowOptions(argument: suspend DomainOffPeakWindowOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainOffPeakWindowOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.offPeakWindowOptions = mapped
    }

    /**
     * @param value *DEPRECATED* . The automated snapshot configuration for the OpenSearch Service domain indexes.
     */
    @JvmName("whungivgocvxkslt")
    public suspend fun snapshotOptions(`value`: DomainSnapshotOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.snapshotOptions = mapped
    }

    /**
     * @param argument *DEPRECATED* . The automated snapshot configuration for the OpenSearch Service domain indexes.
     */
    @JvmName("eidtyxaiinuvskas")
    public suspend fun snapshotOptions(argument: suspend DomainSnapshotOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainSnapshotOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.snapshotOptions = mapped
    }

    /**
     * @param value Service software update options for the domain.
     */
    @JvmName("fhvyiliktmpseyak")
    public suspend fun softwareUpdateOptions(`value`: DomainSoftwareUpdateOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.softwareUpdateOptions = mapped
    }

    /**
     * @param argument Service software update options for the domain.
     */
    @JvmName("qjgmrgjsbpdylqjb")
    public suspend fun softwareUpdateOptions(argument: suspend DomainSoftwareUpdateOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainSoftwareUpdateOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.softwareUpdateOptions = mapped
    }

    /**
     * @param value An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("lmxkbnxphabffsrp")
    public suspend fun tags(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param argument An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("iiblnuejnhaqhkbv")
    public suspend fun tags(argument: List Unit>) {
        val toBeMapped = argument.toList().map { TagArgsBuilder().applySuspend { it() }.build() }
        val mapped = of(toBeMapped)
        this.tags = mapped
    }

    /**
     * @param argument An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("xcunuwsclwxpeafl")
    public suspend fun tags(vararg argument: suspend TagArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map { TagArgsBuilder().applySuspend { it() }.build() }
        val mapped = of(toBeMapped)
        this.tags = mapped
    }

    /**
     * @param argument An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("qobuawgbwkmyptog")
    public suspend fun tags(argument: suspend TagArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(TagArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.tags = mapped
    }

    /**
     * @param values An arbitrary set of tags (key-value pairs) for this Domain.
     */
    @JvmName("jfmlgqvsvhmxkigx")
    public suspend fun tags(vararg values: TagArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value The virtual private cloud (VPC) configuration for the OpenSearch Service domain. For more information, see [Launching your Amazon OpenSearch Service domains within a VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) in the *Amazon OpenSearch Service Developer Guide* .
     * If you remove this entity altogether, along with its associated properties, it causes a replacement. You might encounter this scenario if you're updating your security configuration from a VPC to a public endpoint.
     */
    @JvmName("caisqgbqqmwsjlpv")
    public suspend fun vpcOptions(`value`: DomainVpcOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vpcOptions = mapped
    }

    /**
     * @param argument The virtual private cloud (VPC) configuration for the OpenSearch Service domain. For more information, see [Launching your Amazon OpenSearch Service domains within a VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) in the *Amazon OpenSearch Service Developer Guide* .
     * If you remove this entity altogether, along with its associated properties, it causes a replacement. You might encounter this scenario if you're updating your security configuration from a VPC to a public endpoint.
     */
    @JvmName("rnwnvwbsqvqddeyp")
    public suspend fun vpcOptions(argument: suspend DomainVpcOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = DomainVpcOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.vpcOptions = mapped
    }

    internal fun build(): DomainArgs = DomainArgs(
        accessPolicies = accessPolicies,
        advancedOptions = advancedOptions,
        advancedSecurityOptions = advancedSecurityOptions,
        clusterConfig = clusterConfig,
        cognitoOptions = cognitoOptions,
        domainEndpointOptions = domainEndpointOptions,
        domainName = domainName,
        ebsOptions = ebsOptions,
        encryptionAtRestOptions = encryptionAtRestOptions,
        engineVersion = engineVersion,
        ipAddressType = ipAddressType,
        logPublishingOptions = logPublishingOptions,
        nodeToNodeEncryptionOptions = nodeToNodeEncryptionOptions,
        offPeakWindowOptions = offPeakWindowOptions,
        snapshotOptions = snapshotOptions,
        softwareUpdateOptions = softwareUpdateOptions,
        tags = tags,
        vpcOptions = vpcOptions,
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy