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

com.pulumi.cloudflare.kotlin.LoadBalancerPool.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: 5.47.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.cloudflare.kotlin

import com.pulumi.cloudflare.kotlin.outputs.LoadBalancerPoolLoadShedding
import com.pulumi.cloudflare.kotlin.outputs.LoadBalancerPoolOrigin
import com.pulumi.cloudflare.kotlin.outputs.LoadBalancerPoolOriginSteering
import com.pulumi.core.Output
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Boolean
import kotlin.Double
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import com.pulumi.cloudflare.kotlin.outputs.LoadBalancerPoolLoadShedding.Companion.toKotlin as loadBalancerPoolLoadSheddingToKotlin
import com.pulumi.cloudflare.kotlin.outputs.LoadBalancerPoolOrigin.Companion.toKotlin as loadBalancerPoolOriginToKotlin
import com.pulumi.cloudflare.kotlin.outputs.LoadBalancerPoolOriginSteering.Companion.toKotlin as loadBalancerPoolOriginSteeringToKotlin

/**
 * Builder for [LoadBalancerPool].
 */
@PulumiTagMarker
public class LoadBalancerPoolResourceBuilder internal constructor() {
    public var name: String? = null

    public var args: LoadBalancerPoolArgs = LoadBalancerPoolArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

    /**
     * @param name The _unique_ name of the resulting resource.
     */
    public fun name(`value`: String) {
        this.name = value
    }

    /**
     * @param block The arguments to use to populate this resource's properties.
     */
    public suspend fun args(block: suspend LoadBalancerPoolArgsBuilder.() -> Unit) {
        val builder = LoadBalancerPoolArgsBuilder()
        block(builder)
        this.args = builder.build()
    }

    /**
     * @param block A bag of options that control this resource's behavior.
     */
    public suspend fun opts(block: suspend CustomResourceOptionsBuilder.() -> Unit) {
        this.opts = com.pulumi.kotlin.options.CustomResourceOptions.opts(block)
    }

    internal fun build(): LoadBalancerPool {
        val builtJavaResource = com.pulumi.cloudflare.LoadBalancerPool(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return LoadBalancerPool(builtJavaResource)
    }
}

/**
 * Provides a Cloudflare Load Balancer pool resource. This provides a
 * pool of origins that can be used by a Cloudflare Load Balancer.
 * ## Example Usage
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as cloudflare from "@pulumi/cloudflare";
 * const example = new cloudflare.LoadBalancerPool("example", {
 *     accountId: "f037e56e89293a057740de681ac9abbe",
 *     name: "example-pool",
 *     origins: [
 *         {
 *             name: "example-1",
 *             address: "192.0.2.1",
 *             enabled: false,
 *             headers: [{
 *                 header: "Host",
 *                 values: ["example-1"],
 *             }],
 *         },
 *         {
 *             name: "example-2",
 *             address: "192.0.2.2",
 *             headers: [{
 *                 header: "Host",
 *                 values: ["example-2"],
 *             }],
 *         },
 *     ],
 *     latitude: 55,
 *     longitude: -12,
 *     description: "example load balancer pool",
 *     enabled: false,
 *     minimumOrigins: 1,
 *     notificationEmail: "[email protected]",
 *     loadSheddings: [{
 *         defaultPercent: 55,
 *         defaultPolicy: "random",
 *         sessionPercent: 12,
 *         sessionPolicy: "hash",
 *     }],
 *     originSteerings: [{
 *         policy: "random",
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_cloudflare as cloudflare
 * example = cloudflare.LoadBalancerPool("example",
 *     account_id="f037e56e89293a057740de681ac9abbe",
 *     name="example-pool",
 *     origins=[
 *         {
 *             "name": "example-1",
 *             "address": "192.0.2.1",
 *             "enabled": False,
 *             "headers": [{
 *                 "header": "Host",
 *                 "values": ["example-1"],
 *             }],
 *         },
 *         {
 *             "name": "example-2",
 *             "address": "192.0.2.2",
 *             "headers": [{
 *                 "header": "Host",
 *                 "values": ["example-2"],
 *             }],
 *         },
 *     ],
 *     latitude=55,
 *     longitude=-12,
 *     description="example load balancer pool",
 *     enabled=False,
 *     minimum_origins=1,
 *     notification_email="[email protected]",
 *     load_sheddings=[{
 *         "default_percent": 55,
 *         "default_policy": "random",
 *         "session_percent": 12,
 *         "session_policy": "hash",
 *     }],
 *     origin_steerings=[{
 *         "policy": "random",
 *     }])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Cloudflare = Pulumi.Cloudflare;
 * return await Deployment.RunAsync(() =>
 * {
 *     var example = new Cloudflare.LoadBalancerPool("example", new()
 *     {
 *         AccountId = "f037e56e89293a057740de681ac9abbe",
 *         Name = "example-pool",
 *         Origins = new[]
 *         {
 *             new Cloudflare.Inputs.LoadBalancerPoolOriginArgs
 *             {
 *                 Name = "example-1",
 *                 Address = "192.0.2.1",
 *                 Enabled = false,
 *                 Headers = new[]
 *                 {
 *                     new Cloudflare.Inputs.LoadBalancerPoolOriginHeaderArgs
 *                     {
 *                         Header = "Host",
 *                         Values = new[]
 *                         {
 *                             "example-1",
 *                         },
 *                     },
 *                 },
 *             },
 *             new Cloudflare.Inputs.LoadBalancerPoolOriginArgs
 *             {
 *                 Name = "example-2",
 *                 Address = "192.0.2.2",
 *                 Headers = new[]
 *                 {
 *                     new Cloudflare.Inputs.LoadBalancerPoolOriginHeaderArgs
 *                     {
 *                         Header = "Host",
 *                         Values = new[]
 *                         {
 *                             "example-2",
 *                         },
 *                     },
 *                 },
 *             },
 *         },
 *         Latitude = 55,
 *         Longitude = -12,
 *         Description = "example load balancer pool",
 *         Enabled = false,
 *         MinimumOrigins = 1,
 *         NotificationEmail = "[email protected]",
 *         LoadSheddings = new[]
 *         {
 *             new Cloudflare.Inputs.LoadBalancerPoolLoadSheddingArgs
 *             {
 *                 DefaultPercent = 55,
 *                 DefaultPolicy = "random",
 *                 SessionPercent = 12,
 *                 SessionPolicy = "hash",
 *             },
 *         },
 *         OriginSteerings = new[]
 *         {
 *             new Cloudflare.Inputs.LoadBalancerPoolOriginSteeringArgs
 *             {
 *                 Policy = "random",
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-cloudflare/sdk/v5/go/cloudflare"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := cloudflare.NewLoadBalancerPool(ctx, "example", &cloudflare.LoadBalancerPoolArgs{
 * 			AccountId: pulumi.String("f037e56e89293a057740de681ac9abbe"),
 * 			Name:      pulumi.String("example-pool"),
 * 			Origins: cloudflare.LoadBalancerPoolOriginArray{
 * 				&cloudflare.LoadBalancerPoolOriginArgs{
 * 					Name:    pulumi.String("example-1"),
 * 					Address: pulumi.String("192.0.2.1"),
 * 					Enabled: pulumi.Bool(false),
 * 					Headers: cloudflare.LoadBalancerPoolOriginHeaderArray{
 * 						&cloudflare.LoadBalancerPoolOriginHeaderArgs{
 * 							Header: pulumi.String("Host"),
 * 							Values: pulumi.StringArray{
 * 								pulumi.String("example-1"),
 * 							},
 * 						},
 * 					},
 * 				},
 * 				&cloudflare.LoadBalancerPoolOriginArgs{
 * 					Name:    pulumi.String("example-2"),
 * 					Address: pulumi.String("192.0.2.2"),
 * 					Headers: cloudflare.LoadBalancerPoolOriginHeaderArray{
 * 						&cloudflare.LoadBalancerPoolOriginHeaderArgs{
 * 							Header: pulumi.String("Host"),
 * 							Values: pulumi.StringArray{
 * 								pulumi.String("example-2"),
 * 							},
 * 						},
 * 					},
 * 				},
 * 			},
 * 			Latitude:          pulumi.Float64(55),
 * 			Longitude:         -12,
 * 			Description:       pulumi.String("example load balancer pool"),
 * 			Enabled:           pulumi.Bool(false),
 * 			MinimumOrigins:    pulumi.Int(1),
 * 			NotificationEmail: pulumi.String("[email protected]"),
 * 			LoadSheddings: cloudflare.LoadBalancerPoolLoadSheddingArray{
 * 				&cloudflare.LoadBalancerPoolLoadSheddingArgs{
 * 					DefaultPercent: pulumi.Float64(55),
 * 					DefaultPolicy:  pulumi.String("random"),
 * 					SessionPercent: pulumi.Float64(12),
 * 					SessionPolicy:  pulumi.String("hash"),
 * 				},
 * 			},
 * 			OriginSteerings: cloudflare.LoadBalancerPoolOriginSteeringArray{
 * 				&cloudflare.LoadBalancerPoolOriginSteeringArgs{
 * 					Policy: pulumi.String("random"),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: cloudflare:LoadBalancerPool
 *     properties:
 *       accountId: f037e56e89293a057740de681ac9abbe
 *       name: example-pool
 *       origins:
 *         - name: example-1
 *           address: 192.0.2.1
 *           enabled: false
 *           headers:
 *             - header: Host
 *               values:
 *                 - example-1
 *         - name: example-2
 *           address: 192.0.2.2
 *           headers:
 *             - header: Host
 *               values:
 *                 - example-2
 *       latitude: 55
 *       longitude: -12
 *       description: example load balancer pool
 *       enabled: false
 *       minimumOrigins: 1
 *       notificationEmail: [email protected]
 *       loadSheddings:
 *         - defaultPercent: 55
 *           defaultPolicy: random
 *           sessionPercent: 12
 *           sessionPolicy: hash
 *       originSteerings:
 *         - policy: random
 * ```
 * 
 * ## Import
 * ```sh
 * $ pulumi import cloudflare:index/loadBalancerPool:LoadBalancerPool example /
 * ```
 */
public class LoadBalancerPool internal constructor(
    override val javaResource: com.pulumi.cloudflare.LoadBalancerPool,
) : KotlinCustomResource(javaResource, LoadBalancerPoolMapper) {
    /**
     * The account identifier to target for the resource.
     */
    public val accountId: Output
        get() = javaResource.accountId().applyValue({ args0 -> args0 })

    /**
     * A list of regions (specified by region code) from which to run health checks. Empty means every Cloudflare data center (the default), but requires an Enterprise plan. Region codes can be found [here](https://developers.cloudflare.com/load-balancing/reference/region-mapping-api).
     */
    public val checkRegions: Output>
        get() = javaResource.checkRegions().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * The RFC3339 timestamp of when the load balancer was created.
     */
    public val createdOn: Output
        get() = javaResource.createdOn().applyValue({ args0 -> args0 })

    /**
     * Free text description.
     */
    public val description: Output?
        get() = javaResource.description().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Whether to enable (the default) this pool. Disabled pools will not receive traffic and are excluded from health checks. Disabling a pool will cause any load balancers using it to failover to the next pool (if any). Defaults to `true`.
     */
    public val enabled: Output?
        get() = javaResource.enabled().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * The latitude this pool is physically located at; used for proximity steering.
     */
    public val latitude: Output?
        get() = javaResource.latitude().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * Setting for controlling load shedding for this pool.
     */
    public val loadSheddings: Output>?
        get() = javaResource.loadSheddings().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.let({ args0 ->
                        loadBalancerPoolLoadSheddingToKotlin(args0)
                    })
                })
            }).orElse(null)
        })

    /**
     * The longitude this pool is physically located at; used for proximity steering.
     */
    public val longitude: Output?
        get() = javaResource.longitude().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * The minimum number of origins that must be healthy for this pool to serve traffic. If the number of healthy origins falls below this number, the pool will be marked unhealthy and we will failover to the next available pool. Defaults to `1`.
     */
    public val minimumOrigins: Output?
        get() = javaResource.minimumOrigins().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The RFC3339 timestamp of when the load balancer was last modified.
     */
    public val modifiedOn: Output
        get() = javaResource.modifiedOn().applyValue({ args0 -> args0 })

    /**
     * The ID of the Monitor to use for health checking origins within this pool.
     */
    public val monitor: Output?
        get() = javaResource.monitor().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * A short name (tag) for the pool.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * The email address to send health status notifications to. This can be an individual mailbox or a mailing list. Multiple emails can be supplied as a comma delimited list.
     */
    public val notificationEmail: Output?
        get() = javaResource.notificationEmail().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Set an origin steering policy to control origin selection within a pool.
     */
    public val originSteerings: Output>?
        get() = javaResource.originSteerings().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.let({ args0 ->
                        loadBalancerPoolOriginSteeringToKotlin(args0)
                    })
                })
            }).orElse(null)
        })

    /**
     * The list of origins within this pool. Traffic directed at this pool is balanced across all currently healthy origins, provided the pool itself is healthy.
     */
    public val origins: Output>
        get() = javaResource.origins().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 ->
                    loadBalancerPoolOriginToKotlin(args0)
                })
            })
        })
}

public object LoadBalancerPoolMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.cloudflare.LoadBalancerPool::class == javaResource::class

    override fun map(javaResource: Resource): LoadBalancerPool = LoadBalancerPool(
        javaResource as
            com.pulumi.cloudflare.LoadBalancerPool,
    )
}

/**
 * @see [LoadBalancerPool].
 * @param name The _unique_ name of the resulting resource.
 * @param block Builder for [LoadBalancerPool].
 */
public suspend fun loadBalancerPool(
    name: String,
    block: suspend LoadBalancerPoolResourceBuilder.() -> Unit,
): LoadBalancerPool {
    val builder = LoadBalancerPoolResourceBuilder()
    builder.name(name)
    block(builder)
    return builder.build()
}

/**
 * @see [LoadBalancerPool].
 * @param name The _unique_ name of the resulting resource.
 */
public fun loadBalancerPool(name: String): LoadBalancerPool {
    val builder = LoadBalancerPoolResourceBuilder()
    builder.name(name)
    return builder.build()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy