# 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__ = ['RegionDiskArgs', 'RegionDisk']

@pulumi.input_type
class RegionDiskArgs:
    def __init__(__self__, *,
                 replica_zones: pulumi.Input[Sequence[pulumi.Input[str]]],
                 async_primary_disk: Optional[pulumi.Input['RegionDiskAsyncPrimaryDiskArgs']] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disk_encryption_key: Optional[pulumi.Input['RegionDiskDiskEncryptionKeyArgs']] = None,
                 guest_os_features: Optional[pulumi.Input[Sequence[pulumi.Input['RegionDiskGuestOsFeatureArgs']]]] = None,
                 interface: Optional[pulumi.Input[str]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 licenses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 physical_block_size_bytes: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 size: Optional[pulumi.Input[int]] = None,
                 snapshot: Optional[pulumi.Input[str]] = None,
                 source_disk: Optional[pulumi.Input[str]] = None,
                 source_snapshot_encryption_key: Optional[pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs']] = None,
                 type: Optional[pulumi.Input[str]] = None):
        """
        The set of arguments for constructing a RegionDisk resource.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_zones: URLs of the zones where the disk should be replicated to.
               
               
               - - -
        :param pulumi.Input['RegionDiskAsyncPrimaryDiskArgs'] async_primary_disk: A nested object resource
               Structure is documented below.
        :param pulumi.Input[str] description: An optional description of this resource. Provide this property when
               you create the resource.
        :param pulumi.Input['RegionDiskDiskEncryptionKeyArgs'] disk_encryption_key: Encrypts the disk using a customer-supplied encryption key.
               After you encrypt a disk with a customer-supplied key, you must
               provide the same key if you use the disk later (e.g. to create a disk
               snapshot or an image, or to attach the disk to a virtual machine).
               Customer-supplied encryption keys do not protect access to metadata of
               the disk.
               If you do not provide an encryption key when creating the disk, then
               the disk will be encrypted using an automatically generated key and
               you do not need to provide a key to use the disk later.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input['RegionDiskGuestOsFeatureArgs']]] guest_os_features: A list of features to enable on the guest operating system.
               Applicable only for bootable disks.
               Structure is documented below.
        :param pulumi.Input[str] interface: (Optional, Deprecated)
               Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.
               
               > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this disk.  A list of key->value pairs.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] licenses: Any applicable license URI.
        :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is
               created. The name must be 1-63 characters long, and comply with
               RFC1035. Specifically, the name must be 1-63 characters long and match
               the regular expression `a-z?` which means the
               first character must be a lowercase letter, and all following
               characters must be a dash, lowercase letter, or digit, except the last
               character, which cannot be a dash.
        :param pulumi.Input[int] physical_block_size_bytes: Physical block size of the persistent disk, in bytes. If not present
               in a request, a default value is used. Currently supported sizes
               are 4096 and 16384, other sizes may be added in the future.
               If an unsupported value is requested, the error message will list
               the supported values for the caller's project.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: A reference to the region where the disk resides.
        :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this
               field when creating a persistent disk using the sourceImage or
               sourceSnapshot parameter, or specify it alone to create an empty
               persistent disk.
               If you specify this field along with sourceImage or sourceSnapshot,
               the value of sizeGb must not be less than the size of the sourceImage
               or the size of the snapshot.
        :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
               example, the following are valid values: *
               'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
               'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        :param pulumi.Input[str] source_disk: The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
               For example, the following are valid values:
               * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
               * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
               * projects/{project}/zones/{zone}/disks/{disk}
               * projects/{project}/regions/{region}/disks/{disk}
               * zones/{zone}/disks/{disk}
               * regions/{region}/disks/{disk}
        :param pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs'] source_snapshot_encryption_key: The customer-supplied encryption key of the source snapshot. Required
               if the source snapshot is protected by a customer-supplied encryption
               key.
               Structure is documented below.
        :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to
               create the disk. Provide this when creating the disk.
        """
        pulumi.set(__self__, "replica_zones", replica_zones)
        if async_primary_disk is not None:
            pulumi.set(__self__, "async_primary_disk", async_primary_disk)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disk_encryption_key is not None:
            pulumi.set(__self__, "disk_encryption_key", disk_encryption_key)
        if guest_os_features is not None:
            pulumi.set(__self__, "guest_os_features", guest_os_features)
        if interface is not None:
            warnings.warn("""`interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""", DeprecationWarning)
            pulumi.log.warn("""interface is deprecated: `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""")
        if interface is not None:
            pulumi.set(__self__, "interface", interface)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if licenses is not None:
            pulumi.set(__self__, "licenses", licenses)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if physical_block_size_bytes is not None:
            pulumi.set(__self__, "physical_block_size_bytes", physical_block_size_bytes)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if size is not None:
            pulumi.set(__self__, "size", size)
        if snapshot is not None:
            pulumi.set(__self__, "snapshot", snapshot)
        if source_disk is not None:
            pulumi.set(__self__, "source_disk", source_disk)
        if source_snapshot_encryption_key is not None:
            pulumi.set(__self__, "source_snapshot_encryption_key", source_snapshot_encryption_key)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter(name="replicaZones")
    def replica_zones(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        URLs of the zones where the disk should be replicated to.


        - - -
        """
        return pulumi.get(self, "replica_zones")

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

    @property
    @pulumi.getter(name="asyncPrimaryDisk")
    def async_primary_disk(self) -> Optional[pulumi.Input['RegionDiskAsyncPrimaryDiskArgs']]:
        """
        A nested object resource
        Structure is documented below.
        """
        return pulumi.get(self, "async_primary_disk")

    @async_primary_disk.setter
    def async_primary_disk(self, value: Optional[pulumi.Input['RegionDiskAsyncPrimaryDiskArgs']]):
        pulumi.set(self, "async_primary_disk", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        An optional description of this resource. Provide this property when
        you create the resource.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="diskEncryptionKey")
    def disk_encryption_key(self) -> Optional[pulumi.Input['RegionDiskDiskEncryptionKeyArgs']]:
        """
        Encrypts the disk using a customer-supplied encryption key.
        After you encrypt a disk with a customer-supplied key, you must
        provide the same key if you use the disk later (e.g. to create a disk
        snapshot or an image, or to attach the disk to a virtual machine).
        Customer-supplied encryption keys do not protect access to metadata of
        the disk.
        If you do not provide an encryption key when creating the disk, then
        the disk will be encrypted using an automatically generated key and
        you do not need to provide a key to use the disk later.
        Structure is documented below.
        """
        return pulumi.get(self, "disk_encryption_key")

    @disk_encryption_key.setter
    def disk_encryption_key(self, value: Optional[pulumi.Input['RegionDiskDiskEncryptionKeyArgs']]):
        pulumi.set(self, "disk_encryption_key", value)

    @property
    @pulumi.getter(name="guestOsFeatures")
    def guest_os_features(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RegionDiskGuestOsFeatureArgs']]]]:
        """
        A list of features to enable on the guest operating system.
        Applicable only for bootable disks.
        Structure is documented below.
        """
        return pulumi.get(self, "guest_os_features")

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

    @property
    @pulumi.getter
    def interface(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional, Deprecated)
        Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.

        > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        """
        warnings.warn("""`interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""", DeprecationWarning)
        pulumi.log.warn("""interface is deprecated: `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""")

        return pulumi.get(self, "interface")

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

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Labels to apply to this disk.  A list of key->value pairs.
        """
        return pulumi.get(self, "labels")

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

    @property
    @pulumi.getter
    def licenses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Any applicable license URI.
        """
        return pulumi.get(self, "licenses")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the resource. Provided by the client when the resource is
        created. The name must be 1-63 characters long, and comply with
        RFC1035. Specifically, the name must be 1-63 characters long and match
        the regular expression `a-z?` which means the
        first character must be a lowercase letter, and all following
        characters must be a dash, lowercase letter, or digit, except the last
        character, which cannot be a dash.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="physicalBlockSizeBytes")
    def physical_block_size_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        Physical block size of the persistent disk, in bytes. If not present
        in a request, a default value is used. Currently supported sizes
        are 4096 and 16384, other sizes may be added in the future.
        If an unsupported value is requested, the error message will list
        the supported values for the caller's project.
        """
        return pulumi.get(self, "physical_block_size_bytes")

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

    @property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        A reference to the region where the disk resides.
        """
        return pulumi.get(self, "region")

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

    @property
    @pulumi.getter
    def size(self) -> Optional[pulumi.Input[int]]:
        """
        Size of the persistent disk, specified in GB. You can specify this
        field when creating a persistent disk using the sourceImage or
        sourceSnapshot parameter, or specify it alone to create an empty
        persistent disk.
        If you specify this field along with sourceImage or sourceSnapshot,
        the value of sizeGb must not be less than the size of the sourceImage
        or the size of the snapshot.
        """
        return pulumi.get(self, "size")

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

    @property
    @pulumi.getter
    def snapshot(self) -> Optional[pulumi.Input[str]]:
        """
        The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
        example, the following are valid values: *
        'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
        'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        """
        return pulumi.get(self, "snapshot")

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

    @property
    @pulumi.getter(name="sourceDisk")
    def source_disk(self) -> Optional[pulumi.Input[str]]:
        """
        The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
        For example, the following are valid values:
        * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
        * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
        * projects/{project}/zones/{zone}/disks/{disk}
        * projects/{project}/regions/{region}/disks/{disk}
        * zones/{zone}/disks/{disk}
        * regions/{region}/disks/{disk}
        """
        return pulumi.get(self, "source_disk")

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

    @property
    @pulumi.getter(name="sourceSnapshotEncryptionKey")
    def source_snapshot_encryption_key(self) -> Optional[pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs']]:
        """
        The customer-supplied encryption key of the source snapshot. Required
        if the source snapshot is protected by a customer-supplied encryption
        key.
        Structure is documented below.
        """
        return pulumi.get(self, "source_snapshot_encryption_key")

    @source_snapshot_encryption_key.setter
    def source_snapshot_encryption_key(self, value: Optional[pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs']]):
        pulumi.set(self, "source_snapshot_encryption_key", value)

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        URL of the disk type resource describing which disk type to use to
        create the disk. Provide this when creating the disk.
        """
        return pulumi.get(self, "type")

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


@pulumi.input_type
class _RegionDiskState:
    def __init__(__self__, *,
                 async_primary_disk: Optional[pulumi.Input['RegionDiskAsyncPrimaryDiskArgs']] = None,
                 creation_timestamp: Optional[pulumi.Input[str]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disk_encryption_key: Optional[pulumi.Input['RegionDiskDiskEncryptionKeyArgs']] = None,
                 guest_os_features: Optional[pulumi.Input[Sequence[pulumi.Input['RegionDiskGuestOsFeatureArgs']]]] = None,
                 interface: Optional[pulumi.Input[str]] = None,
                 label_fingerprint: Optional[pulumi.Input[str]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 last_attach_timestamp: Optional[pulumi.Input[str]] = None,
                 last_detach_timestamp: Optional[pulumi.Input[str]] = None,
                 licenses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 physical_block_size_bytes: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 replica_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 self_link: Optional[pulumi.Input[str]] = None,
                 size: Optional[pulumi.Input[int]] = None,
                 snapshot: Optional[pulumi.Input[str]] = None,
                 source_disk: Optional[pulumi.Input[str]] = None,
                 source_disk_id: Optional[pulumi.Input[str]] = None,
                 source_snapshot_encryption_key: Optional[pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs']] = None,
                 source_snapshot_id: Optional[pulumi.Input[str]] = None,
                 type: Optional[pulumi.Input[str]] = None,
                 users: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        Input properties used for looking up and filtering RegionDisk resources.
        :param pulumi.Input['RegionDiskAsyncPrimaryDiskArgs'] async_primary_disk: A nested object resource
               Structure is documented below.
        :param pulumi.Input[str] creation_timestamp: Creation timestamp in RFC3339 text format.
        :param pulumi.Input[str] description: An optional description of this resource. Provide this property when
               you create the resource.
        :param pulumi.Input['RegionDiskDiskEncryptionKeyArgs'] disk_encryption_key: Encrypts the disk using a customer-supplied encryption key.
               After you encrypt a disk with a customer-supplied key, you must
               provide the same key if you use the disk later (e.g. to create a disk
               snapshot or an image, or to attach the disk to a virtual machine).
               Customer-supplied encryption keys do not protect access to metadata of
               the disk.
               If you do not provide an encryption key when creating the disk, then
               the disk will be encrypted using an automatically generated key and
               you do not need to provide a key to use the disk later.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input['RegionDiskGuestOsFeatureArgs']]] guest_os_features: A list of features to enable on the guest operating system.
               Applicable only for bootable disks.
               Structure is documented below.
        :param pulumi.Input[str] interface: (Optional, Deprecated)
               Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.
               
               > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        :param pulumi.Input[str] label_fingerprint: The fingerprint used for optimistic locking of this resource.  Used
               internally during updates.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this disk.  A list of key->value pairs.
        :param pulumi.Input[str] last_attach_timestamp: Last attach timestamp in RFC3339 text format.
        :param pulumi.Input[str] last_detach_timestamp: Last detach timestamp in RFC3339 text format.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] licenses: Any applicable license URI.
        :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is
               created. The name must be 1-63 characters long, and comply with
               RFC1035. Specifically, the name must be 1-63 characters long and match
               the regular expression `a-z?` which means the
               first character must be a lowercase letter, and all following
               characters must be a dash, lowercase letter, or digit, except the last
               character, which cannot be a dash.
        :param pulumi.Input[int] physical_block_size_bytes: Physical block size of the persistent disk, in bytes. If not present
               in a request, a default value is used. Currently supported sizes
               are 4096 and 16384, other sizes may be added in the future.
               If an unsupported value is requested, the error message will list
               the supported values for the caller's project.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: A reference to the region where the disk resides.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_zones: URLs of the zones where the disk should be replicated to.
               
               
               - - -
        :param pulumi.Input[str] self_link: The URI of the created resource.
        :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this
               field when creating a persistent disk using the sourceImage or
               sourceSnapshot parameter, or specify it alone to create an empty
               persistent disk.
               If you specify this field along with sourceImage or sourceSnapshot,
               the value of sizeGb must not be less than the size of the sourceImage
               or the size of the snapshot.
        :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
               example, the following are valid values: *
               'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
               'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        :param pulumi.Input[str] source_disk: The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
               For example, the following are valid values:
               * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
               * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
               * projects/{project}/zones/{zone}/disks/{disk}
               * projects/{project}/regions/{region}/disks/{disk}
               * zones/{zone}/disks/{disk}
               * regions/{region}/disks/{disk}
        :param pulumi.Input[str] source_disk_id: The ID value of the disk used to create this image. This value may
               be used to determine whether the image was taken from the current
               or a previous instance of a given disk name.
        :param pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs'] source_snapshot_encryption_key: The customer-supplied encryption key of the source snapshot. Required
               if the source snapshot is protected by a customer-supplied encryption
               key.
               Structure is documented below.
        :param pulumi.Input[str] source_snapshot_id: The unique ID of the snapshot used to create this disk. This value
               identifies the exact snapshot that was used to create this persistent
               disk. For example, if you created the persistent disk from a snapshot
               that was later deleted and recreated under the same name, the source
               snapshot ID would identify the exact version of the snapshot that was
               used.
        :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to
               create the disk. Provide this when creating the disk.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] users: Links to the users of the disk (attached instances) in form:
               project/zones/zone/instances/instance
        """
        if async_primary_disk is not None:
            pulumi.set(__self__, "async_primary_disk", async_primary_disk)
        if creation_timestamp is not None:
            pulumi.set(__self__, "creation_timestamp", creation_timestamp)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disk_encryption_key is not None:
            pulumi.set(__self__, "disk_encryption_key", disk_encryption_key)
        if guest_os_features is not None:
            pulumi.set(__self__, "guest_os_features", guest_os_features)
        if interface is not None:
            warnings.warn("""`interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""", DeprecationWarning)
            pulumi.log.warn("""interface is deprecated: `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""")
        if interface is not None:
            pulumi.set(__self__, "interface", interface)
        if label_fingerprint is not None:
            pulumi.set(__self__, "label_fingerprint", label_fingerprint)
        if labels is not None:
            pulumi.set(__self__, "labels", labels)
        if last_attach_timestamp is not None:
            pulumi.set(__self__, "last_attach_timestamp", last_attach_timestamp)
        if last_detach_timestamp is not None:
            pulumi.set(__self__, "last_detach_timestamp", last_detach_timestamp)
        if licenses is not None:
            pulumi.set(__self__, "licenses", licenses)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if physical_block_size_bytes is not None:
            pulumi.set(__self__, "physical_block_size_bytes", physical_block_size_bytes)
        if project is not None:
            pulumi.set(__self__, "project", project)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if replica_zones is not None:
            pulumi.set(__self__, "replica_zones", replica_zones)
        if self_link is not None:
            pulumi.set(__self__, "self_link", self_link)
        if size is not None:
            pulumi.set(__self__, "size", size)
        if snapshot is not None:
            pulumi.set(__self__, "snapshot", snapshot)
        if source_disk is not None:
            pulumi.set(__self__, "source_disk", source_disk)
        if source_disk_id is not None:
            pulumi.set(__self__, "source_disk_id", source_disk_id)
        if source_snapshot_encryption_key is not None:
            pulumi.set(__self__, "source_snapshot_encryption_key", source_snapshot_encryption_key)
        if source_snapshot_id is not None:
            pulumi.set(__self__, "source_snapshot_id", source_snapshot_id)
        if type is not None:
            pulumi.set(__self__, "type", type)
        if users is not None:
            pulumi.set(__self__, "users", users)

    @property
    @pulumi.getter(name="asyncPrimaryDisk")
    def async_primary_disk(self) -> Optional[pulumi.Input['RegionDiskAsyncPrimaryDiskArgs']]:
        """
        A nested object resource
        Structure is documented below.
        """
        return pulumi.get(self, "async_primary_disk")

    @async_primary_disk.setter
    def async_primary_disk(self, value: Optional[pulumi.Input['RegionDiskAsyncPrimaryDiskArgs']]):
        pulumi.set(self, "async_primary_disk", value)

    @property
    @pulumi.getter(name="creationTimestamp")
    def creation_timestamp(self) -> Optional[pulumi.Input[str]]:
        """
        Creation timestamp in RFC3339 text format.
        """
        return pulumi.get(self, "creation_timestamp")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        An optional description of this resource. Provide this property when
        you create the resource.
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="diskEncryptionKey")
    def disk_encryption_key(self) -> Optional[pulumi.Input['RegionDiskDiskEncryptionKeyArgs']]:
        """
        Encrypts the disk using a customer-supplied encryption key.
        After you encrypt a disk with a customer-supplied key, you must
        provide the same key if you use the disk later (e.g. to create a disk
        snapshot or an image, or to attach the disk to a virtual machine).
        Customer-supplied encryption keys do not protect access to metadata of
        the disk.
        If you do not provide an encryption key when creating the disk, then
        the disk will be encrypted using an automatically generated key and
        you do not need to provide a key to use the disk later.
        Structure is documented below.
        """
        return pulumi.get(self, "disk_encryption_key")

    @disk_encryption_key.setter
    def disk_encryption_key(self, value: Optional[pulumi.Input['RegionDiskDiskEncryptionKeyArgs']]):
        pulumi.set(self, "disk_encryption_key", value)

    @property
    @pulumi.getter(name="guestOsFeatures")
    def guest_os_features(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RegionDiskGuestOsFeatureArgs']]]]:
        """
        A list of features to enable on the guest operating system.
        Applicable only for bootable disks.
        Structure is documented below.
        """
        return pulumi.get(self, "guest_os_features")

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

    @property
    @pulumi.getter
    def interface(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional, Deprecated)
        Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.

        > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        """
        warnings.warn("""`interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""", DeprecationWarning)
        pulumi.log.warn("""interface is deprecated: `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""")

        return pulumi.get(self, "interface")

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

    @property
    @pulumi.getter(name="labelFingerprint")
    def label_fingerprint(self) -> Optional[pulumi.Input[str]]:
        """
        The fingerprint used for optimistic locking of this resource.  Used
        internally during updates.
        """
        return pulumi.get(self, "label_fingerprint")

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

    @property
    @pulumi.getter
    def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        """
        Labels to apply to this disk.  A list of key->value pairs.
        """
        return pulumi.get(self, "labels")

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

    @property
    @pulumi.getter(name="lastAttachTimestamp")
    def last_attach_timestamp(self) -> Optional[pulumi.Input[str]]:
        """
        Last attach timestamp in RFC3339 text format.
        """
        return pulumi.get(self, "last_attach_timestamp")

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

    @property
    @pulumi.getter(name="lastDetachTimestamp")
    def last_detach_timestamp(self) -> Optional[pulumi.Input[str]]:
        """
        Last detach timestamp in RFC3339 text format.
        """
        return pulumi.get(self, "last_detach_timestamp")

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

    @property
    @pulumi.getter
    def licenses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Any applicable license URI.
        """
        return pulumi.get(self, "licenses")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the resource. Provided by the client when the resource is
        created. The name must be 1-63 characters long, and comply with
        RFC1035. Specifically, the name must be 1-63 characters long and match
        the regular expression `a-z?` which means the
        first character must be a lowercase letter, and all following
        characters must be a dash, lowercase letter, or digit, except the last
        character, which cannot be a dash.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter(name="physicalBlockSizeBytes")
    def physical_block_size_bytes(self) -> Optional[pulumi.Input[int]]:
        """
        Physical block size of the persistent disk, in bytes. If not present
        in a request, a default value is used. Currently supported sizes
        are 4096 and 16384, other sizes may be added in the future.
        If an unsupported value is requested, the error message will list
        the supported values for the caller's project.
        """
        return pulumi.get(self, "physical_block_size_bytes")

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

    @property
    @pulumi.getter
    def project(self) -> Optional[pulumi.Input[str]]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        A reference to the region where the disk resides.
        """
        return pulumi.get(self, "region")

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

    @property
    @pulumi.getter(name="replicaZones")
    def replica_zones(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        URLs of the zones where the disk should be replicated to.


        - - -
        """
        return pulumi.get(self, "replica_zones")

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

    @property
    @pulumi.getter(name="selfLink")
    def self_link(self) -> Optional[pulumi.Input[str]]:
        """
        The URI of the created resource.
        """
        return pulumi.get(self, "self_link")

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

    @property
    @pulumi.getter
    def size(self) -> Optional[pulumi.Input[int]]:
        """
        Size of the persistent disk, specified in GB. You can specify this
        field when creating a persistent disk using the sourceImage or
        sourceSnapshot parameter, or specify it alone to create an empty
        persistent disk.
        If you specify this field along with sourceImage or sourceSnapshot,
        the value of sizeGb must not be less than the size of the sourceImage
        or the size of the snapshot.
        """
        return pulumi.get(self, "size")

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

    @property
    @pulumi.getter
    def snapshot(self) -> Optional[pulumi.Input[str]]:
        """
        The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
        example, the following are valid values: *
        'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
        'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        """
        return pulumi.get(self, "snapshot")

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

    @property
    @pulumi.getter(name="sourceDisk")
    def source_disk(self) -> Optional[pulumi.Input[str]]:
        """
        The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
        For example, the following are valid values:
        * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
        * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
        * projects/{project}/zones/{zone}/disks/{disk}
        * projects/{project}/regions/{region}/disks/{disk}
        * zones/{zone}/disks/{disk}
        * regions/{region}/disks/{disk}
        """
        return pulumi.get(self, "source_disk")

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

    @property
    @pulumi.getter(name="sourceDiskId")
    def source_disk_id(self) -> Optional[pulumi.Input[str]]:
        """
        The ID value of the disk used to create this image. This value may
        be used to determine whether the image was taken from the current
        or a previous instance of a given disk name.
        """
        return pulumi.get(self, "source_disk_id")

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

    @property
    @pulumi.getter(name="sourceSnapshotEncryptionKey")
    def source_snapshot_encryption_key(self) -> Optional[pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs']]:
        """
        The customer-supplied encryption key of the source snapshot. Required
        if the source snapshot is protected by a customer-supplied encryption
        key.
        Structure is documented below.
        """
        return pulumi.get(self, "source_snapshot_encryption_key")

    @source_snapshot_encryption_key.setter
    def source_snapshot_encryption_key(self, value: Optional[pulumi.Input['RegionDiskSourceSnapshotEncryptionKeyArgs']]):
        pulumi.set(self, "source_snapshot_encryption_key", value)

    @property
    @pulumi.getter(name="sourceSnapshotId")
    def source_snapshot_id(self) -> Optional[pulumi.Input[str]]:
        """
        The unique ID of the snapshot used to create this disk. This value
        identifies the exact snapshot that was used to create this persistent
        disk. For example, if you created the persistent disk from a snapshot
        that was later deleted and recreated under the same name, the source
        snapshot ID would identify the exact version of the snapshot that was
        used.
        """
        return pulumi.get(self, "source_snapshot_id")

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

    @property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[str]]:
        """
        URL of the disk type resource describing which disk type to use to
        create the disk. Provide this when creating the disk.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter
    def users(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Links to the users of the disk (attached instances) in form:
        project/zones/zone/instances/instance
        """
        return pulumi.get(self, "users")

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


class RegionDisk(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 async_primary_disk: Optional[pulumi.Input[pulumi.InputType['RegionDiskAsyncPrimaryDiskArgs']]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disk_encryption_key: Optional[pulumi.Input[pulumi.InputType['RegionDiskDiskEncryptionKeyArgs']]] = None,
                 guest_os_features: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionDiskGuestOsFeatureArgs']]]]] = None,
                 interface: Optional[pulumi.Input[str]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 licenses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 physical_block_size_bytes: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 replica_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 size: Optional[pulumi.Input[int]] = None,
                 snapshot: Optional[pulumi.Input[str]] = None,
                 source_disk: Optional[pulumi.Input[str]] = None,
                 source_snapshot_encryption_key: Optional[pulumi.Input[pulumi.InputType['RegionDiskSourceSnapshotEncryptionKeyArgs']]] = None,
                 type: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Persistent disks are durable storage devices that function similarly to
        the physical disks in a desktop or a server. Compute Engine manages the
        hardware behind these devices to ensure data redundancy and optimize
        performance for you. Persistent disks are available as either standard
        hard disk drives (HDD) or solid-state drives (SSD).

        Persistent disks are located independently from your virtual machine
        instances, so you can detach or move persistent disks to keep your data
        even after you delete your instances. Persistent disk performance scales
        automatically with size, so you can resize your existing persistent disks
        or add more persistent disks to an instance to meet your performance and
        storage space requirements.

        Add a persistent disk to your instance when you need reliable and
        affordable storage with consistent performance characteristics.

        To get more information about RegionDisk, see:

        * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks)
        * How-to Guides
            * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk)

        > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw
        state as plain-text.

        ## Example Usage
        ### Region Disk Basic

        ```python
        import pulumi
        import pulumi_gcp as gcp

        disk = gcp.compute.Disk("disk",
            image="debian-cloud/debian-11",
            size=50,
            type="pd-ssd",
            zone="us-central1-a")
        snapdisk = gcp.compute.Snapshot("snapdisk",
            source_disk=disk.name,
            zone="us-central1-a")
        regiondisk = gcp.compute.RegionDisk("regiondisk",
            snapshot=snapdisk.id,
            type="pd-ssd",
            region="us-central1",
            physical_block_size_bytes=4096,
            replica_zones=[
                "us-central1-a",
                "us-central1-f",
            ])
        ```
        ### Region Disk Async

        ```python
        import pulumi
        import pulumi_gcp as gcp

        primary = gcp.compute.RegionDisk("primary",
            type="pd-ssd",
            region="us-central1",
            physical_block_size_bytes=4096,
            replica_zones=[
                "us-central1-a",
                "us-central1-f",
            ])
        secondary = gcp.compute.RegionDisk("secondary",
            type="pd-ssd",
            region="us-east1",
            physical_block_size_bytes=4096,
            async_primary_disk=gcp.compute.RegionDiskAsyncPrimaryDiskArgs(
                disk=primary.id,
            ),
            replica_zones=[
                "us-east1-b",
                "us-east1-c",
            ])
        ```
        ### Region Disk Features

        ```python
        import pulumi
        import pulumi_gcp as gcp

        regiondisk = gcp.compute.RegionDisk("regiondisk",
            guest_os_features=[
                gcp.compute.RegionDiskGuestOsFeatureArgs(
                    type="SECURE_BOOT",
                ),
                gcp.compute.RegionDiskGuestOsFeatureArgs(
                    type="MULTI_IP_SUBNET",
                ),
                gcp.compute.RegionDiskGuestOsFeatureArgs(
                    type="WINDOWS",
                ),
            ],
            licenses=["https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core"],
            physical_block_size_bytes=4096,
            region="us-central1",
            replica_zones=[
                "us-central1-a",
                "us-central1-f",
            ],
            type="pd-ssd")
        ```

        ## Import

        RegionDisk can be imported using any of these accepted formats

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default projects/{{project}}/regions/{{region}}/disks/{{name}}
        ```

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default {{project}}/{{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default {{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default {{name}}
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['RegionDiskAsyncPrimaryDiskArgs']] async_primary_disk: A nested object resource
               Structure is documented below.
        :param pulumi.Input[str] description: An optional description of this resource. Provide this property when
               you create the resource.
        :param pulumi.Input[pulumi.InputType['RegionDiskDiskEncryptionKeyArgs']] disk_encryption_key: Encrypts the disk using a customer-supplied encryption key.
               After you encrypt a disk with a customer-supplied key, you must
               provide the same key if you use the disk later (e.g. to create a disk
               snapshot or an image, or to attach the disk to a virtual machine).
               Customer-supplied encryption keys do not protect access to metadata of
               the disk.
               If you do not provide an encryption key when creating the disk, then
               the disk will be encrypted using an automatically generated key and
               you do not need to provide a key to use the disk later.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionDiskGuestOsFeatureArgs']]]] guest_os_features: A list of features to enable on the guest operating system.
               Applicable only for bootable disks.
               Structure is documented below.
        :param pulumi.Input[str] interface: (Optional, Deprecated)
               Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.
               
               > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this disk.  A list of key->value pairs.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] licenses: Any applicable license URI.
        :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is
               created. The name must be 1-63 characters long, and comply with
               RFC1035. Specifically, the name must be 1-63 characters long and match
               the regular expression `a-z?` which means the
               first character must be a lowercase letter, and all following
               characters must be a dash, lowercase letter, or digit, except the last
               character, which cannot be a dash.
        :param pulumi.Input[int] physical_block_size_bytes: Physical block size of the persistent disk, in bytes. If not present
               in a request, a default value is used. Currently supported sizes
               are 4096 and 16384, other sizes may be added in the future.
               If an unsupported value is requested, the error message will list
               the supported values for the caller's project.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: A reference to the region where the disk resides.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_zones: URLs of the zones where the disk should be replicated to.
               
               
               - - -
        :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this
               field when creating a persistent disk using the sourceImage or
               sourceSnapshot parameter, or specify it alone to create an empty
               persistent disk.
               If you specify this field along with sourceImage or sourceSnapshot,
               the value of sizeGb must not be less than the size of the sourceImage
               or the size of the snapshot.
        :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
               example, the following are valid values: *
               'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
               'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        :param pulumi.Input[str] source_disk: The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
               For example, the following are valid values:
               * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
               * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
               * projects/{project}/zones/{zone}/disks/{disk}
               * projects/{project}/regions/{region}/disks/{disk}
               * zones/{zone}/disks/{disk}
               * regions/{region}/disks/{disk}
        :param pulumi.Input[pulumi.InputType['RegionDiskSourceSnapshotEncryptionKeyArgs']] source_snapshot_encryption_key: The customer-supplied encryption key of the source snapshot. Required
               if the source snapshot is protected by a customer-supplied encryption
               key.
               Structure is documented below.
        :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to
               create the disk. Provide this when creating the disk.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: RegionDiskArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Persistent disks are durable storage devices that function similarly to
        the physical disks in a desktop or a server. Compute Engine manages the
        hardware behind these devices to ensure data redundancy and optimize
        performance for you. Persistent disks are available as either standard
        hard disk drives (HDD) or solid-state drives (SSD).

        Persistent disks are located independently from your virtual machine
        instances, so you can detach or move persistent disks to keep your data
        even after you delete your instances. Persistent disk performance scales
        automatically with size, so you can resize your existing persistent disks
        or add more persistent disks to an instance to meet your performance and
        storage space requirements.

        Add a persistent disk to your instance when you need reliable and
        affordable storage with consistent performance characteristics.

        To get more information about RegionDisk, see:

        * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks)
        * How-to Guides
            * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk)

        > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw
        state as plain-text.

        ## Example Usage
        ### Region Disk Basic

        ```python
        import pulumi
        import pulumi_gcp as gcp

        disk = gcp.compute.Disk("disk",
            image="debian-cloud/debian-11",
            size=50,
            type="pd-ssd",
            zone="us-central1-a")
        snapdisk = gcp.compute.Snapshot("snapdisk",
            source_disk=disk.name,
            zone="us-central1-a")
        regiondisk = gcp.compute.RegionDisk("regiondisk",
            snapshot=snapdisk.id,
            type="pd-ssd",
            region="us-central1",
            physical_block_size_bytes=4096,
            replica_zones=[
                "us-central1-a",
                "us-central1-f",
            ])
        ```
        ### Region Disk Async

        ```python
        import pulumi
        import pulumi_gcp as gcp

        primary = gcp.compute.RegionDisk("primary",
            type="pd-ssd",
            region="us-central1",
            physical_block_size_bytes=4096,
            replica_zones=[
                "us-central1-a",
                "us-central1-f",
            ])
        secondary = gcp.compute.RegionDisk("secondary",
            type="pd-ssd",
            region="us-east1",
            physical_block_size_bytes=4096,
            async_primary_disk=gcp.compute.RegionDiskAsyncPrimaryDiskArgs(
                disk=primary.id,
            ),
            replica_zones=[
                "us-east1-b",
                "us-east1-c",
            ])
        ```
        ### Region Disk Features

        ```python
        import pulumi
        import pulumi_gcp as gcp

        regiondisk = gcp.compute.RegionDisk("regiondisk",
            guest_os_features=[
                gcp.compute.RegionDiskGuestOsFeatureArgs(
                    type="SECURE_BOOT",
                ),
                gcp.compute.RegionDiskGuestOsFeatureArgs(
                    type="MULTI_IP_SUBNET",
                ),
                gcp.compute.RegionDiskGuestOsFeatureArgs(
                    type="WINDOWS",
                ),
            ],
            licenses=["https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core"],
            physical_block_size_bytes=4096,
            region="us-central1",
            replica_zones=[
                "us-central1-a",
                "us-central1-f",
            ],
            type="pd-ssd")
        ```

        ## Import

        RegionDisk can be imported using any of these accepted formats

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default projects/{{project}}/regions/{{region}}/disks/{{name}}
        ```

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default {{project}}/{{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default {{region}}/{{name}}
        ```

        ```sh
         $ pulumi import gcp:compute/regionDisk:RegionDisk default {{name}}
        ```

        :param str resource_name: The name of the resource.
        :param RegionDiskArgs 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(RegionDiskArgs, 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,
                 async_primary_disk: Optional[pulumi.Input[pulumi.InputType['RegionDiskAsyncPrimaryDiskArgs']]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 disk_encryption_key: Optional[pulumi.Input[pulumi.InputType['RegionDiskDiskEncryptionKeyArgs']]] = None,
                 guest_os_features: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionDiskGuestOsFeatureArgs']]]]] = None,
                 interface: Optional[pulumi.Input[str]] = None,
                 labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 licenses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 physical_block_size_bytes: Optional[pulumi.Input[int]] = None,
                 project: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 replica_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 size: Optional[pulumi.Input[int]] = None,
                 snapshot: Optional[pulumi.Input[str]] = None,
                 source_disk: Optional[pulumi.Input[str]] = None,
                 source_snapshot_encryption_key: Optional[pulumi.Input[pulumi.InputType['RegionDiskSourceSnapshotEncryptionKeyArgs']]] = None,
                 type: 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__ = RegionDiskArgs.__new__(RegionDiskArgs)

            __props__.__dict__["async_primary_disk"] = async_primary_disk
            __props__.__dict__["description"] = description
            __props__.__dict__["disk_encryption_key"] = disk_encryption_key
            __props__.__dict__["guest_os_features"] = guest_os_features
            if interface is not None and not opts.urn:
                warnings.warn("""`interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""", DeprecationWarning)
                pulumi.log.warn("""interface is deprecated: `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""")
            __props__.__dict__["interface"] = interface
            __props__.__dict__["labels"] = labels
            __props__.__dict__["licenses"] = licenses
            __props__.__dict__["name"] = name
            __props__.__dict__["physical_block_size_bytes"] = physical_block_size_bytes
            __props__.__dict__["project"] = project
            __props__.__dict__["region"] = region
            if replica_zones is None and not opts.urn:
                raise TypeError("Missing required property 'replica_zones'")
            __props__.__dict__["replica_zones"] = replica_zones
            __props__.__dict__["size"] = size
            __props__.__dict__["snapshot"] = snapshot
            __props__.__dict__["source_disk"] = source_disk
            __props__.__dict__["source_snapshot_encryption_key"] = source_snapshot_encryption_key
            __props__.__dict__["type"] = type
            __props__.__dict__["creation_timestamp"] = None
            __props__.__dict__["label_fingerprint"] = None
            __props__.__dict__["last_attach_timestamp"] = None
            __props__.__dict__["last_detach_timestamp"] = None
            __props__.__dict__["self_link"] = None
            __props__.__dict__["source_disk_id"] = None
            __props__.__dict__["source_snapshot_id"] = None
            __props__.__dict__["users"] = None
        super(RegionDisk, __self__).__init__(
            'gcp:compute/regionDisk:RegionDisk',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            async_primary_disk: Optional[pulumi.Input[pulumi.InputType['RegionDiskAsyncPrimaryDiskArgs']]] = None,
            creation_timestamp: Optional[pulumi.Input[str]] = None,
            description: Optional[pulumi.Input[str]] = None,
            disk_encryption_key: Optional[pulumi.Input[pulumi.InputType['RegionDiskDiskEncryptionKeyArgs']]] = None,
            guest_os_features: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionDiskGuestOsFeatureArgs']]]]] = None,
            interface: Optional[pulumi.Input[str]] = None,
            label_fingerprint: Optional[pulumi.Input[str]] = None,
            labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
            last_attach_timestamp: Optional[pulumi.Input[str]] = None,
            last_detach_timestamp: Optional[pulumi.Input[str]] = None,
            licenses: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            name: Optional[pulumi.Input[str]] = None,
            physical_block_size_bytes: Optional[pulumi.Input[int]] = None,
            project: Optional[pulumi.Input[str]] = None,
            region: Optional[pulumi.Input[str]] = None,
            replica_zones: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            self_link: Optional[pulumi.Input[str]] = None,
            size: Optional[pulumi.Input[int]] = None,
            snapshot: Optional[pulumi.Input[str]] = None,
            source_disk: Optional[pulumi.Input[str]] = None,
            source_disk_id: Optional[pulumi.Input[str]] = None,
            source_snapshot_encryption_key: Optional[pulumi.Input[pulumi.InputType['RegionDiskSourceSnapshotEncryptionKeyArgs']]] = None,
            source_snapshot_id: Optional[pulumi.Input[str]] = None,
            type: Optional[pulumi.Input[str]] = None,
            users: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None) -> 'RegionDisk':
        """
        Get an existing RegionDisk 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[pulumi.InputType['RegionDiskAsyncPrimaryDiskArgs']] async_primary_disk: A nested object resource
               Structure is documented below.
        :param pulumi.Input[str] creation_timestamp: Creation timestamp in RFC3339 text format.
        :param pulumi.Input[str] description: An optional description of this resource. Provide this property when
               you create the resource.
        :param pulumi.Input[pulumi.InputType['RegionDiskDiskEncryptionKeyArgs']] disk_encryption_key: Encrypts the disk using a customer-supplied encryption key.
               After you encrypt a disk with a customer-supplied key, you must
               provide the same key if you use the disk later (e.g. to create a disk
               snapshot or an image, or to attach the disk to a virtual machine).
               Customer-supplied encryption keys do not protect access to metadata of
               the disk.
               If you do not provide an encryption key when creating the disk, then
               the disk will be encrypted using an automatically generated key and
               you do not need to provide a key to use the disk later.
               Structure is documented below.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionDiskGuestOsFeatureArgs']]]] guest_os_features: A list of features to enable on the guest operating system.
               Applicable only for bootable disks.
               Structure is documented below.
        :param pulumi.Input[str] interface: (Optional, Deprecated)
               Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.
               
               > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        :param pulumi.Input[str] label_fingerprint: The fingerprint used for optimistic locking of this resource.  Used
               internally during updates.
        :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this disk.  A list of key->value pairs.
        :param pulumi.Input[str] last_attach_timestamp: Last attach timestamp in RFC3339 text format.
        :param pulumi.Input[str] last_detach_timestamp: Last detach timestamp in RFC3339 text format.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] licenses: Any applicable license URI.
        :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is
               created. The name must be 1-63 characters long, and comply with
               RFC1035. Specifically, the name must be 1-63 characters long and match
               the regular expression `a-z?` which means the
               first character must be a lowercase letter, and all following
               characters must be a dash, lowercase letter, or digit, except the last
               character, which cannot be a dash.
        :param pulumi.Input[int] physical_block_size_bytes: Physical block size of the persistent disk, in bytes. If not present
               in a request, a default value is used. Currently supported sizes
               are 4096 and 16384, other sizes may be added in the future.
               If an unsupported value is requested, the error message will list
               the supported values for the caller's project.
        :param pulumi.Input[str] project: The ID of the project in which the resource belongs.
               If it is not provided, the provider project is used.
        :param pulumi.Input[str] region: A reference to the region where the disk resides.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] replica_zones: URLs of the zones where the disk should be replicated to.
               
               
               - - -
        :param pulumi.Input[str] self_link: The URI of the created resource.
        :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this
               field when creating a persistent disk using the sourceImage or
               sourceSnapshot parameter, or specify it alone to create an empty
               persistent disk.
               If you specify this field along with sourceImage or sourceSnapshot,
               the value of sizeGb must not be less than the size of the sourceImage
               or the size of the snapshot.
        :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
               example, the following are valid values: *
               'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
               'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        :param pulumi.Input[str] source_disk: The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
               For example, the following are valid values:
               * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
               * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
               * projects/{project}/zones/{zone}/disks/{disk}
               * projects/{project}/regions/{region}/disks/{disk}
               * zones/{zone}/disks/{disk}
               * regions/{region}/disks/{disk}
        :param pulumi.Input[str] source_disk_id: The ID value of the disk used to create this image. This value may
               be used to determine whether the image was taken from the current
               or a previous instance of a given disk name.
        :param pulumi.Input[pulumi.InputType['RegionDiskSourceSnapshotEncryptionKeyArgs']] source_snapshot_encryption_key: The customer-supplied encryption key of the source snapshot. Required
               if the source snapshot is protected by a customer-supplied encryption
               key.
               Structure is documented below.
        :param pulumi.Input[str] source_snapshot_id: The unique ID of the snapshot used to create this disk. This value
               identifies the exact snapshot that was used to create this persistent
               disk. For example, if you created the persistent disk from a snapshot
               that was later deleted and recreated under the same name, the source
               snapshot ID would identify the exact version of the snapshot that was
               used.
        :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to
               create the disk. Provide this when creating the disk.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] users: Links to the users of the disk (attached instances) in form:
               project/zones/zone/instances/instance
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _RegionDiskState.__new__(_RegionDiskState)

        __props__.__dict__["async_primary_disk"] = async_primary_disk
        __props__.__dict__["creation_timestamp"] = creation_timestamp
        __props__.__dict__["description"] = description
        __props__.__dict__["disk_encryption_key"] = disk_encryption_key
        __props__.__dict__["guest_os_features"] = guest_os_features
        __props__.__dict__["interface"] = interface
        __props__.__dict__["label_fingerprint"] = label_fingerprint
        __props__.__dict__["labels"] = labels
        __props__.__dict__["last_attach_timestamp"] = last_attach_timestamp
        __props__.__dict__["last_detach_timestamp"] = last_detach_timestamp
        __props__.__dict__["licenses"] = licenses
        __props__.__dict__["name"] = name
        __props__.__dict__["physical_block_size_bytes"] = physical_block_size_bytes
        __props__.__dict__["project"] = project
        __props__.__dict__["region"] = region
        __props__.__dict__["replica_zones"] = replica_zones
        __props__.__dict__["self_link"] = self_link
        __props__.__dict__["size"] = size
        __props__.__dict__["snapshot"] = snapshot
        __props__.__dict__["source_disk"] = source_disk
        __props__.__dict__["source_disk_id"] = source_disk_id
        __props__.__dict__["source_snapshot_encryption_key"] = source_snapshot_encryption_key
        __props__.__dict__["source_snapshot_id"] = source_snapshot_id
        __props__.__dict__["type"] = type
        __props__.__dict__["users"] = users
        return RegionDisk(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="asyncPrimaryDisk")
    def async_primary_disk(self) -> pulumi.Output[Optional['outputs.RegionDiskAsyncPrimaryDisk']]:
        """
        A nested object resource
        Structure is documented below.
        """
        return pulumi.get(self, "async_primary_disk")

    @property
    @pulumi.getter(name="creationTimestamp")
    def creation_timestamp(self) -> pulumi.Output[str]:
        """
        Creation timestamp in RFC3339 text format.
        """
        return pulumi.get(self, "creation_timestamp")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[Optional[str]]:
        """
        An optional description of this resource. Provide this property when
        you create the resource.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="diskEncryptionKey")
    def disk_encryption_key(self) -> pulumi.Output[Optional['outputs.RegionDiskDiskEncryptionKey']]:
        """
        Encrypts the disk using a customer-supplied encryption key.
        After you encrypt a disk with a customer-supplied key, you must
        provide the same key if you use the disk later (e.g. to create a disk
        snapshot or an image, or to attach the disk to a virtual machine).
        Customer-supplied encryption keys do not protect access to metadata of
        the disk.
        If you do not provide an encryption key when creating the disk, then
        the disk will be encrypted using an automatically generated key and
        you do not need to provide a key to use the disk later.
        Structure is documented below.
        """
        return pulumi.get(self, "disk_encryption_key")

    @property
    @pulumi.getter(name="guestOsFeatures")
    def guest_os_features(self) -> pulumi.Output[Sequence['outputs.RegionDiskGuestOsFeature']]:
        """
        A list of features to enable on the guest operating system.
        Applicable only for bootable disks.
        Structure is documented below.
        """
        return pulumi.get(self, "guest_os_features")

    @property
    @pulumi.getter
    def interface(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional, Deprecated)
        Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.

        > **Warning:** `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.
        """
        warnings.warn("""`interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""", DeprecationWarning)
        pulumi.log.warn("""interface is deprecated: `interface` is deprecated and will be removed in a future major release. This field is no longer used and can be safely removed from your configurations; disk interfaces are automatically determined on attachment.""")

        return pulumi.get(self, "interface")

    @property
    @pulumi.getter(name="labelFingerprint")
    def label_fingerprint(self) -> pulumi.Output[str]:
        """
        The fingerprint used for optimistic locking of this resource.  Used
        internally during updates.
        """
        return pulumi.get(self, "label_fingerprint")

    @property
    @pulumi.getter
    def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        """
        Labels to apply to this disk.  A list of key->value pairs.
        """
        return pulumi.get(self, "labels")

    @property
    @pulumi.getter(name="lastAttachTimestamp")
    def last_attach_timestamp(self) -> pulumi.Output[str]:
        """
        Last attach timestamp in RFC3339 text format.
        """
        return pulumi.get(self, "last_attach_timestamp")

    @property
    @pulumi.getter(name="lastDetachTimestamp")
    def last_detach_timestamp(self) -> pulumi.Output[str]:
        """
        Last detach timestamp in RFC3339 text format.
        """
        return pulumi.get(self, "last_detach_timestamp")

    @property
    @pulumi.getter
    def licenses(self) -> pulumi.Output[Sequence[str]]:
        """
        Any applicable license URI.
        """
        return pulumi.get(self, "licenses")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        Name of the resource. Provided by the client when the resource is
        created. The name must be 1-63 characters long, and comply with
        RFC1035. Specifically, the name must be 1-63 characters long and match
        the regular expression `a-z?` which means the
        first character must be a lowercase letter, and all following
        characters must be a dash, lowercase letter, or digit, except the last
        character, which cannot be a dash.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="physicalBlockSizeBytes")
    def physical_block_size_bytes(self) -> pulumi.Output[int]:
        """
        Physical block size of the persistent disk, in bytes. If not present
        in a request, a default value is used. Currently supported sizes
        are 4096 and 16384, other sizes may be added in the future.
        If an unsupported value is requested, the error message will list
        the supported values for the caller's project.
        """
        return pulumi.get(self, "physical_block_size_bytes")

    @property
    @pulumi.getter
    def project(self) -> pulumi.Output[str]:
        """
        The ID of the project in which the resource belongs.
        If it is not provided, the provider project is used.
        """
        return pulumi.get(self, "project")

    @property
    @pulumi.getter
    def region(self) -> pulumi.Output[str]:
        """
        A reference to the region where the disk resides.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="replicaZones")
    def replica_zones(self) -> pulumi.Output[Sequence[str]]:
        """
        URLs of the zones where the disk should be replicated to.


        - - -
        """
        return pulumi.get(self, "replica_zones")

    @property
    @pulumi.getter(name="selfLink")
    def self_link(self) -> pulumi.Output[str]:
        """
        The URI of the created resource.
        """
        return pulumi.get(self, "self_link")

    @property
    @pulumi.getter
    def size(self) -> pulumi.Output[int]:
        """
        Size of the persistent disk, specified in GB. You can specify this
        field when creating a persistent disk using the sourceImage or
        sourceSnapshot parameter, or specify it alone to create an empty
        persistent disk.
        If you specify this field along with sourceImage or sourceSnapshot,
        the value of sizeGb must not be less than the size of the sourceImage
        or the size of the snapshot.
        """
        return pulumi.get(self, "size")

    @property
    @pulumi.getter
    def snapshot(self) -> pulumi.Output[Optional[str]]:
        """
        The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For
        example, the following are valid values: *
        'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' *
        'projects/project/global/snapshots/snapshot' * 'global/snapshots/snapshot' * 'snapshot'
        """
        return pulumi.get(self, "snapshot")

    @property
    @pulumi.getter(name="sourceDisk")
    def source_disk(self) -> pulumi.Output[Optional[str]]:
        """
        The source disk used to create this disk. You can provide this as a partial or full URL to the resource.
        For example, the following are valid values:
        * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/disks/{disk}
        * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/disks/{disk}
        * projects/{project}/zones/{zone}/disks/{disk}
        * projects/{project}/regions/{region}/disks/{disk}
        * zones/{zone}/disks/{disk}
        * regions/{region}/disks/{disk}
        """
        return pulumi.get(self, "source_disk")

    @property
    @pulumi.getter(name="sourceDiskId")
    def source_disk_id(self) -> pulumi.Output[str]:
        """
        The ID value of the disk used to create this image. This value may
        be used to determine whether the image was taken from the current
        or a previous instance of a given disk name.
        """
        return pulumi.get(self, "source_disk_id")

    @property
    @pulumi.getter(name="sourceSnapshotEncryptionKey")
    def source_snapshot_encryption_key(self) -> pulumi.Output[Optional['outputs.RegionDiskSourceSnapshotEncryptionKey']]:
        """
        The customer-supplied encryption key of the source snapshot. Required
        if the source snapshot is protected by a customer-supplied encryption
        key.
        Structure is documented below.
        """
        return pulumi.get(self, "source_snapshot_encryption_key")

    @property
    @pulumi.getter(name="sourceSnapshotId")
    def source_snapshot_id(self) -> pulumi.Output[str]:
        """
        The unique ID of the snapshot used to create this disk. This value
        identifies the exact snapshot that was used to create this persistent
        disk. For example, if you created the persistent disk from a snapshot
        that was later deleted and recreated under the same name, the source
        snapshot ID would identify the exact version of the snapshot that was
        used.
        """
        return pulumi.get(self, "source_snapshot_id")

    @property
    @pulumi.getter
    def type(self) -> pulumi.Output[Optional[str]]:
        """
        URL of the disk type resource describing which disk type to use to
        create the disk. Provide this when creating the disk.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter
    def users(self) -> pulumi.Output[Sequence[str]]:
        """
        Links to the users of the disk (attached instances) in form:
        project/zones/zone/instances/instance
        """
        return pulumi.get(self, "users")

