# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from . import _utilities
from . import outputs
from ._inputs import *

__all__ = ['CmekArgs', 'Cmek']

@pulumi.input_type
class CmekArgs:
    def __init__(__self__, *,
                 cluster_id: pulumi.Input[str],
                 regions: pulumi.Input[Sequence[pulumi.Input['CmekRegionArgs']]],
                 additional_regions: Optional[pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]]] = None,
                 status: Optional[pulumi.Input[str]] = None):
        """
        The set of arguments for constructing a Cmek resource.
        :param pulumi.Input[str] cluster_id: Cluster ID.
        :param pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]] additional_regions: Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
               info stored in the CMEK resource. New regions can be added and maintained here instead.
        :param pulumi.Input[str] status: Aggregated status of the cluster's encryption key(s).
        """
        pulumi.set(__self__, "cluster_id", cluster_id)
        pulumi.set(__self__, "regions", regions)
        if additional_regions is not None:
            pulumi.set(__self__, "additional_regions", additional_regions)
        if status is not None:
            pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> pulumi.Input[str]:
        """
        Cluster ID.
        """
        return pulumi.get(self, "cluster_id")

    @cluster_id.setter
    def cluster_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "cluster_id", value)

    @property
    @pulumi.getter
    def regions(self) -> pulumi.Input[Sequence[pulumi.Input['CmekRegionArgs']]]:
        return pulumi.get(self, "regions")

    @regions.setter
    def regions(self, value: pulumi.Input[Sequence[pulumi.Input['CmekRegionArgs']]]):
        pulumi.set(self, "regions", value)

    @property
    @pulumi.getter(name="additionalRegions")
    def additional_regions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]]]:
        """
        Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
        info stored in the CMEK resource. New regions can be added and maintained here instead.
        """
        return pulumi.get(self, "additional_regions")

    @additional_regions.setter
    def additional_regions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]]]):
        pulumi.set(self, "additional_regions", value)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[str]]:
        """
        Aggregated status of the cluster's encryption key(s).
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "status", value)


@pulumi.input_type
class _CmekState:
    def __init__(__self__, *,
                 additional_regions: Optional[pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 regions: Optional[pulumi.Input[Sequence[pulumi.Input['CmekRegionArgs']]]] = None,
                 status: Optional[pulumi.Input[str]] = None):
        """
        Input properties used for looking up and filtering Cmek resources.
        :param pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]] additional_regions: Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
               info stored in the CMEK resource. New regions can be added and maintained here instead.
        :param pulumi.Input[str] cluster_id: Cluster ID.
        :param pulumi.Input[str] status: Aggregated status of the cluster's encryption key(s).
        """
        if additional_regions is not None:
            pulumi.set(__self__, "additional_regions", additional_regions)
        if cluster_id is not None:
            pulumi.set(__self__, "cluster_id", cluster_id)
        if regions is not None:
            pulumi.set(__self__, "regions", regions)
        if status is not None:
            pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter(name="additionalRegions")
    def additional_regions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]]]:
        """
        Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
        info stored in the CMEK resource. New regions can be added and maintained here instead.
        """
        return pulumi.get(self, "additional_regions")

    @additional_regions.setter
    def additional_regions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CmekAdditionalRegionArgs']]]]):
        pulumi.set(self, "additional_regions", value)

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        Cluster ID.
        """
        return pulumi.get(self, "cluster_id")

    @cluster_id.setter
    def cluster_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "cluster_id", value)

    @property
    @pulumi.getter
    def regions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CmekRegionArgs']]]]:
        return pulumi.get(self, "regions")

    @regions.setter
    def regions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CmekRegionArgs']]]]):
        pulumi.set(self, "regions", value)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[str]]:
        """
        Aggregated status of the cluster's encryption key(s).
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "status", value)


class Cmek(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 additional_regions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekAdditionalRegionArgs']]]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 regions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekRegionArgs']]]]] = None,
                 status: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Customer-managed encryption keys (CMEK) resource for a single cluster.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekAdditionalRegionArgs']]]] additional_regions: Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
               info stored in the CMEK resource. New regions can be added and maintained here instead.
        :param pulumi.Input[str] cluster_id: Cluster ID.
        :param pulumi.Input[str] status: Aggregated status of the cluster's encryption key(s).
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: CmekArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Customer-managed encryption keys (CMEK) resource for a single cluster.

        :param str resource_name: The name of the resource.
        :param CmekArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(CmekArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 additional_regions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekAdditionalRegionArgs']]]]] = None,
                 cluster_id: Optional[pulumi.Input[str]] = None,
                 regions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekRegionArgs']]]]] = None,
                 status: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = CmekArgs.__new__(CmekArgs)

            __props__.__dict__["additional_regions"] = additional_regions
            if cluster_id is None and not opts.urn:
                raise TypeError("Missing required property 'cluster_id'")
            __props__.__dict__["cluster_id"] = cluster_id
            if regions is None and not opts.urn:
                raise TypeError("Missing required property 'regions'")
            __props__.__dict__["regions"] = regions
            __props__.__dict__["status"] = status
        super(Cmek, __self__).__init__(
            'cockroach:index/cmek:Cmek',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            additional_regions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekAdditionalRegionArgs']]]]] = None,
            cluster_id: Optional[pulumi.Input[str]] = None,
            regions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekRegionArgs']]]]] = None,
            status: Optional[pulumi.Input[str]] = None) -> 'Cmek':
        """
        Get an existing Cmek resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CmekAdditionalRegionArgs']]]] additional_regions: Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
               info stored in the CMEK resource. New regions can be added and maintained here instead.
        :param pulumi.Input[str] cluster_id: Cluster ID.
        :param pulumi.Input[str] status: Aggregated status of the cluster's encryption key(s).
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _CmekState.__new__(_CmekState)

        __props__.__dict__["additional_regions"] = additional_regions
        __props__.__dict__["cluster_id"] = cluster_id
        __props__.__dict__["regions"] = regions
        __props__.__dict__["status"] = status
        return Cmek(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="additionalRegions")
    def additional_regions(self) -> pulumi.Output[Optional[Sequence['outputs.CmekAdditionalRegion']]]:
        """
        Once CMEK is enabled for a cluster, no new regions can be added to the cluster resource, since they need encryption key
        info stored in the CMEK resource. New regions can be added and maintained here instead.
        """
        return pulumi.get(self, "additional_regions")

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> pulumi.Output[str]:
        """
        Cluster ID.
        """
        return pulumi.get(self, "cluster_id")

    @property
    @pulumi.getter
    def regions(self) -> pulumi.Output[Sequence['outputs.CmekRegion']]:
        return pulumi.get(self, "regions")

    @property
    @pulumi.getter
    def status(self) -> pulumi.Output[str]:
        """
        Aggregated status of the cluster's encryption key(s).
        """
        return pulumi.get(self, "status")

