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

com.pulumi.aws.finspace.kotlin.KxClusterArgs.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.aws.finspace.kotlin

import com.pulumi.aws.finspace.KxClusterArgs.builder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterAutoScalingConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterAutoScalingConfigurationArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterCacheStorageConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterCacheStorageConfigurationArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterCapacityConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterCapacityConfigurationArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterCodeArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterCodeArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterDatabaseArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterDatabaseArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterSavedownStorageConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterSavedownStorageConfigurationArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterScalingGroupConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterScalingGroupConfigurationArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterTickerplantLogConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterTickerplantLogConfigurationArgsBuilder
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterVpcConfigurationArgs
import com.pulumi.aws.finspace.kotlin.inputs.KxClusterVpcConfigurationArgsBuilder
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.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * Resource for managing an AWS FinSpace Kx Cluster.
 * ## Example Usage
 * ### Basic Usage
 * 
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.aws.finspace.KxCluster;
 * import com.pulumi.aws.finspace.KxClusterArgs;
 * import com.pulumi.aws.finspace.inputs.KxClusterCapacityConfigurationArgs;
 * import com.pulumi.aws.finspace.inputs.KxClusterVpcConfigurationArgs;
 * import com.pulumi.aws.finspace.inputs.KxClusterCacheStorageConfigurationArgs;
 * import com.pulumi.aws.finspace.inputs.KxClusterDatabaseArgs;
 * import com.pulumi.aws.finspace.inputs.KxClusterCodeArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var example = new KxCluster("example", KxClusterArgs.builder()
 *             .name("my-tf-kx-cluster")
 *             .environmentId(exampleAwsFinspaceKxEnvironment.id())
 *             .type("HDB")
 *             .releaseLabel("1.0")
 *             .azMode("SINGLE")
 *             .availabilityZoneId("use1-az2")
 *             .capacityConfiguration(KxClusterCapacityConfigurationArgs.builder()
 *                 .nodeType("kx.s.2xlarge")
 *                 .nodeCount(2)
 *                 .build())
 *             .vpcConfiguration(KxClusterVpcConfigurationArgs.builder()
 *                 .vpcId(test.id())
 *                 .securityGroupIds(exampleAwsSecurityGroup.id())
 *                 .subnetIds(exampleAwsSubnet.id())
 *                 .ipAddressType("IP_V4")
 *                 .build())
 *             .cacheStorageConfigurations(KxClusterCacheStorageConfigurationArgs.builder()
 *                 .type("CACHE_1000")
 *                 .size(1200)
 *                 .build())
 *             .databases(KxClusterDatabaseArgs.builder()
 *                 .databaseName(exampleAwsFinspaceKxDatabase.name())
 *                 .cacheConfiguration(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))
 *                 .build())
 *             .code(KxClusterCodeArgs.builder()
 *                 .s3Bucket(testAwsS3Bucket.id())
 *                 .s3Key(object.key())
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: aws:finspace:KxCluster
 *     properties:
 *       name: my-tf-kx-cluster
 *       environmentId: ${exampleAwsFinspaceKxEnvironment.id}
 *       type: HDB
 *       releaseLabel: '1.0'
 *       azMode: SINGLE
 *       availabilityZoneId: use1-az2
 *       capacityConfiguration:
 *         nodeType: kx.s.2xlarge
 *         nodeCount: 2
 *       vpcConfiguration:
 *         vpcId: ${test.id}
 *         securityGroupIds:
 *           - ${exampleAwsSecurityGroup.id}
 *         subnetIds:
 *           - ${exampleAwsSubnet.id}
 *         ipAddressType: IP_V4
 *       cacheStorageConfigurations:
 *         - type: CACHE_1000
 *           size: 1200
 *       databases:
 *         - databaseName: ${exampleAwsFinspaceKxDatabase.name}
 *           cacheConfiguration:
 *             - cacheType: CACHE_1000
 *               dbPaths: /
 *       code:
 *         s3Bucket: ${testAwsS3Bucket.id}
 *         s3Key: ${object.key}
 * ```
 * 
 * ## Import
 * Using `pulumi import`, import an AWS FinSpace Kx Cluster using the `id` (environment ID and cluster name, comma-delimited). For example:
 * ```sh
 * $ pulumi import aws:finspace/kxCluster:KxCluster example n3ceo7wqxoxcti5tujqwzs,my-tf-kx-cluster
 * ```
 * @property autoScalingConfiguration Configuration based on which FinSpace will scale in or scale out nodes in your cluster. See auto_scaling_configuration.
 * @property availabilityZoneId The availability zone identifiers for the requested regions. Required when `az_mode` is set to SINGLE.
 * @property azMode The number of availability zones you want to assign per cluster. This can be one of the following:
 * * SINGLE - Assigns one availability zone per cluster.
 * * MULTI - Assigns all the availability zones per cluster.
 * @property cacheStorageConfigurations Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
 * @property capacityConfiguration Structure for the metadata of a cluster. Includes information like the CPUs needed, memory of instances, and number of instances. See capacity_configuration.
 * @property code Details of the custom code that you want to use inside a cluster when analyzing data. Consists of the S3 source bucket, location, object version, and the relative path from where the custom code is loaded into the cluster. See code.
 * @property commandLineArguments List of key-value pairs to make available inside the cluster.
 * @property databases KX database that will be available for querying. Defined below.
 * @property description Description of the cluster.
 * @property environmentId Unique identifier for the KX environment.
 * @property executionRole An IAM role that defines a set of permissions associated with a cluster. These permissions are assumed when a cluster attempts to access another cluster.
 * @property initializationScript Path to Q program that will be run at launch of a cluster. This is a relative path within .zip file that contains the custom code, which will be loaded on the cluster. It must include the file name itself. For example, somedir/init.q.
 * @property name Unique name for the cluster that you want to create.
 * @property releaseLabel Version of FinSpace Managed kdb to run.
 * @property savedownStorageConfiguration Size and type of the temporary storage that is used to hold data during the savedown process. This parameter is required when you choose `type` as RDB. All the data written to this storage space is lost when the cluster node is restarted. See savedown_storage_configuration.
 * @property scalingGroupConfiguration The structure that stores the configuration details of a scaling group.
 * @property tags Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
 * @property tickerplantLogConfigurations A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
 * @property type Type of KDB database. The following types are available:
 * * HDB - Historical Database. The data is only accessible with read-only permissions from one of the FinSpace managed KX databases mounted to the cluster.
 * * RDB - Realtime Database. This type of database captures all the data from a ticker plant and stores it in memory until the end of day, after which it writes all of its data to a disk and reloads the HDB. This cluster type requires local storage for temporary storage of data during the savedown process. If you specify this field in your request, you must provide the `savedownStorageConfiguration` parameter.
 * * GATEWAY - A gateway cluster allows you to access data across processes in kdb systems. It allows you to create your own routing logic using the initialization scripts and custom code. This type of cluster does not require a  writable local storage.
 * * GP - A general purpose cluster allows you to quickly iterate on code during development by granting greater access to system commands and enabling a fast reload of custom code. This cluster type can optionally mount databases including cache and savedown storage. For this cluster type, the node count is fixed at 1. It does not support autoscaling and supports only `SINGLE` AZ mode.
 * * Tickerplant – A tickerplant cluster allows you to subscribe to feed handlers based on IAM permissions. It can publish to RDBs, other Tickerplants, and real-time subscribers (RTS). Tickerplants can persist messages to log, which is readable by any RDB environment. It supports only single-node that is only one kdb process.
 * @property vpcConfiguration Configuration details about the network where the Privatelink endpoint of the cluster resides. See vpc_configuration.
 * The following arguments are optional:
 */
public data class KxClusterArgs(
    public val autoScalingConfiguration: Output? = null,
    public val availabilityZoneId: Output? = null,
    public val azMode: Output? = null,
    public val cacheStorageConfigurations: Output>? =
        null,
    public val capacityConfiguration: Output? = null,
    public val code: Output? = null,
    public val commandLineArguments: Output>? = null,
    public val databases: Output>? = null,
    public val description: Output? = null,
    public val environmentId: Output? = null,
    public val executionRole: Output? = null,
    public val initializationScript: Output? = null,
    public val name: Output? = null,
    public val releaseLabel: Output? = null,
    public val savedownStorageConfiguration: Output? =
        null,
    public val scalingGroupConfiguration: Output? = null,
    public val tags: Output>? = null,
    public val tickerplantLogConfigurations: Output>? =
        null,
    public val type: Output? = null,
    public val vpcConfiguration: Output? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.aws.finspace.KxClusterArgs =
        com.pulumi.aws.finspace.KxClusterArgs.builder()
            .autoScalingConfiguration(
                autoScalingConfiguration?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .availabilityZoneId(availabilityZoneId?.applyValue({ args0 -> args0 }))
            .azMode(azMode?.applyValue({ args0 -> args0 }))
            .cacheStorageConfigurations(
                cacheStorageConfigurations?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .capacityConfiguration(
                capacityConfiguration?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .code(code?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .commandLineArguments(
                commandLineArguments?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .databases(
                databases?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .description(description?.applyValue({ args0 -> args0 }))
            .environmentId(environmentId?.applyValue({ args0 -> args0 }))
            .executionRole(executionRole?.applyValue({ args0 -> args0 }))
            .initializationScript(initializationScript?.applyValue({ args0 -> args0 }))
            .name(name?.applyValue({ args0 -> args0 }))
            .releaseLabel(releaseLabel?.applyValue({ args0 -> args0 }))
            .savedownStorageConfiguration(
                savedownStorageConfiguration?.applyValue({ args0 ->
                    args0.let({ args0 -> args0.toJava() })
                }),
            )
            .scalingGroupConfiguration(
                scalingGroupConfiguration?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .tickerplantLogConfigurations(
                tickerplantLogConfigurations?.applyValue({ args0 ->
                    args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) })
                }),
            )
            .type(type?.applyValue({ args0 -> args0 }))
            .vpcConfiguration(
                vpcConfiguration?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            ).build()
}

/**
 * Builder for [KxClusterArgs].
 */
@PulumiTagMarker
public class KxClusterArgsBuilder internal constructor() {
    private var autoScalingConfiguration: Output? = null

    private var availabilityZoneId: Output? = null

    private var azMode: Output? = null

    private var cacheStorageConfigurations: Output>? =
        null

    private var capacityConfiguration: Output? = null

    private var code: Output? = null

    private var commandLineArguments: Output>? = null

    private var databases: Output>? = null

    private var description: Output? = null

    private var environmentId: Output? = null

    private var executionRole: Output? = null

    private var initializationScript: Output? = null

    private var name: Output? = null

    private var releaseLabel: Output? = null

    private var savedownStorageConfiguration: Output? =
        null

    private var scalingGroupConfiguration: Output? = null

    private var tags: Output>? = null

    private var tickerplantLogConfigurations: Output>? =
        null

    private var type: Output? = null

    private var vpcConfiguration: Output? = null

    /**
     * @param value Configuration based on which FinSpace will scale in or scale out nodes in your cluster. See auto_scaling_configuration.
     */
    @JvmName("dnxqiykenlvuiqkc")
    public suspend fun autoScalingConfiguration(`value`: Output) {
        this.autoScalingConfiguration = value
    }

    /**
     * @param value The availability zone identifiers for the requested regions. Required when `az_mode` is set to SINGLE.
     */
    @JvmName("hjlranhsklrkfkfd")
    public suspend fun availabilityZoneId(`value`: Output) {
        this.availabilityZoneId = value
    }

    /**
     * @param value The number of availability zones you want to assign per cluster. This can be one of the following:
     * * SINGLE - Assigns one availability zone per cluster.
     * * MULTI - Assigns all the availability zones per cluster.
     */
    @JvmName("gspnrwvqxdoyhtkr")
    public suspend fun azMode(`value`: Output) {
        this.azMode = value
    }

    /**
     * @param value Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("bgbgrxybpjopoocn")
    public suspend fun cacheStorageConfigurations(`value`: Output>) {
        this.cacheStorageConfigurations = value
    }

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

    /**
     * @param values Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("prhefxpasmmlvrwo")
    public suspend fun cacheStorageConfigurations(values: List>) {
        this.cacheStorageConfigurations = Output.all(values)
    }

    /**
     * @param value Structure for the metadata of a cluster. Includes information like the CPUs needed, memory of instances, and number of instances. See capacity_configuration.
     */
    @JvmName("cdxvoewbhjnsnylv")
    public suspend fun capacityConfiguration(`value`: Output) {
        this.capacityConfiguration = value
    }

    /**
     * @param value Details of the custom code that you want to use inside a cluster when analyzing data. Consists of the S3 source bucket, location, object version, and the relative path from where the custom code is loaded into the cluster. See code.
     */
    @JvmName("mikdahhqttumakak")
    public suspend fun code(`value`: Output) {
        this.code = value
    }

    /**
     * @param value List of key-value pairs to make available inside the cluster.
     */
    @JvmName("oxutleltsmtjpwac")
    public suspend fun commandLineArguments(`value`: Output>) {
        this.commandLineArguments = value
    }

    /**
     * @param value KX database that will be available for querying. Defined below.
     */
    @JvmName("bocmbxcpltvdwbag")
    public suspend fun databases(`value`: Output>) {
        this.databases = value
    }

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

    /**
     * @param values KX database that will be available for querying. Defined below.
     */
    @JvmName("urmmfbfyuvdevwwv")
    public suspend fun databases(values: List>) {
        this.databases = Output.all(values)
    }

    /**
     * @param value Description of the cluster.
     */
    @JvmName("rutsvtsclpapgwhl")
    public suspend fun description(`value`: Output) {
        this.description = value
    }

    /**
     * @param value Unique identifier for the KX environment.
     */
    @JvmName("pggqsxmcdfepkvbm")
    public suspend fun environmentId(`value`: Output) {
        this.environmentId = value
    }

    /**
     * @param value An IAM role that defines a set of permissions associated with a cluster. These permissions are assumed when a cluster attempts to access another cluster.
     */
    @JvmName("oelbjkgqrukjcmmx")
    public suspend fun executionRole(`value`: Output) {
        this.executionRole = value
    }

    /**
     * @param value Path to Q program that will be run at launch of a cluster. This is a relative path within .zip file that contains the custom code, which will be loaded on the cluster. It must include the file name itself. For example, somedir/init.q.
     */
    @JvmName("ixertwuxbtwcfrpc")
    public suspend fun initializationScript(`value`: Output) {
        this.initializationScript = value
    }

    /**
     * @param value Unique name for the cluster that you want to create.
     */
    @JvmName("rhynpkxkpdqwfpbp")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

    /**
     * @param value Version of FinSpace Managed kdb to run.
     */
    @JvmName("hrgcrjwlqpubdehg")
    public suspend fun releaseLabel(`value`: Output) {
        this.releaseLabel = value
    }

    /**
     * @param value Size and type of the temporary storage that is used to hold data during the savedown process. This parameter is required when you choose `type` as RDB. All the data written to this storage space is lost when the cluster node is restarted. See savedown_storage_configuration.
     */
    @JvmName("alycvnwgepcbviap")
    public suspend fun savedownStorageConfiguration(`value`: Output) {
        this.savedownStorageConfiguration = value
    }

    /**
     * @param value The structure that stores the configuration details of a scaling group.
     */
    @JvmName("rmiiguniifmdeoqr")
    public suspend fun scalingGroupConfiguration(`value`: Output) {
        this.scalingGroupConfiguration = value
    }

    /**
     * @param value Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     */
    @JvmName("nmaukaotkhtpfgqt")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("ousdrlurhbsnbuku")
    public suspend fun tickerplantLogConfigurations(`value`: Output>) {
        this.tickerplantLogConfigurations = value
    }

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

    /**
     * @param values A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("klrcnkceunsgynam")
    public suspend fun tickerplantLogConfigurations(values: List>) {
        this.tickerplantLogConfigurations = Output.all(values)
    }

    /**
     * @param value Type of KDB database. The following types are available:
     * * HDB - Historical Database. The data is only accessible with read-only permissions from one of the FinSpace managed KX databases mounted to the cluster.
     * * RDB - Realtime Database. This type of database captures all the data from a ticker plant and stores it in memory until the end of day, after which it writes all of its data to a disk and reloads the HDB. This cluster type requires local storage for temporary storage of data during the savedown process. If you specify this field in your request, you must provide the `savedownStorageConfiguration` parameter.
     * * GATEWAY - A gateway cluster allows you to access data across processes in kdb systems. It allows you to create your own routing logic using the initialization scripts and custom code. This type of cluster does not require a  writable local storage.
     * * GP - A general purpose cluster allows you to quickly iterate on code during development by granting greater access to system commands and enabling a fast reload of custom code. This cluster type can optionally mount databases including cache and savedown storage. For this cluster type, the node count is fixed at 1. It does not support autoscaling and supports only `SINGLE` AZ mode.
     * * Tickerplant – A tickerplant cluster allows you to subscribe to feed handlers based on IAM permissions. It can publish to RDBs, other Tickerplants, and real-time subscribers (RTS). Tickerplants can persist messages to log, which is readable by any RDB environment. It supports only single-node that is only one kdb process.
     */
    @JvmName("wwxwkelirqmfvuis")
    public suspend fun type(`value`: Output) {
        this.type = value
    }

    /**
     * @param value Configuration details about the network where the Privatelink endpoint of the cluster resides. See vpc_configuration.
     * The following arguments are optional:
     */
    @JvmName("dqwsnnyguvsitcst")
    public suspend fun vpcConfiguration(`value`: Output) {
        this.vpcConfiguration = value
    }

    /**
     * @param value Configuration based on which FinSpace will scale in or scale out nodes in your cluster. See auto_scaling_configuration.
     */
    @JvmName("ukbaxwhxycpwcnrk")
    public suspend fun autoScalingConfiguration(`value`: KxClusterAutoScalingConfigurationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.autoScalingConfiguration = mapped
    }

    /**
     * @param argument Configuration based on which FinSpace will scale in or scale out nodes in your cluster. See auto_scaling_configuration.
     */
    @JvmName("kugsptlnywsbmmsj")
    public suspend fun autoScalingConfiguration(argument: suspend KxClusterAutoScalingConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = KxClusterAutoScalingConfigurationArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.autoScalingConfiguration = mapped
    }

    /**
     * @param value The availability zone identifiers for the requested regions. Required when `az_mode` is set to SINGLE.
     */
    @JvmName("qchgynlghajpncah")
    public suspend fun availabilityZoneId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.availabilityZoneId = mapped
    }

    /**
     * @param value The number of availability zones you want to assign per cluster. This can be one of the following:
     * * SINGLE - Assigns one availability zone per cluster.
     * * MULTI - Assigns all the availability zones per cluster.
     */
    @JvmName("urdpvcppkcmcsnrv")
    public suspend fun azMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.azMode = mapped
    }

    /**
     * @param value Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("cgypbscolrhjelny")
    public suspend fun cacheStorageConfigurations(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.cacheStorageConfigurations = mapped
    }

    /**
     * @param argument Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("hyipxgftrxpaxiyp")
    public suspend fun cacheStorageConfigurations(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            KxClusterCacheStorageConfigurationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.cacheStorageConfigurations = mapped
    }

    /**
     * @param argument Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("nvyiukybkdqciqxp")
    public suspend fun cacheStorageConfigurations(vararg argument: suspend KxClusterCacheStorageConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            KxClusterCacheStorageConfigurationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.cacheStorageConfigurations = mapped
    }

    /**
     * @param argument Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("bncvkmkdgsruqepr")
    public suspend fun cacheStorageConfigurations(argument: suspend KxClusterCacheStorageConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            KxClusterCacheStorageConfigurationArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.cacheStorageConfigurations = mapped
    }

    /**
     * @param values Configurations for a read only cache storage associated with a cluster. This cache will be stored as an FSx Lustre that reads from the S3 store. See cache_storage_configuration.
     */
    @JvmName("lwfaotvmvixyllue")
    public suspend fun cacheStorageConfigurations(vararg values: KxClusterCacheStorageConfigurationArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.cacheStorageConfigurations = mapped
    }

    /**
     * @param value Structure for the metadata of a cluster. Includes information like the CPUs needed, memory of instances, and number of instances. See capacity_configuration.
     */
    @JvmName("idfejudicbvhlusc")
    public suspend fun capacityConfiguration(`value`: KxClusterCapacityConfigurationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.capacityConfiguration = mapped
    }

    /**
     * @param argument Structure for the metadata of a cluster. Includes information like the CPUs needed, memory of instances, and number of instances. See capacity_configuration.
     */
    @JvmName("lshalahmbofepaaq")
    public suspend fun capacityConfiguration(argument: suspend KxClusterCapacityConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = KxClusterCapacityConfigurationArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.capacityConfiguration = mapped
    }

    /**
     * @param value Details of the custom code that you want to use inside a cluster when analyzing data. Consists of the S3 source bucket, location, object version, and the relative path from where the custom code is loaded into the cluster. See code.
     */
    @JvmName("jasgdfowbkwowvri")
    public suspend fun code(`value`: KxClusterCodeArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.code = mapped
    }

    /**
     * @param argument Details of the custom code that you want to use inside a cluster when analyzing data. Consists of the S3 source bucket, location, object version, and the relative path from where the custom code is loaded into the cluster. See code.
     */
    @JvmName("fyubalwgsmlgxjnb")
    public suspend fun code(argument: suspend KxClusterCodeArgsBuilder.() -> Unit) {
        val toBeMapped = KxClusterCodeArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.code = mapped
    }

    /**
     * @param value List of key-value pairs to make available inside the cluster.
     */
    @JvmName("ugkbhuoyyqdcjlus")
    public suspend fun commandLineArguments(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.commandLineArguments = mapped
    }

    /**
     * @param values List of key-value pairs to make available inside the cluster.
     */
    @JvmName("xhosjpipvvotsbqm")
    public fun commandLineArguments(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.commandLineArguments = mapped
    }

    /**
     * @param value KX database that will be available for querying. Defined below.
     */
    @JvmName("jodoxwhbxfbdpkll")
    public suspend fun databases(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.databases = mapped
    }

    /**
     * @param argument KX database that will be available for querying. Defined below.
     */
    @JvmName("eextcsegiexypceu")
    public suspend fun databases(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            KxClusterDatabaseArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.databases = mapped
    }

    /**
     * @param argument KX database that will be available for querying. Defined below.
     */
    @JvmName("wxlffmagjxrunwgi")
    public suspend fun databases(vararg argument: suspend KxClusterDatabaseArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            KxClusterDatabaseArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.databases = mapped
    }

    /**
     * @param argument KX database that will be available for querying. Defined below.
     */
    @JvmName("cyncnlqyfqfwetfi")
    public suspend fun databases(argument: suspend KxClusterDatabaseArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(KxClusterDatabaseArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.databases = mapped
    }

    /**
     * @param values KX database that will be available for querying. Defined below.
     */
    @JvmName("emscgdpgnvyxsdpp")
    public suspend fun databases(vararg values: KxClusterDatabaseArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.databases = mapped
    }

    /**
     * @param value Description of the cluster.
     */
    @JvmName("skcjwxkjjpqwxarf")
    public suspend fun description(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.description = mapped
    }

    /**
     * @param value Unique identifier for the KX environment.
     */
    @JvmName("kivipxkbeuirtujb")
    public suspend fun environmentId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.environmentId = mapped
    }

    /**
     * @param value An IAM role that defines a set of permissions associated with a cluster. These permissions are assumed when a cluster attempts to access another cluster.
     */
    @JvmName("ifvvkxymnnffrprc")
    public suspend fun executionRole(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.executionRole = mapped
    }

    /**
     * @param value Path to Q program that will be run at launch of a cluster. This is a relative path within .zip file that contains the custom code, which will be loaded on the cluster. It must include the file name itself. For example, somedir/init.q.
     */
    @JvmName("lbjspvcqrnpameto")
    public suspend fun initializationScript(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.initializationScript = mapped
    }

    /**
     * @param value Unique name for the cluster that you want to create.
     */
    @JvmName("uobnsielgxyepqxr")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

    /**
     * @param value Version of FinSpace Managed kdb to run.
     */
    @JvmName("kctshsgrkgxxqnku")
    public suspend fun releaseLabel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.releaseLabel = mapped
    }

    /**
     * @param value Size and type of the temporary storage that is used to hold data during the savedown process. This parameter is required when you choose `type` as RDB. All the data written to this storage space is lost when the cluster node is restarted. See savedown_storage_configuration.
     */
    @JvmName("rclqqrmkbuksncet")
    public suspend fun savedownStorageConfiguration(`value`: KxClusterSavedownStorageConfigurationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.savedownStorageConfiguration = mapped
    }

    /**
     * @param argument Size and type of the temporary storage that is used to hold data during the savedown process. This parameter is required when you choose `type` as RDB. All the data written to this storage space is lost when the cluster node is restarted. See savedown_storage_configuration.
     */
    @JvmName("nkvlogcdougdohso")
    public suspend fun savedownStorageConfiguration(argument: suspend KxClusterSavedownStorageConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = KxClusterSavedownStorageConfigurationArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.savedownStorageConfiguration = mapped
    }

    /**
     * @param value The structure that stores the configuration details of a scaling group.
     */
    @JvmName("gcgwtuidxomvwlbu")
    public suspend fun scalingGroupConfiguration(`value`: KxClusterScalingGroupConfigurationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.scalingGroupConfiguration = mapped
    }

    /**
     * @param argument The structure that stores the configuration details of a scaling group.
     */
    @JvmName("qeetfmpowextpcvx")
    public suspend fun scalingGroupConfiguration(argument: suspend KxClusterScalingGroupConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = KxClusterScalingGroupConfigurationArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.scalingGroupConfiguration = mapped
    }

    /**
     * @param value Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     */
    @JvmName("vxiobvceshvodfdb")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     */
    @JvmName("usuuqhoskqyuyffi")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("boyyngmbfbpdfqqa")
    public suspend fun tickerplantLogConfigurations(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tickerplantLogConfigurations = mapped
    }

    /**
     * @param argument A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("fesnhqwhlqwpmqyh")
    public suspend fun tickerplantLogConfigurations(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            KxClusterTickerplantLogConfigurationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.tickerplantLogConfigurations = mapped
    }

    /**
     * @param argument A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("nndvjkbcugsdairp")
    public suspend fun tickerplantLogConfigurations(vararg argument: suspend KxClusterTickerplantLogConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            KxClusterTickerplantLogConfigurationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.tickerplantLogConfigurations = mapped
    }

    /**
     * @param argument A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("yttdsyfrypbxipkm")
    public suspend fun tickerplantLogConfigurations(argument: suspend KxClusterTickerplantLogConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            KxClusterTickerplantLogConfigurationArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.tickerplantLogConfigurations = mapped
    }

    /**
     * @param values A configuration to store Tickerplant logs. It consists of a list of volumes that will be mounted to your cluster. For the cluster type Tickerplant , the location of the TP volume on the cluster will be available by using the global variable .aws.tp_log_path.
     */
    @JvmName("lmnjejicaofklwyw")
    public suspend fun tickerplantLogConfigurations(vararg values: KxClusterTickerplantLogConfigurationArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tickerplantLogConfigurations = mapped
    }

    /**
     * @param value Type of KDB database. The following types are available:
     * * HDB - Historical Database. The data is only accessible with read-only permissions from one of the FinSpace managed KX databases mounted to the cluster.
     * * RDB - Realtime Database. This type of database captures all the data from a ticker plant and stores it in memory until the end of day, after which it writes all of its data to a disk and reloads the HDB. This cluster type requires local storage for temporary storage of data during the savedown process. If you specify this field in your request, you must provide the `savedownStorageConfiguration` parameter.
     * * GATEWAY - A gateway cluster allows you to access data across processes in kdb systems. It allows you to create your own routing logic using the initialization scripts and custom code. This type of cluster does not require a  writable local storage.
     * * GP - A general purpose cluster allows you to quickly iterate on code during development by granting greater access to system commands and enabling a fast reload of custom code. This cluster type can optionally mount databases including cache and savedown storage. For this cluster type, the node count is fixed at 1. It does not support autoscaling and supports only `SINGLE` AZ mode.
     * * Tickerplant – A tickerplant cluster allows you to subscribe to feed handlers based on IAM permissions. It can publish to RDBs, other Tickerplants, and real-time subscribers (RTS). Tickerplants can persist messages to log, which is readable by any RDB environment. It supports only single-node that is only one kdb process.
     */
    @JvmName("mehfwqhtbmttobka")
    public suspend fun type(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.type = mapped
    }

    /**
     * @param value Configuration details about the network where the Privatelink endpoint of the cluster resides. See vpc_configuration.
     * The following arguments are optional:
     */
    @JvmName("yegucwywaoooepgi")
    public suspend fun vpcConfiguration(`value`: KxClusterVpcConfigurationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vpcConfiguration = mapped
    }

    /**
     * @param argument Configuration details about the network where the Privatelink endpoint of the cluster resides. See vpc_configuration.
     * The following arguments are optional:
     */
    @JvmName("ocralucdjckpdfdf")
    public suspend fun vpcConfiguration(argument: suspend KxClusterVpcConfigurationArgsBuilder.() -> Unit) {
        val toBeMapped = KxClusterVpcConfigurationArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.vpcConfiguration = mapped
    }

    internal fun build(): KxClusterArgs = KxClusterArgs(
        autoScalingConfiguration = autoScalingConfiguration,
        availabilityZoneId = availabilityZoneId,
        azMode = azMode,
        cacheStorageConfigurations = cacheStorageConfigurations,
        capacityConfiguration = capacityConfiguration,
        code = code,
        commandLineArguments = commandLineArguments,
        databases = databases,
        description = description,
        environmentId = environmentId,
        executionRole = executionRole,
        initializationScript = initializationScript,
        name = name,
        releaseLabel = releaseLabel,
        savedownStorageConfiguration = savedownStorageConfiguration,
        scalingGroupConfiguration = scalingGroupConfiguration,
        tags = tags,
        tickerplantLogConfigurations = tickerplantLogConfigurations,
        type = type,
        vpcConfiguration = vpcConfiguration,
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy