# coding=utf-8
# *** WARNING: this file was generated by pulumigen. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

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 meta as _meta

__all__ = [
    'GroupVersionResourcePatchArgs',
    'GroupVersionResourcePatchArgsDict',
    'GroupVersionResourceArgs',
    'GroupVersionResourceArgsDict',
    'MigrationConditionArgs',
    'MigrationConditionArgsDict',
    'StorageVersionMigrationSpecPatchArgs',
    'StorageVersionMigrationSpecPatchArgsDict',
    'StorageVersionMigrationSpecArgs',
    'StorageVersionMigrationSpecArgsDict',
    'StorageVersionMigrationStatusArgs',
    'StorageVersionMigrationStatusArgsDict',
    'StorageVersionMigrationArgs',
    'StorageVersionMigrationArgsDict',
]

MYPY = False

if not MYPY:
    class GroupVersionResourcePatchArgsDict(TypedDict):
        """
        The names of the group, the version, and the resource.
        """
        group: NotRequired[pulumi.Input[str]]
        """
        The name of the group.
        """
        resource: NotRequired[pulumi.Input[str]]
        """
        The name of the resource.
        """
        version: NotRequired[pulumi.Input[str]]
        """
        The name of the version.
        """
elif False:
    GroupVersionResourcePatchArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GroupVersionResourcePatchArgs:
    def __init__(__self__, *,
                 group: Optional[pulumi.Input[str]] = None,
                 resource: Optional[pulumi.Input[str]] = None,
                 version: Optional[pulumi.Input[str]] = None):
        """
        The names of the group, the version, and the resource.
        :param pulumi.Input[str] group: The name of the group.
        :param pulumi.Input[str] resource: The name of the resource.
        :param pulumi.Input[str] version: The name of the version.
        """
        if group is not None:
            pulumi.set(__self__, "group", group)
        if resource is not None:
            pulumi.set(__self__, "resource", resource)
        if version is not None:
            pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def group(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the group.
        """
        return pulumi.get(self, "group")

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

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

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

    @property
    @pulumi.getter
    def version(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the version.
        """
        return pulumi.get(self, "version")

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


if not MYPY:
    class GroupVersionResourceArgsDict(TypedDict):
        """
        The names of the group, the version, and the resource.
        """
        group: NotRequired[pulumi.Input[str]]
        """
        The name of the group.
        """
        resource: NotRequired[pulumi.Input[str]]
        """
        The name of the resource.
        """
        version: NotRequired[pulumi.Input[str]]
        """
        The name of the version.
        """
elif False:
    GroupVersionResourceArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class GroupVersionResourceArgs:
    def __init__(__self__, *,
                 group: Optional[pulumi.Input[str]] = None,
                 resource: Optional[pulumi.Input[str]] = None,
                 version: Optional[pulumi.Input[str]] = None):
        """
        The names of the group, the version, and the resource.
        :param pulumi.Input[str] group: The name of the group.
        :param pulumi.Input[str] resource: The name of the resource.
        :param pulumi.Input[str] version: The name of the version.
        """
        if group is not None:
            pulumi.set(__self__, "group", group)
        if resource is not None:
            pulumi.set(__self__, "resource", resource)
        if version is not None:
            pulumi.set(__self__, "version", version)

    @property
    @pulumi.getter
    def group(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the group.
        """
        return pulumi.get(self, "group")

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

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

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

    @property
    @pulumi.getter
    def version(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the version.
        """
        return pulumi.get(self, "version")

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


if not MYPY:
    class MigrationConditionArgsDict(TypedDict):
        """
        Describes the state of a migration at a certain point.
        """
        status: pulumi.Input[str]
        """
        Status of the condition, one of True, False, Unknown.
        """
        type: pulumi.Input[str]
        """
        Type of the condition.
        """
        last_update_time: NotRequired[pulumi.Input[str]]
        """
        The last time this condition was updated.
        """
        message: NotRequired[pulumi.Input[str]]
        """
        A human readable message indicating details about the transition.
        """
        reason: NotRequired[pulumi.Input[str]]
        """
        The reason for the condition's last transition.
        """
elif False:
    MigrationConditionArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class MigrationConditionArgs:
    def __init__(__self__, *,
                 status: pulumi.Input[str],
                 type: pulumi.Input[str],
                 last_update_time: Optional[pulumi.Input[str]] = None,
                 message: Optional[pulumi.Input[str]] = None,
                 reason: Optional[pulumi.Input[str]] = None):
        """
        Describes the state of a migration at a certain point.
        :param pulumi.Input[str] status: Status of the condition, one of True, False, Unknown.
        :param pulumi.Input[str] type: Type of the condition.
        :param pulumi.Input[str] last_update_time: The last time this condition was updated.
        :param pulumi.Input[str] message: A human readable message indicating details about the transition.
        :param pulumi.Input[str] reason: The reason for the condition's last transition.
        """
        pulumi.set(__self__, "status", status)
        pulumi.set(__self__, "type", type)
        if last_update_time is not None:
            pulumi.set(__self__, "last_update_time", last_update_time)
        if message is not None:
            pulumi.set(__self__, "message", message)
        if reason is not None:
            pulumi.set(__self__, "reason", reason)

    @property
    @pulumi.getter
    def status(self) -> pulumi.Input[str]:
        """
        Status of the condition, one of True, False, Unknown.
        """
        return pulumi.get(self, "status")

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

    @property
    @pulumi.getter
    def type(self) -> pulumi.Input[str]:
        """
        Type of the condition.
        """
        return pulumi.get(self, "type")

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

    @property
    @pulumi.getter(name="lastUpdateTime")
    def last_update_time(self) -> Optional[pulumi.Input[str]]:
        """
        The last time this condition was updated.
        """
        return pulumi.get(self, "last_update_time")

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

    @property
    @pulumi.getter
    def message(self) -> Optional[pulumi.Input[str]]:
        """
        A human readable message indicating details about the transition.
        """
        return pulumi.get(self, "message")

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

    @property
    @pulumi.getter
    def reason(self) -> Optional[pulumi.Input[str]]:
        """
        The reason for the condition's last transition.
        """
        return pulumi.get(self, "reason")

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


if not MYPY:
    class StorageVersionMigrationSpecPatchArgsDict(TypedDict):
        """
        Spec of the storage version migration.
        """
        continue_token: NotRequired[pulumi.Input[str]]
        """
        The token used in the list options to get the next chunk of objects to migrate. When the .status.conditions indicates the migration is "Running", users can use this token to check the progress of the migration.
        """
        resource: NotRequired[pulumi.Input['GroupVersionResourcePatchArgsDict']]
        """
        The resource that is being migrated. The migrator sends requests to the endpoint serving the resource. Immutable.
        """
elif False:
    StorageVersionMigrationSpecPatchArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class StorageVersionMigrationSpecPatchArgs:
    def __init__(__self__, *,
                 continue_token: Optional[pulumi.Input[str]] = None,
                 resource: Optional[pulumi.Input['GroupVersionResourcePatchArgs']] = None):
        """
        Spec of the storage version migration.
        :param pulumi.Input[str] continue_token: The token used in the list options to get the next chunk of objects to migrate. When the .status.conditions indicates the migration is "Running", users can use this token to check the progress of the migration.
        :param pulumi.Input['GroupVersionResourcePatchArgs'] resource: The resource that is being migrated. The migrator sends requests to the endpoint serving the resource. Immutable.
        """
        if continue_token is not None:
            pulumi.set(__self__, "continue_token", continue_token)
        if resource is not None:
            pulumi.set(__self__, "resource", resource)

    @property
    @pulumi.getter(name="continueToken")
    def continue_token(self) -> Optional[pulumi.Input[str]]:
        """
        The token used in the list options to get the next chunk of objects to migrate. When the .status.conditions indicates the migration is "Running", users can use this token to check the progress of the migration.
        """
        return pulumi.get(self, "continue_token")

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

    @property
    @pulumi.getter
    def resource(self) -> Optional[pulumi.Input['GroupVersionResourcePatchArgs']]:
        """
        The resource that is being migrated. The migrator sends requests to the endpoint serving the resource. Immutable.
        """
        return pulumi.get(self, "resource")

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


if not MYPY:
    class StorageVersionMigrationSpecArgsDict(TypedDict):
        """
        Spec of the storage version migration.
        """
        resource: pulumi.Input['GroupVersionResourceArgsDict']
        """
        The resource that is being migrated. The migrator sends requests to the endpoint serving the resource. Immutable.
        """
        continue_token: NotRequired[pulumi.Input[str]]
        """
        The token used in the list options to get the next chunk of objects to migrate. When the .status.conditions indicates the migration is "Running", users can use this token to check the progress of the migration.
        """
elif False:
    StorageVersionMigrationSpecArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class StorageVersionMigrationSpecArgs:
    def __init__(__self__, *,
                 resource: pulumi.Input['GroupVersionResourceArgs'],
                 continue_token: Optional[pulumi.Input[str]] = None):
        """
        Spec of the storage version migration.
        :param pulumi.Input['GroupVersionResourceArgs'] resource: The resource that is being migrated. The migrator sends requests to the endpoint serving the resource. Immutable.
        :param pulumi.Input[str] continue_token: The token used in the list options to get the next chunk of objects to migrate. When the .status.conditions indicates the migration is "Running", users can use this token to check the progress of the migration.
        """
        pulumi.set(__self__, "resource", resource)
        if continue_token is not None:
            pulumi.set(__self__, "continue_token", continue_token)

    @property
    @pulumi.getter
    def resource(self) -> pulumi.Input['GroupVersionResourceArgs']:
        """
        The resource that is being migrated. The migrator sends requests to the endpoint serving the resource. Immutable.
        """
        return pulumi.get(self, "resource")

    @resource.setter
    def resource(self, value: pulumi.Input['GroupVersionResourceArgs']):
        pulumi.set(self, "resource", value)

    @property
    @pulumi.getter(name="continueToken")
    def continue_token(self) -> Optional[pulumi.Input[str]]:
        """
        The token used in the list options to get the next chunk of objects to migrate. When the .status.conditions indicates the migration is "Running", users can use this token to check the progress of the migration.
        """
        return pulumi.get(self, "continue_token")

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


if not MYPY:
    class StorageVersionMigrationStatusArgsDict(TypedDict):
        """
        Status of the storage version migration.
        """
        conditions: NotRequired[pulumi.Input[Sequence[pulumi.Input['MigrationConditionArgsDict']]]]
        """
        The latest available observations of the migration's current state.
        """
        resource_version: NotRequired[pulumi.Input[str]]
        """
        ResourceVersion to compare with the GC cache for performing the migration. This is the current resource version of given group, version and resource when kube-controller-manager first observes this StorageVersionMigration resource.
        """
elif False:
    StorageVersionMigrationStatusArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class StorageVersionMigrationStatusArgs:
    def __init__(__self__, *,
                 conditions: Optional[pulumi.Input[Sequence[pulumi.Input['MigrationConditionArgs']]]] = None,
                 resource_version: Optional[pulumi.Input[str]] = None):
        """
        Status of the storage version migration.
        :param pulumi.Input[Sequence[pulumi.Input['MigrationConditionArgs']]] conditions: The latest available observations of the migration's current state.
        :param pulumi.Input[str] resource_version: ResourceVersion to compare with the GC cache for performing the migration. This is the current resource version of given group, version and resource when kube-controller-manager first observes this StorageVersionMigration resource.
        """
        if conditions is not None:
            pulumi.set(__self__, "conditions", conditions)
        if resource_version is not None:
            pulumi.set(__self__, "resource_version", resource_version)

    @property
    @pulumi.getter
    def conditions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MigrationConditionArgs']]]]:
        """
        The latest available observations of the migration's current state.
        """
        return pulumi.get(self, "conditions")

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

    @property
    @pulumi.getter(name="resourceVersion")
    def resource_version(self) -> Optional[pulumi.Input[str]]:
        """
        ResourceVersion to compare with the GC cache for performing the migration. This is the current resource version of given group, version and resource when kube-controller-manager first observes this StorageVersionMigration resource.
        """
        return pulumi.get(self, "resource_version")

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


if not MYPY:
    class StorageVersionMigrationArgsDict(TypedDict):
        """
        StorageVersionMigration represents a migration of stored data to the latest storage version.
        """
        api_version: NotRequired[pulumi.Input[str]]
        """
        APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
        """
        kind: NotRequired[pulumi.Input[str]]
        """
        Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
        """
        metadata: NotRequired[pulumi.Input['_meta.v1.ObjectMetaArgsDict']]
        """
        Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
        """
        spec: NotRequired[pulumi.Input['StorageVersionMigrationSpecArgsDict']]
        """
        Specification of the migration.
        """
        status: NotRequired[pulumi.Input['StorageVersionMigrationStatusArgsDict']]
        """
        Status of the migration.
        """
elif False:
    StorageVersionMigrationArgsDict: TypeAlias = Mapping[str, Any]

@pulumi.input_type
class StorageVersionMigrationArgs:
    def __init__(__self__, *,
                 api_version: Optional[pulumi.Input[str]] = None,
                 kind: Optional[pulumi.Input[str]] = None,
                 metadata: Optional[pulumi.Input['_meta.v1.ObjectMetaArgs']] = None,
                 spec: Optional[pulumi.Input['StorageVersionMigrationSpecArgs']] = None,
                 status: Optional[pulumi.Input['StorageVersionMigrationStatusArgs']] = None):
        """
        StorageVersionMigration represents a migration of stored data to the latest storage version.
        :param pulumi.Input[str] api_version: APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
        :param pulumi.Input[str] kind: Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
        :param pulumi.Input['_meta.v1.ObjectMetaArgs'] metadata: Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
        :param pulumi.Input['StorageVersionMigrationSpecArgs'] spec: Specification of the migration.
        :param pulumi.Input['StorageVersionMigrationStatusArgs'] status: Status of the migration.
        """
        if api_version is not None:
            pulumi.set(__self__, "api_version", 'storagemigration.k8s.io/v1alpha1')
        if kind is not None:
            pulumi.set(__self__, "kind", 'StorageVersionMigration')
        if metadata is not None:
            pulumi.set(__self__, "metadata", metadata)
        if spec is not None:
            pulumi.set(__self__, "spec", spec)
        if status is not None:
            pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter(name="apiVersion")
    def api_version(self) -> Optional[pulumi.Input[str]]:
        """
        APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
        """
        return pulumi.get(self, "api_version")

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

    @property
    @pulumi.getter
    def kind(self) -> Optional[pulumi.Input[str]]:
        """
        Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
        """
        return pulumi.get(self, "kind")

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

    @property
    @pulumi.getter
    def metadata(self) -> Optional[pulumi.Input['_meta.v1.ObjectMetaArgs']]:
        """
        Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
        """
        return pulumi.get(self, "metadata")

    @metadata.setter
    def metadata(self, value: Optional[pulumi.Input['_meta.v1.ObjectMetaArgs']]):
        pulumi.set(self, "metadata", value)

    @property
    @pulumi.getter
    def spec(self) -> Optional[pulumi.Input['StorageVersionMigrationSpecArgs']]:
        """
        Specification of the migration.
        """
        return pulumi.get(self, "spec")

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

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input['StorageVersionMigrationStatusArgs']]:
        """
        Status of the migration.
        """
        return pulumi.get(self, "status")

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


