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

com.pulumi.azure.servicefabric.kotlin.ClusterArgs.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: 6.21.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.azure.servicefabric.kotlin

import com.pulumi.azure.servicefabric.ClusterArgs.builder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterAzureActiveDirectoryArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterAzureActiveDirectoryArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterCertificateArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterCertificateArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterCertificateCommonNamesArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterCertificateCommonNamesArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterClientCertificateCommonNameArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterClientCertificateCommonNameArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterClientCertificateThumbprintArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterClientCertificateThumbprintArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterDiagnosticsConfigArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterDiagnosticsConfigArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterFabricSettingArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterFabricSettingArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterNodeTypeArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterNodeTypeArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterReverseProxyCertificateArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterReverseProxyCertificateArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterReverseProxyCertificateCommonNamesArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterReverseProxyCertificateCommonNamesArgsBuilder
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterUpgradePolicyArgs
import com.pulumi.azure.servicefabric.kotlin.inputs.ClusterUpgradePolicyArgsBuilder
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

/**
 * Manages a Service Fabric Cluster.
 * ## Example Usage
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * const example = new azure.core.ResourceGroup("example", {
 *     name: "example-resources",
 *     location: "West Europe",
 * });
 * const exampleCluster = new azure.servicefabric.Cluster("example", {
 *     name: "example-servicefabric",
 *     resourceGroupName: example.name,
 *     location: example.location,
 *     reliabilityLevel: "Bronze",
 *     upgradeMode: "Manual",
 *     clusterCodeVersion: "7.1.456.959",
 *     vmImage: "Windows",
 *     managementEndpoint: "https://example:80",
 *     nodeTypes: [{
 *         name: "first",
 *         instanceCount: 3,
 *         isPrimary: true,
 *         clientEndpointPort: 2020,
 *         httpEndpointPort: 80,
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * example = azure.core.ResourceGroup("example",
 *     name="example-resources",
 *     location="West Europe")
 * example_cluster = azure.servicefabric.Cluster("example",
 *     name="example-servicefabric",
 *     resource_group_name=example.name,
 *     location=example.location,
 *     reliability_level="Bronze",
 *     upgrade_mode="Manual",
 *     cluster_code_version="7.1.456.959",
 *     vm_image="Windows",
 *     management_endpoint="https://example:80",
 *     node_types=[azure.servicefabric.ClusterNodeTypeArgs(
 *         name="first",
 *         instance_count=3,
 *         is_primary=True,
 *         client_endpoint_port=2020,
 *         http_endpoint_port=80,
 *     )])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * return await Deployment.RunAsync(() =>
 * {
 *     var example = new Azure.Core.ResourceGroup("example", new()
 *     {
 *         Name = "example-resources",
 *         Location = "West Europe",
 *     });
 *     var exampleCluster = new Azure.ServiceFabric.Cluster("example", new()
 *     {
 *         Name = "example-servicefabric",
 *         ResourceGroupName = example.Name,
 *         Location = example.Location,
 *         ReliabilityLevel = "Bronze",
 *         UpgradeMode = "Manual",
 *         ClusterCodeVersion = "7.1.456.959",
 *         VmImage = "Windows",
 *         ManagementEndpoint = "https://example:80",
 *         NodeTypes = new[]
 *         {
 *             new Azure.ServiceFabric.Inputs.ClusterNodeTypeArgs
 *             {
 *                 Name = "first",
 *                 InstanceCount = 3,
 *                 IsPrimary = true,
 *                 ClientEndpointPort = 2020,
 *                 HttpEndpointPort = 80,
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/servicefabric"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
 * 			Name:     pulumi.String("example-resources"),
 * 			Location: pulumi.String("West Europe"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = servicefabric.NewCluster(ctx, "example", &servicefabric.ClusterArgs{
 * 			Name:               pulumi.String("example-servicefabric"),
 * 			ResourceGroupName:  example.Name,
 * 			Location:           example.Location,
 * 			ReliabilityLevel:   pulumi.String("Bronze"),
 * 			UpgradeMode:        pulumi.String("Manual"),
 * 			ClusterCodeVersion: pulumi.String("7.1.456.959"),
 * 			VmImage:            pulumi.String("Windows"),
 * 			ManagementEndpoint: pulumi.String("https://example:80"),
 * 			NodeTypes: servicefabric.ClusterNodeTypeArray{
 * 				&servicefabric.ClusterNodeTypeArgs{
 * 					Name:               pulumi.String("first"),
 * 					InstanceCount:      pulumi.Int(3),
 * 					IsPrimary:          pulumi.Bool(true),
 * 					ClientEndpointPort: pulumi.Int(2020),
 * 					HttpEndpointPort:   pulumi.Int(80),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.azure.core.ResourceGroup;
 * import com.pulumi.azure.core.ResourceGroupArgs;
 * import com.pulumi.azure.servicefabric.Cluster;
 * import com.pulumi.azure.servicefabric.ClusterArgs;
 * import com.pulumi.azure.servicefabric.inputs.ClusterNodeTypeArgs;
 * 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 ResourceGroup("example", ResourceGroupArgs.builder()
 *             .name("example-resources")
 *             .location("West Europe")
 *             .build());
 *         var exampleCluster = new Cluster("exampleCluster", ClusterArgs.builder()
 *             .name("example-servicefabric")
 *             .resourceGroupName(example.name())
 *             .location(example.location())
 *             .reliabilityLevel("Bronze")
 *             .upgradeMode("Manual")
 *             .clusterCodeVersion("7.1.456.959")
 *             .vmImage("Windows")
 *             .managementEndpoint("https://example:80")
 *             .nodeTypes(ClusterNodeTypeArgs.builder()
 *                 .name("first")
 *                 .instanceCount(3)
 *                 .isPrimary(true)
 *                 .clientEndpointPort(2020)
 *                 .httpEndpointPort(80)
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: azure:core:ResourceGroup
 *     properties:
 *       name: example-resources
 *       location: West Europe
 *   exampleCluster:
 *     type: azure:servicefabric:Cluster
 *     name: example
 *     properties:
 *       name: example-servicefabric
 *       resourceGroupName: ${example.name}
 *       location: ${example.location}
 *       reliabilityLevel: Bronze
 *       upgradeMode: Manual
 *       clusterCodeVersion: 7.1.456.959
 *       vmImage: Windows
 *       managementEndpoint: https://example:80
 *       nodeTypes:
 *         - name: first
 *           instanceCount: 3
 *           isPrimary: true
 *           clientEndpointPort: 2020
 *           httpEndpointPort: 80
 * ```
 * 
 * ## Import
 * Service Fabric Clusters can be imported using the `resource id`, e.g.
 * ```sh
 * $ pulumi import azure:servicefabric/cluster:Cluster cluster1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.ServiceFabric/clusters/cluster1
 * ```
 * @property addOnFeatures A List of one or more features which should be enabled, such as `DnsService`.
 * @property azureActiveDirectory An `azure_active_directory` block as defined below.
 * @property certificate A `certificate` block as defined below. Conflicts with `certificate_common_names`.
 * @property certificateCommonNames A `certificate_common_names` block as defined below. Conflicts with `certificate`.
 * @property clientCertificateCommonNames A `client_certificate_common_name` block as defined below.
 * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
 * @property clientCertificateThumbprints One or more `client_certificate_thumbprint` blocks as defined below.
 * @property clusterCodeVersion Required if Upgrade Mode set to `Manual`, Specifies the Version of the Cluster Code of the cluster.
 * @property diagnosticsConfig A `diagnostics_config` block as defined below.
 * @property fabricSettings One or more `fabric_settings` blocks as defined below.
 * @property location Specifies the Azure Region where the Service Fabric Cluster should exist. Changing this forces a new resource to be created.
 * @property managementEndpoint Specifies the Management Endpoint of the cluster such as `http://example.com`. Changing this forces a new resource to be created.
 * @property name The name of the Service Fabric Cluster. Changing this forces a new resource to be created.
 * @property nodeTypes One or more `node_type` blocks as defined below.
 * @property reliabilityLevel Specifies the Reliability Level of the Cluster. Possible values include `None`, `Bronze`, `Silver`, `Gold` and `Platinum`.
 * > **NOTE:** The Reliability Level of the Cluster depends on the number of nodes in the Cluster: `Platinum` requires at least 9 VM's, `Gold` requires at least 7 VM's, `Silver` requires at least 5 VM's, `Bronze` requires at least 3 VM's.
 * @property resourceGroupName The name of the Resource Group in which the Service Fabric Cluster exists. Changing this forces a new resource to be created.
 * @property reverseProxyCertificate A `reverse_proxy_certificate` block as defined below. Conflicts with `reverse_proxy_certificate_common_names`.
 * @property reverseProxyCertificateCommonNames A `reverse_proxy_certificate_common_names` block as defined below. Conflicts with `reverse_proxy_certificate`.
 * @property serviceFabricZonalUpgradeMode Specifies the logical grouping of VMs in upgrade domains. Possible values are `Hierarchical` or `Parallel`.
 * @property tags A mapping of tags to assign to the resource.
 * @property upgradeMode Specifies the Upgrade Mode of the cluster. Possible values are `Automatic` or `Manual`.
 * @property upgradePolicy A `upgrade_policy` block as defined below.
 * @property vmImage Specifies the Image expected for the Service Fabric Cluster, such as `Windows`. Changing this forces a new resource to be created.
 * @property vmssZonalUpgradeMode Specifies the upgrade mode for the virtual machine scale set updates that happen in all availability zones at once. Possible values are `Hierarchical` or `Parallel`.
 */
public data class ClusterArgs(
    public val addOnFeatures: Output>? = null,
    public val azureActiveDirectory: Output? = null,
    public val certificate: Output? = null,
    public val certificateCommonNames: Output? = null,
    public val clientCertificateCommonNames: Output>? =
        null,
    public val clientCertificateThumbprints: Output>? =
        null,
    public val clusterCodeVersion: Output? = null,
    public val diagnosticsConfig: Output? = null,
    public val fabricSettings: Output>? = null,
    public val location: Output? = null,
    public val managementEndpoint: Output? = null,
    public val name: Output? = null,
    public val nodeTypes: Output>? = null,
    public val reliabilityLevel: Output? = null,
    public val resourceGroupName: Output? = null,
    public val reverseProxyCertificate: Output? = null,
    public val reverseProxyCertificateCommonNames:
    Output? = null,
    public val serviceFabricZonalUpgradeMode: Output? = null,
    public val tags: Output>? = null,
    public val upgradeMode: Output? = null,
    public val upgradePolicy: Output? = null,
    public val vmImage: Output? = null,
    public val vmssZonalUpgradeMode: Output? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.azure.servicefabric.ClusterArgs =
        com.pulumi.azure.servicefabric.ClusterArgs.builder()
            .addOnFeatures(addOnFeatures?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .azureActiveDirectory(
                azureActiveDirectory?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .certificate(certificate?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .certificateCommonNames(
                certificateCommonNames?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .clientCertificateCommonNames(
                clientCertificateCommonNames?.applyValue({ args0 ->
                    args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) })
                }),
            )
            .clientCertificateThumbprints(
                clientCertificateThumbprints?.applyValue({ args0 ->
                    args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) })
                }),
            )
            .clusterCodeVersion(clusterCodeVersion?.applyValue({ args0 -> args0 }))
            .diagnosticsConfig(diagnosticsConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .fabricSettings(
                fabricSettings?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .location(location?.applyValue({ args0 -> args0 }))
            .managementEndpoint(managementEndpoint?.applyValue({ args0 -> args0 }))
            .name(name?.applyValue({ args0 -> args0 }))
            .nodeTypes(
                nodeTypes?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .reliabilityLevel(reliabilityLevel?.applyValue({ args0 -> args0 }))
            .resourceGroupName(resourceGroupName?.applyValue({ args0 -> args0 }))
            .reverseProxyCertificate(
                reverseProxyCertificate?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .reverseProxyCertificateCommonNames(
                reverseProxyCertificateCommonNames?.applyValue({ args0 ->
                    args0.let({ args0 -> args0.toJava() })
                }),
            )
            .serviceFabricZonalUpgradeMode(serviceFabricZonalUpgradeMode?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .upgradeMode(upgradeMode?.applyValue({ args0 -> args0 }))
            .upgradePolicy(upgradePolicy?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .vmImage(vmImage?.applyValue({ args0 -> args0 }))
            .vmssZonalUpgradeMode(vmssZonalUpgradeMode?.applyValue({ args0 -> args0 })).build()
}

/**
 * Builder for [ClusterArgs].
 */
@PulumiTagMarker
public class ClusterArgsBuilder internal constructor() {
    private var addOnFeatures: Output>? = null

    private var azureActiveDirectory: Output? = null

    private var certificate: Output? = null

    private var certificateCommonNames: Output? = null

    private var clientCertificateCommonNames: Output>? =
        null

    private var clientCertificateThumbprints: Output>? =
        null

    private var clusterCodeVersion: Output? = null

    private var diagnosticsConfig: Output? = null

    private var fabricSettings: Output>? = null

    private var location: Output? = null

    private var managementEndpoint: Output? = null

    private var name: Output? = null

    private var nodeTypes: Output>? = null

    private var reliabilityLevel: Output? = null

    private var resourceGroupName: Output? = null

    private var reverseProxyCertificate: Output? = null

    private var reverseProxyCertificateCommonNames:
        Output? = null

    private var serviceFabricZonalUpgradeMode: Output? = null

    private var tags: Output>? = null

    private var upgradeMode: Output? = null

    private var upgradePolicy: Output? = null

    private var vmImage: Output? = null

    private var vmssZonalUpgradeMode: Output? = null

    /**
     * @param value A List of one or more features which should be enabled, such as `DnsService`.
     */
    @JvmName("qheafktftacgwrtt")
    public suspend fun addOnFeatures(`value`: Output>) {
        this.addOnFeatures = value
    }

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

    /**
     * @param values A List of one or more features which should be enabled, such as `DnsService`.
     */
    @JvmName("hemfeqchidnfauoh")
    public suspend fun addOnFeatures(values: List>) {
        this.addOnFeatures = Output.all(values)
    }

    /**
     * @param value An `azure_active_directory` block as defined below.
     */
    @JvmName("inksjegcswdmrnak")
    public suspend fun azureActiveDirectory(`value`: Output) {
        this.azureActiveDirectory = value
    }

    /**
     * @param value A `certificate` block as defined below. Conflicts with `certificate_common_names`.
     */
    @JvmName("wgvmncqesbjmlimk")
    public suspend fun certificate(`value`: Output) {
        this.certificate = value
    }

    /**
     * @param value A `certificate_common_names` block as defined below. Conflicts with `certificate`.
     */
    @JvmName("jthhqjlenfhrkcem")
    public suspend fun certificateCommonNames(`value`: Output) {
        this.certificateCommonNames = value
    }

    /**
     * @param value A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("rukwkjupqhaopxsf")
    public suspend
    fun clientCertificateCommonNames(`value`: Output>) {
        this.clientCertificateCommonNames = value
    }

    @JvmName("fktkwisfppbhwfmw")
    public suspend fun clientCertificateCommonNames(
        vararg
        values: Output,
    ) {
        this.clientCertificateCommonNames = Output.all(values.asList())
    }

    /**
     * @param values A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("iuhnwtbrrknwpuve")
    public suspend
    fun clientCertificateCommonNames(values: List>) {
        this.clientCertificateCommonNames = Output.all(values)
    }

    /**
     * @param value One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("wvcyfigsnlcuvmld")
    public suspend
    fun clientCertificateThumbprints(`value`: Output>) {
        this.clientCertificateThumbprints = value
    }

    @JvmName("wrtbfvtwiisodiyt")
    public suspend fun clientCertificateThumbprints(
        vararg
        values: Output,
    ) {
        this.clientCertificateThumbprints = Output.all(values.asList())
    }

    /**
     * @param values One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("lmsbjekkndyistbm")
    public suspend
    fun clientCertificateThumbprints(values: List>) {
        this.clientCertificateThumbprints = Output.all(values)
    }

    /**
     * @param value Required if Upgrade Mode set to `Manual`, Specifies the Version of the Cluster Code of the cluster.
     */
    @JvmName("symjdkxlccoctdww")
    public suspend fun clusterCodeVersion(`value`: Output) {
        this.clusterCodeVersion = value
    }

    /**
     * @param value A `diagnostics_config` block as defined below.
     */
    @JvmName("gnmwhafcirltqyyp")
    public suspend fun diagnosticsConfig(`value`: Output) {
        this.diagnosticsConfig = value
    }

    /**
     * @param value One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("tujjgtdylguivoxc")
    public suspend fun fabricSettings(`value`: Output>) {
        this.fabricSettings = value
    }

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

    /**
     * @param values One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("ftuvfbxaulymhaex")
    public suspend fun fabricSettings(values: List>) {
        this.fabricSettings = Output.all(values)
    }

    /**
     * @param value Specifies the Azure Region where the Service Fabric Cluster should exist. Changing this forces a new resource to be created.
     */
    @JvmName("mpqycniopedgjcwd")
    public suspend fun location(`value`: Output) {
        this.location = value
    }

    /**
     * @param value Specifies the Management Endpoint of the cluster such as `http://example.com`. Changing this forces a new resource to be created.
     */
    @JvmName("hbouahumjrwuijdk")
    public suspend fun managementEndpoint(`value`: Output) {
        this.managementEndpoint = value
    }

    /**
     * @param value The name of the Service Fabric Cluster. Changing this forces a new resource to be created.
     */
    @JvmName("tmekslefhviwbukh")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

    /**
     * @param value One or more `node_type` blocks as defined below.
     */
    @JvmName("yeueewmlnbapnwgi")
    public suspend fun nodeTypes(`value`: Output>) {
        this.nodeTypes = value
    }

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

    /**
     * @param values One or more `node_type` blocks as defined below.
     */
    @JvmName("xkvlgbiejrljmxqu")
    public suspend fun nodeTypes(values: List>) {
        this.nodeTypes = Output.all(values)
    }

    /**
     * @param value Specifies the Reliability Level of the Cluster. Possible values include `None`, `Bronze`, `Silver`, `Gold` and `Platinum`.
     * > **NOTE:** The Reliability Level of the Cluster depends on the number of nodes in the Cluster: `Platinum` requires at least 9 VM's, `Gold` requires at least 7 VM's, `Silver` requires at least 5 VM's, `Bronze` requires at least 3 VM's.
     */
    @JvmName("faxiedjkonpdfobl")
    public suspend fun reliabilityLevel(`value`: Output) {
        this.reliabilityLevel = value
    }

    /**
     * @param value The name of the Resource Group in which the Service Fabric Cluster exists. Changing this forces a new resource to be created.
     */
    @JvmName("loeyuondcdwmwwwl")
    public suspend fun resourceGroupName(`value`: Output) {
        this.resourceGroupName = value
    }

    /**
     * @param value A `reverse_proxy_certificate` block as defined below. Conflicts with `reverse_proxy_certificate_common_names`.
     */
    @JvmName("hxjxlkgfrjhpdfnx")
    public suspend fun reverseProxyCertificate(`value`: Output) {
        this.reverseProxyCertificate = value
    }

    /**
     * @param value A `reverse_proxy_certificate_common_names` block as defined below. Conflicts with `reverse_proxy_certificate`.
     */
    @JvmName("dkcctammaokbieir")
    public suspend
    fun reverseProxyCertificateCommonNames(`value`: Output) {
        this.reverseProxyCertificateCommonNames = value
    }

    /**
     * @param value Specifies the logical grouping of VMs in upgrade domains. Possible values are `Hierarchical` or `Parallel`.
     */
    @JvmName("ccefkdjbaieunayy")
    public suspend fun serviceFabricZonalUpgradeMode(`value`: Output) {
        this.serviceFabricZonalUpgradeMode = value
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     */
    @JvmName("xariptbdauxerbqh")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value Specifies the Upgrade Mode of the cluster. Possible values are `Automatic` or `Manual`.
     */
    @JvmName("qwfckqvckpomijis")
    public suspend fun upgradeMode(`value`: Output) {
        this.upgradeMode = value
    }

    /**
     * @param value A `upgrade_policy` block as defined below.
     */
    @JvmName("yidmliruxuvnncod")
    public suspend fun upgradePolicy(`value`: Output) {
        this.upgradePolicy = value
    }

    /**
     * @param value Specifies the Image expected for the Service Fabric Cluster, such as `Windows`. Changing this forces a new resource to be created.
     */
    @JvmName("toouhfkcieloxmbt")
    public suspend fun vmImage(`value`: Output) {
        this.vmImage = value
    }

    /**
     * @param value Specifies the upgrade mode for the virtual machine scale set updates that happen in all availability zones at once. Possible values are `Hierarchical` or `Parallel`.
     */
    @JvmName("ranpfblrinmckyjb")
    public suspend fun vmssZonalUpgradeMode(`value`: Output) {
        this.vmssZonalUpgradeMode = value
    }

    /**
     * @param value A List of one or more features which should be enabled, such as `DnsService`.
     */
    @JvmName("vjhkxpcdgoadaktp")
    public suspend fun addOnFeatures(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.addOnFeatures = mapped
    }

    /**
     * @param values A List of one or more features which should be enabled, such as `DnsService`.
     */
    @JvmName("ijirenflkkfggbau")
    public suspend fun addOnFeatures(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.addOnFeatures = mapped
    }

    /**
     * @param value An `azure_active_directory` block as defined below.
     */
    @JvmName("xnhtybgfkfgujnwt")
    public suspend fun azureActiveDirectory(`value`: ClusterAzureActiveDirectoryArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.azureActiveDirectory = mapped
    }

    /**
     * @param argument An `azure_active_directory` block as defined below.
     */
    @JvmName("ykbvinrlvsgumydx")
    public suspend
    fun azureActiveDirectory(argument: suspend ClusterAzureActiveDirectoryArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterAzureActiveDirectoryArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.azureActiveDirectory = mapped
    }

    /**
     * @param value A `certificate` block as defined below. Conflicts with `certificate_common_names`.
     */
    @JvmName("poqtbaqiiigncbfk")
    public suspend fun certificate(`value`: ClusterCertificateArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.certificate = mapped
    }

    /**
     * @param argument A `certificate` block as defined below. Conflicts with `certificate_common_names`.
     */
    @JvmName("gglstycofnuiqqxo")
    public suspend fun certificate(argument: suspend ClusterCertificateArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterCertificateArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.certificate = mapped
    }

    /**
     * @param value A `certificate_common_names` block as defined below. Conflicts with `certificate`.
     */
    @JvmName("bpxmfkpnyfhuoapg")
    public suspend fun certificateCommonNames(`value`: ClusterCertificateCommonNamesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.certificateCommonNames = mapped
    }

    /**
     * @param argument A `certificate_common_names` block as defined below. Conflicts with `certificate`.
     */
    @JvmName("ycrukwrishomvitd")
    public suspend
    fun certificateCommonNames(argument: suspend ClusterCertificateCommonNamesArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterCertificateCommonNamesArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.certificateCommonNames = mapped
    }

    /**
     * @param value A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("gdqlpgkmbpacpglx")
    public suspend
    fun clientCertificateCommonNames(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.clientCertificateCommonNames = mapped
    }

    /**
     * @param argument A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("bxqkiooawovgjkuv")
    public suspend
    fun clientCertificateCommonNames(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterClientCertificateCommonNameArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.clientCertificateCommonNames = mapped
    }

    /**
     * @param argument A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("wevavjgrxfqdwran")
    public suspend fun clientCertificateCommonNames(
        vararg
        argument: suspend ClusterClientCertificateCommonNameArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            ClusterClientCertificateCommonNameArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.clientCertificateCommonNames = mapped
    }

    /**
     * @param argument A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("rhciasmavgrjdcef")
    public suspend
    fun clientCertificateCommonNames(argument: suspend ClusterClientCertificateCommonNameArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ClusterClientCertificateCommonNameArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.clientCertificateCommonNames = mapped
    }

    /**
     * @param values A `client_certificate_common_name` block as defined below.
     * > **NOTE:** If Client Certificates are enabled then at a Certificate must be configured on the cluster.
     */
    @JvmName("unseinugbkmtdsfc")
    public suspend fun clientCertificateCommonNames(
        vararg
        values: ClusterClientCertificateCommonNameArgs,
    ) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.clientCertificateCommonNames = mapped
    }

    /**
     * @param value One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("fhbmdnynfoccxodo")
    public suspend
    fun clientCertificateThumbprints(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.clientCertificateThumbprints = mapped
    }

    /**
     * @param argument One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("qxafvgevxmdofccs")
    public suspend
    fun clientCertificateThumbprints(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterClientCertificateThumbprintArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.clientCertificateThumbprints = mapped
    }

    /**
     * @param argument One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("vnaaeuhncamluiog")
    public suspend fun clientCertificateThumbprints(
        vararg
        argument: suspend ClusterClientCertificateThumbprintArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            ClusterClientCertificateThumbprintArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.clientCertificateThumbprints = mapped
    }

    /**
     * @param argument One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("uyrqqbodbxpcqewf")
    public suspend
    fun clientCertificateThumbprints(argument: suspend ClusterClientCertificateThumbprintArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ClusterClientCertificateThumbprintArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.clientCertificateThumbprints = mapped
    }

    /**
     * @param values One or more `client_certificate_thumbprint` blocks as defined below.
     */
    @JvmName("vcjleglttlvsfakx")
    public suspend fun clientCertificateThumbprints(
        vararg
        values: ClusterClientCertificateThumbprintArgs,
    ) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.clientCertificateThumbprints = mapped
    }

    /**
     * @param value Required if Upgrade Mode set to `Manual`, Specifies the Version of the Cluster Code of the cluster.
     */
    @JvmName("kgqchhpanasssnvq")
    public suspend fun clusterCodeVersion(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.clusterCodeVersion = mapped
    }

    /**
     * @param value A `diagnostics_config` block as defined below.
     */
    @JvmName("kdskiopdetlksykb")
    public suspend fun diagnosticsConfig(`value`: ClusterDiagnosticsConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.diagnosticsConfig = mapped
    }

    /**
     * @param argument A `diagnostics_config` block as defined below.
     */
    @JvmName("dlohetcbhvpboeby")
    public suspend
    fun diagnosticsConfig(argument: suspend ClusterDiagnosticsConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterDiagnosticsConfigArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.diagnosticsConfig = mapped
    }

    /**
     * @param value One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("nefbncwifppoekbt")
    public suspend fun fabricSettings(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.fabricSettings = mapped
    }

    /**
     * @param argument One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("okovcqlqvwgbhcbx")
    public suspend
    fun fabricSettings(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterFabricSettingArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.fabricSettings = mapped
    }

    /**
     * @param argument One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("jbcktafvhicaxwix")
    public suspend fun fabricSettings(
        vararg
        argument: suspend ClusterFabricSettingArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            ClusterFabricSettingArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.fabricSettings = mapped
    }

    /**
     * @param argument One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("pyhbhmsmlqowefjp")
    public suspend fun fabricSettings(argument: suspend ClusterFabricSettingArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(ClusterFabricSettingArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.fabricSettings = mapped
    }

    /**
     * @param values One or more `fabric_settings` blocks as defined below.
     */
    @JvmName("nepokgapjkavjgsn")
    public suspend fun fabricSettings(vararg values: ClusterFabricSettingArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.fabricSettings = mapped
    }

    /**
     * @param value Specifies the Azure Region where the Service Fabric Cluster should exist. Changing this forces a new resource to be created.
     */
    @JvmName("yiirgqjgpogfevyt")
    public suspend fun location(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.location = mapped
    }

    /**
     * @param value Specifies the Management Endpoint of the cluster such as `http://example.com`. Changing this forces a new resource to be created.
     */
    @JvmName("johbxlioxmcqmaav")
    public suspend fun managementEndpoint(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.managementEndpoint = mapped
    }

    /**
     * @param value The name of the Service Fabric Cluster. Changing this forces a new resource to be created.
     */
    @JvmName("ufeokbtmhsbjhtry")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

    /**
     * @param value One or more `node_type` blocks as defined below.
     */
    @JvmName("hblratlviuahrper")
    public suspend fun nodeTypes(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.nodeTypes = mapped
    }

    /**
     * @param argument One or more `node_type` blocks as defined below.
     */
    @JvmName("rnjcqrjxglxmusnq")
    public suspend fun nodeTypes(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterNodeTypeArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.nodeTypes = mapped
    }

    /**
     * @param argument One or more `node_type` blocks as defined below.
     */
    @JvmName("vwvldxdxiymdciau")
    public suspend fun nodeTypes(vararg argument: suspend ClusterNodeTypeArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ClusterNodeTypeArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.nodeTypes = mapped
    }

    /**
     * @param argument One or more `node_type` blocks as defined below.
     */
    @JvmName("rdxqdwmcsmylgkqg")
    public suspend fun nodeTypes(argument: suspend ClusterNodeTypeArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(ClusterNodeTypeArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.nodeTypes = mapped
    }

    /**
     * @param values One or more `node_type` blocks as defined below.
     */
    @JvmName("ywgssrwrcgxnindf")
    public suspend fun nodeTypes(vararg values: ClusterNodeTypeArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.nodeTypes = mapped
    }

    /**
     * @param value Specifies the Reliability Level of the Cluster. Possible values include `None`, `Bronze`, `Silver`, `Gold` and `Platinum`.
     * > **NOTE:** The Reliability Level of the Cluster depends on the number of nodes in the Cluster: `Platinum` requires at least 9 VM's, `Gold` requires at least 7 VM's, `Silver` requires at least 5 VM's, `Bronze` requires at least 3 VM's.
     */
    @JvmName("dxviriymgpvjfiuj")
    public suspend fun reliabilityLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.reliabilityLevel = mapped
    }

    /**
     * @param value The name of the Resource Group in which the Service Fabric Cluster exists. Changing this forces a new resource to be created.
     */
    @JvmName("jbecgesjbgnphpaa")
    public suspend fun resourceGroupName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resourceGroupName = mapped
    }

    /**
     * @param value A `reverse_proxy_certificate` block as defined below. Conflicts with `reverse_proxy_certificate_common_names`.
     */
    @JvmName("srdqatdspciilabf")
    public suspend fun reverseProxyCertificate(`value`: ClusterReverseProxyCertificateArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.reverseProxyCertificate = mapped
    }

    /**
     * @param argument A `reverse_proxy_certificate` block as defined below. Conflicts with `reverse_proxy_certificate_common_names`.
     */
    @JvmName("kymuayhgeheekvfh")
    public suspend
    fun reverseProxyCertificate(argument: suspend ClusterReverseProxyCertificateArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterReverseProxyCertificateArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.reverseProxyCertificate = mapped
    }

    /**
     * @param value A `reverse_proxy_certificate_common_names` block as defined below. Conflicts with `reverse_proxy_certificate`.
     */
    @JvmName("vpnclstmayeplmhd")
    public suspend
    fun reverseProxyCertificateCommonNames(`value`: ClusterReverseProxyCertificateCommonNamesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.reverseProxyCertificateCommonNames = mapped
    }

    /**
     * @param argument A `reverse_proxy_certificate_common_names` block as defined below. Conflicts with `reverse_proxy_certificate`.
     */
    @JvmName("rbyrniaaqsesltkv")
    public suspend
    fun reverseProxyCertificateCommonNames(argument: suspend ClusterReverseProxyCertificateCommonNamesArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterReverseProxyCertificateCommonNamesArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.reverseProxyCertificateCommonNames = mapped
    }

    /**
     * @param value Specifies the logical grouping of VMs in upgrade domains. Possible values are `Hierarchical` or `Parallel`.
     */
    @JvmName("sjbxkltsrfdrdtan")
    public suspend fun serviceFabricZonalUpgradeMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.serviceFabricZonalUpgradeMode = mapped
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     */
    @JvmName("kgcreprkhcoovvpv")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values A mapping of tags to assign to the resource.
     */
    @JvmName("oaierkoiyidfvqrp")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value Specifies the Upgrade Mode of the cluster. Possible values are `Automatic` or `Manual`.
     */
    @JvmName("srjjbtcinukmwdhr")
    public suspend fun upgradeMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.upgradeMode = mapped
    }

    /**
     * @param value A `upgrade_policy` block as defined below.
     */
    @JvmName("ntnkqjalkpwrarxp")
    public suspend fun upgradePolicy(`value`: ClusterUpgradePolicyArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.upgradePolicy = mapped
    }

    /**
     * @param argument A `upgrade_policy` block as defined below.
     */
    @JvmName("esrcuoucqyfempch")
    public suspend fun upgradePolicy(argument: suspend ClusterUpgradePolicyArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterUpgradePolicyArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.upgradePolicy = mapped
    }

    /**
     * @param value Specifies the Image expected for the Service Fabric Cluster, such as `Windows`. Changing this forces a new resource to be created.
     */
    @JvmName("omqbsgkeofrufuqr")
    public suspend fun vmImage(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vmImage = mapped
    }

    /**
     * @param value Specifies the upgrade mode for the virtual machine scale set updates that happen in all availability zones at once. Possible values are `Hierarchical` or `Parallel`.
     */
    @JvmName("pckejvhhbsrankst")
    public suspend fun vmssZonalUpgradeMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vmssZonalUpgradeMode = mapped
    }

    internal fun build(): ClusterArgs = ClusterArgs(
        addOnFeatures = addOnFeatures,
        azureActiveDirectory = azureActiveDirectory,
        certificate = certificate,
        certificateCommonNames = certificateCommonNames,
        clientCertificateCommonNames = clientCertificateCommonNames,
        clientCertificateThumbprints = clientCertificateThumbprints,
        clusterCodeVersion = clusterCodeVersion,
        diagnosticsConfig = diagnosticsConfig,
        fabricSettings = fabricSettings,
        location = location,
        managementEndpoint = managementEndpoint,
        name = name,
        nodeTypes = nodeTypes,
        reliabilityLevel = reliabilityLevel,
        resourceGroupName = resourceGroupName,
        reverseProxyCertificate = reverseProxyCertificate,
        reverseProxyCertificateCommonNames = reverseProxyCertificateCommonNames,
        serviceFabricZonalUpgradeMode = serviceFabricZonalUpgradeMode,
        tags = tags,
        upgradeMode = upgradeMode,
        upgradePolicy = upgradePolicy,
        vmImage = vmImage,
        vmssZonalUpgradeMode = vmssZonalUpgradeMode,
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy