# 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 builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from . import _utilities
from . import outputs
from ._inputs import *

__all__ = ['CsiVolumeArgs', 'CsiVolume']

@pulumi.input_type
class CsiVolumeArgs:
    def __init__(__self__, *,
                 capabilities: pulumi.Input[Sequence[pulumi.Input['CsiVolumeCapabilityArgs']]],
                 plugin_id: pulumi.Input[builtins.str],
                 volume_id: pulumi.Input[builtins.str],
                 capacity_max: Optional[pulumi.Input[builtins.str]] = None,
                 capacity_min: Optional[pulumi.Input[builtins.str]] = None,
                 clone_id: Optional[pulumi.Input[builtins.str]] = None,
                 mount_options: Optional[pulumi.Input['CsiVolumeMountOptionsArgs']] = None,
                 name: Optional[pulumi.Input[builtins.str]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 secrets: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 snapshot_id: Optional[pulumi.Input[builtins.str]] = None,
                 topology_request: Optional[pulumi.Input['CsiVolumeTopologyRequestArgs']] = None):
        """
        The set of arguments for constructing a CsiVolume resource.
        :param pulumi.Input[Sequence[pulumi.Input['CsiVolumeCapabilityArgs']]] capabilities: `(``Capability``: <required>)` - Options for validating the capability of a volume.
        :param pulumi.Input[builtins.str] plugin_id: `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        :param pulumi.Input[builtins.str] volume_id: `(string: <required>)` - The unique ID of the volume.
        :param pulumi.Input[builtins.str] capacity_max: `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] capacity_min: `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] clone_id: `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        :param pulumi.Input['CsiVolumeMountOptionsArgs'] mount_options: `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        :param pulumi.Input[builtins.str] name: `(string: <required>)` - The display name for the volume.
        :param pulumi.Input[builtins.str] namespace: `(string: "default")` - The namespace in which to register the volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] parameters: `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] secrets: `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        :param pulumi.Input[builtins.str] snapshot_id: `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        :param pulumi.Input['CsiVolumeTopologyRequestArgs'] topology_request: `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        """
        pulumi.set(__self__, "capabilities", capabilities)
        pulumi.set(__self__, "plugin_id", plugin_id)
        pulumi.set(__self__, "volume_id", volume_id)
        if capacity_max is not None:
            pulumi.set(__self__, "capacity_max", capacity_max)
        if capacity_min is not None:
            pulumi.set(__self__, "capacity_min", capacity_min)
        if clone_id is not None:
            pulumi.set(__self__, "clone_id", clone_id)
        if mount_options is not None:
            pulumi.set(__self__, "mount_options", mount_options)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if namespace is not None:
            pulumi.set(__self__, "namespace", namespace)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)
        if secrets is not None:
            pulumi.set(__self__, "secrets", secrets)
        if snapshot_id is not None:
            pulumi.set(__self__, "snapshot_id", snapshot_id)
        if topology_request is not None:
            pulumi.set(__self__, "topology_request", topology_request)

    @property
    @pulumi.getter
    def capabilities(self) -> pulumi.Input[Sequence[pulumi.Input['CsiVolumeCapabilityArgs']]]:
        """
        `(``Capability``: <required>)` - Options for validating the capability of a volume.
        """
        return pulumi.get(self, "capabilities")

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

    @property
    @pulumi.getter(name="pluginId")
    def plugin_id(self) -> pulumi.Input[builtins.str]:
        """
        `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        """
        return pulumi.get(self, "plugin_id")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> pulumi.Input[builtins.str]:
        """
        `(string: <required>)` - The unique ID of the volume.
        """
        return pulumi.get(self, "volume_id")

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

    @property
    @pulumi.getter(name="capacityMax")
    def capacity_max(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        """
        return pulumi.get(self, "capacity_max")

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

    @property
    @pulumi.getter(name="capacityMin")
    def capacity_min(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        """
        return pulumi.get(self, "capacity_min")

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

    @property
    @pulumi.getter(name="cloneId")
    def clone_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        """
        return pulumi.get(self, "clone_id")

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

    @property
    @pulumi.getter(name="mountOptions")
    def mount_options(self) -> Optional[pulumi.Input['CsiVolumeMountOptionsArgs']]:
        """
        `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        """
        return pulumi.get(self, "mount_options")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <required>)` - The display name for the volume.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def namespace(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: "default")` - The namespace in which to register the volume.
        """
        return pulumi.get(self, "namespace")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]]:
        """
        `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        """
        return pulumi.get(self, "parameters")

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

    @property
    @pulumi.getter
    def secrets(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]]:
        """
        `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        """
        return pulumi.get(self, "secrets")

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

    @property
    @pulumi.getter(name="snapshotId")
    def snapshot_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        """
        return pulumi.get(self, "snapshot_id")

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

    @property
    @pulumi.getter(name="topologyRequest")
    def topology_request(self) -> Optional[pulumi.Input['CsiVolumeTopologyRequestArgs']]:
        """
        `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        """
        return pulumi.get(self, "topology_request")

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


@pulumi.input_type
class _CsiVolumeState:
    def __init__(__self__, *,
                 capabilities: Optional[pulumi.Input[Sequence[pulumi.Input['CsiVolumeCapabilityArgs']]]] = None,
                 capacity: Optional[pulumi.Input[builtins.int]] = None,
                 capacity_max: Optional[pulumi.Input[builtins.str]] = None,
                 capacity_max_bytes: Optional[pulumi.Input[builtins.int]] = None,
                 capacity_min: Optional[pulumi.Input[builtins.str]] = None,
                 capacity_min_bytes: Optional[pulumi.Input[builtins.int]] = None,
                 clone_id: Optional[pulumi.Input[builtins.str]] = None,
                 context: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 controller_required: Optional[pulumi.Input[builtins.bool]] = None,
                 controllers_expected: Optional[pulumi.Input[builtins.int]] = None,
                 controllers_healthy: Optional[pulumi.Input[builtins.int]] = None,
                 external_id: Optional[pulumi.Input[builtins.str]] = None,
                 mount_options: Optional[pulumi.Input['CsiVolumeMountOptionsArgs']] = None,
                 name: Optional[pulumi.Input[builtins.str]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 nodes_expected: Optional[pulumi.Input[builtins.int]] = None,
                 nodes_healthy: Optional[pulumi.Input[builtins.int]] = None,
                 parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 plugin_id: Optional[pulumi.Input[builtins.str]] = None,
                 plugin_provider: Optional[pulumi.Input[builtins.str]] = None,
                 plugin_provider_version: Optional[pulumi.Input[builtins.str]] = None,
                 schedulable: Optional[pulumi.Input[builtins.bool]] = None,
                 secrets: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 snapshot_id: Optional[pulumi.Input[builtins.str]] = None,
                 topologies: Optional[pulumi.Input[Sequence[pulumi.Input['CsiVolumeTopologyArgs']]]] = None,
                 topology_request: Optional[pulumi.Input['CsiVolumeTopologyRequestArgs']] = None,
                 volume_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        Input properties used for looking up and filtering CsiVolume resources.
        :param pulumi.Input[Sequence[pulumi.Input['CsiVolumeCapabilityArgs']]] capabilities: `(``Capability``: <required>)` - Options for validating the capability of a volume.
        :param pulumi.Input[builtins.str] capacity_max: `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] capacity_min: `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] clone_id: `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] context: The volume context provided by the storage provider
        :param pulumi.Input[builtins.str] external_id: The ID of the physical volume from the storage provider.
        :param pulumi.Input['CsiVolumeMountOptionsArgs'] mount_options: `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        :param pulumi.Input[builtins.str] name: `(string: <required>)` - The display name for the volume.
        :param pulumi.Input[builtins.str] namespace: `(string: "default")` - The namespace in which to register the volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] parameters: `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        :param pulumi.Input[builtins.str] plugin_id: `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] secrets: `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        :param pulumi.Input[builtins.str] snapshot_id: `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        :param pulumi.Input['CsiVolumeTopologyRequestArgs'] topology_request: `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        :param pulumi.Input[builtins.str] volume_id: `(string: <required>)` - The unique ID of the volume.
        """
        if capabilities is not None:
            pulumi.set(__self__, "capabilities", capabilities)
        if capacity is not None:
            pulumi.set(__self__, "capacity", capacity)
        if capacity_max is not None:
            pulumi.set(__self__, "capacity_max", capacity_max)
        if capacity_max_bytes is not None:
            pulumi.set(__self__, "capacity_max_bytes", capacity_max_bytes)
        if capacity_min is not None:
            pulumi.set(__self__, "capacity_min", capacity_min)
        if capacity_min_bytes is not None:
            pulumi.set(__self__, "capacity_min_bytes", capacity_min_bytes)
        if clone_id is not None:
            pulumi.set(__self__, "clone_id", clone_id)
        if context is not None:
            pulumi.set(__self__, "context", context)
        if controller_required is not None:
            pulumi.set(__self__, "controller_required", controller_required)
        if controllers_expected is not None:
            pulumi.set(__self__, "controllers_expected", controllers_expected)
        if controllers_healthy is not None:
            pulumi.set(__self__, "controllers_healthy", controllers_healthy)
        if external_id is not None:
            pulumi.set(__self__, "external_id", external_id)
        if mount_options is not None:
            pulumi.set(__self__, "mount_options", mount_options)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if namespace is not None:
            pulumi.set(__self__, "namespace", namespace)
        if nodes_expected is not None:
            pulumi.set(__self__, "nodes_expected", nodes_expected)
        if nodes_healthy is not None:
            pulumi.set(__self__, "nodes_healthy", nodes_healthy)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)
        if plugin_id is not None:
            pulumi.set(__self__, "plugin_id", plugin_id)
        if plugin_provider is not None:
            pulumi.set(__self__, "plugin_provider", plugin_provider)
        if plugin_provider_version is not None:
            pulumi.set(__self__, "plugin_provider_version", plugin_provider_version)
        if schedulable is not None:
            pulumi.set(__self__, "schedulable", schedulable)
        if secrets is not None:
            pulumi.set(__self__, "secrets", secrets)
        if snapshot_id is not None:
            pulumi.set(__self__, "snapshot_id", snapshot_id)
        if topologies is not None:
            pulumi.set(__self__, "topologies", topologies)
        if topology_request is not None:
            pulumi.set(__self__, "topology_request", topology_request)
        if volume_id is not None:
            pulumi.set(__self__, "volume_id", volume_id)

    @property
    @pulumi.getter
    def capabilities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CsiVolumeCapabilityArgs']]]]:
        """
        `(``Capability``: <required>)` - Options for validating the capability of a volume.
        """
        return pulumi.get(self, "capabilities")

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

    @property
    @pulumi.getter
    def capacity(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "capacity")

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

    @property
    @pulumi.getter(name="capacityMax")
    def capacity_max(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        """
        return pulumi.get(self, "capacity_max")

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

    @property
    @pulumi.getter(name="capacityMaxBytes")
    def capacity_max_bytes(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "capacity_max_bytes")

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

    @property
    @pulumi.getter(name="capacityMin")
    def capacity_min(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        """
        return pulumi.get(self, "capacity_min")

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

    @property
    @pulumi.getter(name="capacityMinBytes")
    def capacity_min_bytes(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "capacity_min_bytes")

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

    @property
    @pulumi.getter(name="cloneId")
    def clone_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        """
        return pulumi.get(self, "clone_id")

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

    @property
    @pulumi.getter
    def context(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]]:
        """
        The volume context provided by the storage provider
        """
        return pulumi.get(self, "context")

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

    @property
    @pulumi.getter(name="controllerRequired")
    def controller_required(self) -> Optional[pulumi.Input[builtins.bool]]:
        return pulumi.get(self, "controller_required")

    @controller_required.setter
    def controller_required(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "controller_required", value)

    @property
    @pulumi.getter(name="controllersExpected")
    def controllers_expected(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "controllers_expected")

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

    @property
    @pulumi.getter(name="controllersHealthy")
    def controllers_healthy(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "controllers_healthy")

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

    @property
    @pulumi.getter(name="externalId")
    def external_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        The ID of the physical volume from the storage provider.
        """
        return pulumi.get(self, "external_id")

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

    @property
    @pulumi.getter(name="mountOptions")
    def mount_options(self) -> Optional[pulumi.Input['CsiVolumeMountOptionsArgs']]:
        """
        `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        """
        return pulumi.get(self, "mount_options")

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

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <required>)` - The display name for the volume.
        """
        return pulumi.get(self, "name")

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

    @property
    @pulumi.getter
    def namespace(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: "default")` - The namespace in which to register the volume.
        """
        return pulumi.get(self, "namespace")

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

    @property
    @pulumi.getter(name="nodesExpected")
    def nodes_expected(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "nodes_expected")

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

    @property
    @pulumi.getter(name="nodesHealthy")
    def nodes_healthy(self) -> Optional[pulumi.Input[builtins.int]]:
        return pulumi.get(self, "nodes_healthy")

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

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]]:
        """
        `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        """
        return pulumi.get(self, "parameters")

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

    @property
    @pulumi.getter(name="pluginId")
    def plugin_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        """
        return pulumi.get(self, "plugin_id")

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

    @property
    @pulumi.getter(name="pluginProvider")
    def plugin_provider(self) -> Optional[pulumi.Input[builtins.str]]:
        return pulumi.get(self, "plugin_provider")

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

    @property
    @pulumi.getter(name="pluginProviderVersion")
    def plugin_provider_version(self) -> Optional[pulumi.Input[builtins.str]]:
        return pulumi.get(self, "plugin_provider_version")

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

    @property
    @pulumi.getter
    def schedulable(self) -> Optional[pulumi.Input[builtins.bool]]:
        return pulumi.get(self, "schedulable")

    @schedulable.setter
    def schedulable(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "schedulable", value)

    @property
    @pulumi.getter
    def secrets(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]]:
        """
        `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        """
        return pulumi.get(self, "secrets")

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

    @property
    @pulumi.getter(name="snapshotId")
    def snapshot_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        """
        return pulumi.get(self, "snapshot_id")

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

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

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

    @property
    @pulumi.getter(name="topologyRequest")
    def topology_request(self) -> Optional[pulumi.Input['CsiVolumeTopologyRequestArgs']]:
        """
        `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        """
        return pulumi.get(self, "topology_request")

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

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        `(string: <required>)` - The unique ID of the volume.
        """
        return pulumi.get(self, "volume_id")

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


class CsiVolume(pulumi.CustomResource):

    pulumi_type = "nomad:index/csiVolume:CsiVolume"

    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 capabilities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CsiVolumeCapabilityArgs', 'CsiVolumeCapabilityArgsDict']]]]] = None,
                 capacity_max: Optional[pulumi.Input[builtins.str]] = None,
                 capacity_min: Optional[pulumi.Input[builtins.str]] = None,
                 clone_id: Optional[pulumi.Input[builtins.str]] = None,
                 mount_options: Optional[pulumi.Input[Union['CsiVolumeMountOptionsArgs', 'CsiVolumeMountOptionsArgsDict']]] = None,
                 name: Optional[pulumi.Input[builtins.str]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 plugin_id: Optional[pulumi.Input[builtins.str]] = None,
                 secrets: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 snapshot_id: Optional[pulumi.Input[builtins.str]] = None,
                 topology_request: Optional[pulumi.Input[Union['CsiVolumeTopologyRequestArgs', 'CsiVolumeTopologyRequestArgsDict']]] = None,
                 volume_id: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        """
        Create a CsiVolume resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[Union['CsiVolumeCapabilityArgs', 'CsiVolumeCapabilityArgsDict']]]] capabilities: `(``Capability``: <required>)` - Options for validating the capability of a volume.
        :param pulumi.Input[builtins.str] capacity_max: `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] capacity_min: `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] clone_id: `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        :param pulumi.Input[Union['CsiVolumeMountOptionsArgs', 'CsiVolumeMountOptionsArgsDict']] mount_options: `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        :param pulumi.Input[builtins.str] name: `(string: <required>)` - The display name for the volume.
        :param pulumi.Input[builtins.str] namespace: `(string: "default")` - The namespace in which to register the volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] parameters: `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        :param pulumi.Input[builtins.str] plugin_id: `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] secrets: `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        :param pulumi.Input[builtins.str] snapshot_id: `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        :param pulumi.Input[Union['CsiVolumeTopologyRequestArgs', 'CsiVolumeTopologyRequestArgsDict']] topology_request: `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        :param pulumi.Input[builtins.str] volume_id: `(string: <required>)` - The unique ID of the volume.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: CsiVolumeArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Create a CsiVolume resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param CsiVolumeArgs 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(CsiVolumeArgs, 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,
                 capabilities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CsiVolumeCapabilityArgs', 'CsiVolumeCapabilityArgsDict']]]]] = None,
                 capacity_max: Optional[pulumi.Input[builtins.str]] = None,
                 capacity_min: Optional[pulumi.Input[builtins.str]] = None,
                 clone_id: Optional[pulumi.Input[builtins.str]] = None,
                 mount_options: Optional[pulumi.Input[Union['CsiVolumeMountOptionsArgs', 'CsiVolumeMountOptionsArgsDict']]] = None,
                 name: Optional[pulumi.Input[builtins.str]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 plugin_id: Optional[pulumi.Input[builtins.str]] = None,
                 secrets: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
                 snapshot_id: Optional[pulumi.Input[builtins.str]] = None,
                 topology_request: Optional[pulumi.Input[Union['CsiVolumeTopologyRequestArgs', 'CsiVolumeTopologyRequestArgsDict']]] = None,
                 volume_id: Optional[pulumi.Input[builtins.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__ = CsiVolumeArgs.__new__(CsiVolumeArgs)

            if capabilities is None and not opts.urn:
                raise TypeError("Missing required property 'capabilities'")
            __props__.__dict__["capabilities"] = capabilities
            __props__.__dict__["capacity_max"] = capacity_max
            __props__.__dict__["capacity_min"] = capacity_min
            __props__.__dict__["clone_id"] = clone_id
            __props__.__dict__["mount_options"] = mount_options
            __props__.__dict__["name"] = name
            __props__.__dict__["namespace"] = namespace
            __props__.__dict__["parameters"] = parameters
            if plugin_id is None and not opts.urn:
                raise TypeError("Missing required property 'plugin_id'")
            __props__.__dict__["plugin_id"] = plugin_id
            __props__.__dict__["secrets"] = None if secrets is None else pulumi.Output.secret(secrets)
            __props__.__dict__["snapshot_id"] = snapshot_id
            __props__.__dict__["topology_request"] = topology_request
            if volume_id is None and not opts.urn:
                raise TypeError("Missing required property 'volume_id'")
            __props__.__dict__["volume_id"] = volume_id
            __props__.__dict__["capacity"] = None
            __props__.__dict__["capacity_max_bytes"] = None
            __props__.__dict__["capacity_min_bytes"] = None
            __props__.__dict__["context"] = None
            __props__.__dict__["controller_required"] = None
            __props__.__dict__["controllers_expected"] = None
            __props__.__dict__["controllers_healthy"] = None
            __props__.__dict__["external_id"] = None
            __props__.__dict__["nodes_expected"] = None
            __props__.__dict__["nodes_healthy"] = None
            __props__.__dict__["plugin_provider"] = None
            __props__.__dict__["plugin_provider_version"] = None
            __props__.__dict__["schedulable"] = None
            __props__.__dict__["topologies"] = None
        secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["secrets"])
        opts = pulumi.ResourceOptions.merge(opts, secret_opts)
        super(CsiVolume, __self__).__init__(
            'nomad:index/csiVolume:CsiVolume',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            capabilities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CsiVolumeCapabilityArgs', 'CsiVolumeCapabilityArgsDict']]]]] = None,
            capacity: Optional[pulumi.Input[builtins.int]] = None,
            capacity_max: Optional[pulumi.Input[builtins.str]] = None,
            capacity_max_bytes: Optional[pulumi.Input[builtins.int]] = None,
            capacity_min: Optional[pulumi.Input[builtins.str]] = None,
            capacity_min_bytes: Optional[pulumi.Input[builtins.int]] = None,
            clone_id: Optional[pulumi.Input[builtins.str]] = None,
            context: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
            controller_required: Optional[pulumi.Input[builtins.bool]] = None,
            controllers_expected: Optional[pulumi.Input[builtins.int]] = None,
            controllers_healthy: Optional[pulumi.Input[builtins.int]] = None,
            external_id: Optional[pulumi.Input[builtins.str]] = None,
            mount_options: Optional[pulumi.Input[Union['CsiVolumeMountOptionsArgs', 'CsiVolumeMountOptionsArgsDict']]] = None,
            name: Optional[pulumi.Input[builtins.str]] = None,
            namespace: Optional[pulumi.Input[builtins.str]] = None,
            nodes_expected: Optional[pulumi.Input[builtins.int]] = None,
            nodes_healthy: Optional[pulumi.Input[builtins.int]] = None,
            parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
            plugin_id: Optional[pulumi.Input[builtins.str]] = None,
            plugin_provider: Optional[pulumi.Input[builtins.str]] = None,
            plugin_provider_version: Optional[pulumi.Input[builtins.str]] = None,
            schedulable: Optional[pulumi.Input[builtins.bool]] = None,
            secrets: Optional[pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]]] = None,
            snapshot_id: Optional[pulumi.Input[builtins.str]] = None,
            topologies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CsiVolumeTopologyArgs', 'CsiVolumeTopologyArgsDict']]]]] = None,
            topology_request: Optional[pulumi.Input[Union['CsiVolumeTopologyRequestArgs', 'CsiVolumeTopologyRequestArgsDict']]] = None,
            volume_id: Optional[pulumi.Input[builtins.str]] = None) -> 'CsiVolume':
        """
        Get an existing CsiVolume 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[Union['CsiVolumeCapabilityArgs', 'CsiVolumeCapabilityArgsDict']]]] capabilities: `(``Capability``: <required>)` - Options for validating the capability of a volume.
        :param pulumi.Input[builtins.str] capacity_max: `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] capacity_min: `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        :param pulumi.Input[builtins.str] clone_id: `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] context: The volume context provided by the storage provider
        :param pulumi.Input[builtins.str] external_id: The ID of the physical volume from the storage provider.
        :param pulumi.Input[Union['CsiVolumeMountOptionsArgs', 'CsiVolumeMountOptionsArgsDict']] mount_options: `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        :param pulumi.Input[builtins.str] name: `(string: <required>)` - The display name for the volume.
        :param pulumi.Input[builtins.str] namespace: `(string: "default")` - The namespace in which to register the volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] parameters: `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        :param pulumi.Input[builtins.str] plugin_id: `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        :param pulumi.Input[Mapping[str, pulumi.Input[builtins.str]]] secrets: `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        :param pulumi.Input[builtins.str] snapshot_id: `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        :param pulumi.Input[Union['CsiVolumeTopologyRequestArgs', 'CsiVolumeTopologyRequestArgsDict']] topology_request: `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        :param pulumi.Input[builtins.str] volume_id: `(string: <required>)` - The unique ID of the volume.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _CsiVolumeState.__new__(_CsiVolumeState)

        __props__.__dict__["capabilities"] = capabilities
        __props__.__dict__["capacity"] = capacity
        __props__.__dict__["capacity_max"] = capacity_max
        __props__.__dict__["capacity_max_bytes"] = capacity_max_bytes
        __props__.__dict__["capacity_min"] = capacity_min
        __props__.__dict__["capacity_min_bytes"] = capacity_min_bytes
        __props__.__dict__["clone_id"] = clone_id
        __props__.__dict__["context"] = context
        __props__.__dict__["controller_required"] = controller_required
        __props__.__dict__["controllers_expected"] = controllers_expected
        __props__.__dict__["controllers_healthy"] = controllers_healthy
        __props__.__dict__["external_id"] = external_id
        __props__.__dict__["mount_options"] = mount_options
        __props__.__dict__["name"] = name
        __props__.__dict__["namespace"] = namespace
        __props__.__dict__["nodes_expected"] = nodes_expected
        __props__.__dict__["nodes_healthy"] = nodes_healthy
        __props__.__dict__["parameters"] = parameters
        __props__.__dict__["plugin_id"] = plugin_id
        __props__.__dict__["plugin_provider"] = plugin_provider
        __props__.__dict__["plugin_provider_version"] = plugin_provider_version
        __props__.__dict__["schedulable"] = schedulable
        __props__.__dict__["secrets"] = secrets
        __props__.__dict__["snapshot_id"] = snapshot_id
        __props__.__dict__["topologies"] = topologies
        __props__.__dict__["topology_request"] = topology_request
        __props__.__dict__["volume_id"] = volume_id
        return CsiVolume(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def capabilities(self) -> pulumi.Output[Sequence['outputs.CsiVolumeCapability']]:
        """
        `(``Capability``: <required>)` - Options for validating the capability of a volume.
        """
        return pulumi.get(self, "capabilities")

    @property
    @pulumi.getter
    def capacity(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "capacity")

    @property
    @pulumi.getter(name="capacityMax")
    def capacity_max(self) -> pulumi.Output[Optional[builtins.str]]:
        """
        `(string: <optional>)` - Option to signal a maximum volume size. This may not be supported by all storage providers.
        """
        return pulumi.get(self, "capacity_max")

    @property
    @pulumi.getter(name="capacityMaxBytes")
    def capacity_max_bytes(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "capacity_max_bytes")

    @property
    @pulumi.getter(name="capacityMin")
    def capacity_min(self) -> pulumi.Output[Optional[builtins.str]]:
        """
        `(string: <optional>)` - Option to signal a minimum volume size. This may not be supported by all storage providers.
        """
        return pulumi.get(self, "capacity_min")

    @property
    @pulumi.getter(name="capacityMinBytes")
    def capacity_min_bytes(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "capacity_min_bytes")

    @property
    @pulumi.getter(name="cloneId")
    def clone_id(self) -> pulumi.Output[Optional[builtins.str]]:
        """
        `(string: <optional>)` - The external ID of an existing volume to restore. If ommited, the volume will be created from scratch. Conflicts with `snapshot_id`.
        """
        return pulumi.get(self, "clone_id")

    @property
    @pulumi.getter
    def context(self) -> pulumi.Output[Mapping[str, builtins.str]]:
        """
        The volume context provided by the storage provider
        """
        return pulumi.get(self, "context")

    @property
    @pulumi.getter(name="controllerRequired")
    def controller_required(self) -> pulumi.Output[builtins.bool]:
        return pulumi.get(self, "controller_required")

    @property
    @pulumi.getter(name="controllersExpected")
    def controllers_expected(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "controllers_expected")

    @property
    @pulumi.getter(name="controllersHealthy")
    def controllers_healthy(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "controllers_healthy")

    @property
    @pulumi.getter(name="externalId")
    def external_id(self) -> pulumi.Output[builtins.str]:
        """
        The ID of the physical volume from the storage provider.
        """
        return pulumi.get(self, "external_id")

    @property
    @pulumi.getter(name="mountOptions")
    def mount_options(self) -> pulumi.Output[Optional['outputs.CsiVolumeMountOptions']]:
        """
        `(block: optional)` Options for mounting `block-device` volumes without a pre-formatted file system.
        """
        return pulumi.get(self, "mount_options")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[builtins.str]:
        """
        `(string: <required>)` - The display name for the volume.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def namespace(self) -> pulumi.Output[Optional[builtins.str]]:
        """
        `(string: "default")` - The namespace in which to register the volume.
        """
        return pulumi.get(self, "namespace")

    @property
    @pulumi.getter(name="nodesExpected")
    def nodes_expected(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "nodes_expected")

    @property
    @pulumi.getter(name="nodesHealthy")
    def nodes_healthy(self) -> pulumi.Output[builtins.int]:
        return pulumi.get(self, "nodes_healthy")

    @property
    @pulumi.getter
    def parameters(self) -> pulumi.Output[Optional[Mapping[str, builtins.str]]]:
        """
        `(map[string]string: optional)` An optional key-value map of strings passed directly to the CSI plugin to configure the volume.
        """
        return pulumi.get(self, "parameters")

    @property
    @pulumi.getter(name="pluginId")
    def plugin_id(self) -> pulumi.Output[builtins.str]:
        """
        `(string: <required>)` - The ID of the Nomad plugin for registering this volume.
        """
        return pulumi.get(self, "plugin_id")

    @property
    @pulumi.getter(name="pluginProvider")
    def plugin_provider(self) -> pulumi.Output[builtins.str]:
        return pulumi.get(self, "plugin_provider")

    @property
    @pulumi.getter(name="pluginProviderVersion")
    def plugin_provider_version(self) -> pulumi.Output[builtins.str]:
        return pulumi.get(self, "plugin_provider_version")

    @property
    @pulumi.getter
    def schedulable(self) -> pulumi.Output[builtins.bool]:
        return pulumi.get(self, "schedulable")

    @property
    @pulumi.getter
    def secrets(self) -> pulumi.Output[Optional[Mapping[str, builtins.str]]]:
        """
        `(map[string]string: optional)` An optional key-value map of strings used as credentials for publishing and unpublishing volumes.
        """
        return pulumi.get(self, "secrets")

    @property
    @pulumi.getter(name="snapshotId")
    def snapshot_id(self) -> pulumi.Output[Optional[builtins.str]]:
        """
        `(string: <optional>)` - The external ID of a snapshot to restore. If ommited, the volume will be created from scratch. Conflicts with `clone_id`.
        """
        return pulumi.get(self, "snapshot_id")

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

    @property
    @pulumi.getter(name="topologyRequest")
    def topology_request(self) -> pulumi.Output[Optional['outputs.CsiVolumeTopologyRequest']]:
        """
        `(``TopologyRequest``: <optional>)` - Specify locations (region, zone, rack, etc.) where the provisioned volume is accessible from.
        """
        return pulumi.get(self, "topology_request")

    @property
    @pulumi.getter(name="volumeId")
    def volume_id(self) -> pulumi.Output[builtins.str]:
        """
        `(string: <required>)` - The unique ID of the volume.
        """
        return pulumi.get(self, "volume_id")

