"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import builtins
import collections.abc
import google.protobuf.descriptor
import google.protobuf.duration_pb2
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import google.protobuf.timestamp_pb2
import prodvana.proto.prodvana.common_config.env_pb2
import prodvana.proto.prodvana.common_config.kubernetes_config_pb2
import prodvana.proto.prodvana.common_config.parameters_pb2
import prodvana.proto.prodvana.common_config.program_pb2
import prodvana.proto.prodvana.common_config.rollback_pb2
import prodvana.proto.prodvana.common_config.task_pb2
import prodvana.proto.prodvana.labels.labels_pb2
import prodvana.proto.prodvana.runtimes.extensions.fetch_pb2
import prodvana.proto.prodvana.runtimes.runtimes_config_pb2
import prodvana.proto.prodvana.volumes.volumes_pb2
import sys
import typing

if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

class _ClusterType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ClusterTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ClusterType.ValueType], builtins.type):  # noqa: F821
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    UNKNOWN: _ClusterType.ValueType  # 0
    K8S: _ClusterType.ValueType  # 1
    ECS: _ClusterType.ValueType  # 2
    """TODO(naphat) remove, this is legacy ecs implementation not based on runtime extension"""
    FAKE: _ClusterType.ValueType  # 3
    EXTENSION: _ClusterType.ValueType  # 4
    TERRAFORM_RUNNER: _ClusterType.ValueType  # 5
    PULUMI_RUNNER: _ClusterType.ValueType  # 6
    AWS_ECS: _ClusterType.ValueType  # 7
    GOOGLE_CLOUD_RUN: _ClusterType.ValueType  # 8
    FLY: _ClusterType.ValueType  # 9

class ClusterType(_ClusterType, metaclass=_ClusterTypeEnumTypeWrapper): ...

UNKNOWN: ClusterType.ValueType  # 0
K8S: ClusterType.ValueType  # 1
ECS: ClusterType.ValueType  # 2
"""TODO(naphat) remove, this is legacy ecs implementation not based on runtime extension"""
FAKE: ClusterType.ValueType  # 3
EXTENSION: ClusterType.ValueType  # 4
TERRAFORM_RUNNER: ClusterType.ValueType  # 5
PULUMI_RUNNER: ClusterType.ValueType  # 6
AWS_ECS: ClusterType.ValueType  # 7
GOOGLE_CLOUD_RUN: ClusterType.ValueType  # 8
FLY: ClusterType.ValueType  # 9
global___ClusterType = ClusterType

class _ExtensionType:
    ValueType = typing.NewType("ValueType", builtins.int)
    V: typing_extensions.TypeAlias = ValueType

class _ExtensionTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ExtensionType.ValueType], builtins.type):  # noqa: F821
    DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
    GENERIC: _ExtensionType.ValueType  # 0
    TERRAFORM: _ExtensionType.ValueType  # 1
    PULUMI: _ExtensionType.ValueType  # 2
    AWS_ECS_EXTENSION: _ExtensionType.ValueType  # 3
    GOOGLE_CLOUD_RUN_EXTENSION: _ExtensionType.ValueType  # 4
    FLY_EXTENSION: _ExtensionType.ValueType  # 5

class ExtensionType(_ExtensionType, metaclass=_ExtensionTypeEnumTypeWrapper): ...

GENERIC: ExtensionType.ValueType  # 0
TERRAFORM: ExtensionType.ValueType  # 1
PULUMI: ExtensionType.ValueType  # 2
AWS_ECS_EXTENSION: ExtensionType.ValueType  # 3
GOOGLE_CLOUD_RUN_EXTENSION: ExtensionType.ValueType  # 4
FLY_EXTENSION: ExtensionType.ValueType  # 5
global___ExtensionType = ExtensionType

class ClusterAuth(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class ECSAuth(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        ACCESS_KEY_FIELD_NUMBER: builtins.int
        SECRET_KEY_FIELD_NUMBER: builtins.int
        REGION_FIELD_NUMBER: builtins.int
        ASSUME_ROLE_ARN_FIELD_NUMBER: builtins.int
        CLUSTER_ARN_FIELD_NUMBER: builtins.int
        access_key: builtins.str
        secret_key: builtins.str
        region: builtins.str
        assume_role_arn: builtins.str
        cluster_arn: builtins.str
        def __init__(
            self,
            *,
            access_key: builtins.str = ...,
            secret_key: builtins.str = ...,
            region: builtins.str = ...,
            assume_role_arn: builtins.str = ...,
            cluster_arn: builtins.str = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["access_key", b"access_key", "assume_role_arn", b"assume_role_arn", "cluster_arn", b"cluster_arn", "region", b"region", "secret_key", b"secret_key"]) -> None: ...

    class K8sAuth(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        class AgentEnvEntry(google.protobuf.message.Message):
            DESCRIPTOR: google.protobuf.descriptor.Descriptor

            KEY_FIELD_NUMBER: builtins.int
            VALUE_FIELD_NUMBER: builtins.int
            key: builtins.str
            value: builtins.str
            def __init__(
                self,
                *,
                key: builtins.str = ...,
                value: builtins.str = ...,
            ) -> None: ...
            def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

        AGENT_ENV_FIELD_NUMBER: builtins.int
        AGENT_EXTERNALLY_MANAGED_FIELD_NUMBER: builtins.int
        @property
        def agent_env(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ...
        agent_externally_managed: builtins.bool
        """The Prodvana agent lifecycle is handled by the user -- Prodvana will not install or update the agent."""
        def __init__(
            self,
            *,
            agent_env: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
            agent_externally_managed: builtins.bool = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["agent_env", b"agent_env", "agent_externally_managed", b"agent_externally_managed"]) -> None: ...

    ECS_FIELD_NUMBER: builtins.int
    K8S_FIELD_NUMBER: builtins.int
    @property
    def ecs(self) -> global___ClusterAuth.ECSAuth: ...
    @property
    def k8s(self) -> global___ClusterAuth.K8sAuth: ...
    def __init__(
        self,
        *,
        ecs: global___ClusterAuth.ECSAuth | None = ...,
        k8s: global___ClusterAuth.K8sAuth | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["auth_oneof", b"auth_oneof", "ecs", b"ecs", "k8s", b"k8s"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["auth_oneof", b"auth_oneof", "ecs", b"ecs", "k8s", b"k8s"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["auth_oneof", b"auth_oneof"]) -> typing_extensions.Literal["ecs", "k8s"] | None: ...

global___ClusterAuth = ClusterAuth

class Cluster(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    NAME_FIELD_NUMBER: builtins.int
    CLUSTER_ID_FIELD_NUMBER: builtins.int
    AUTH_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    CONFIG_FIELD_NUMBER: builtins.int
    LAST_HEARTBEAT_TIMESTAMP_FIELD_NUMBER: builtins.int
    name: builtins.str
    cluster_id: builtins.str
    @property
    def auth(self) -> global___ClusterAuth: ...
    type: global___ClusterType.ValueType
    @property
    def config(self) -> global___ClusterConfig: ...
    @property
    def last_heartbeat_timestamp(self) -> google.protobuf.timestamp_pb2.Timestamp: ...
    def __init__(
        self,
        *,
        name: builtins.str = ...,
        cluster_id: builtins.str = ...,
        auth: global___ClusterAuth | None = ...,
        type: global___ClusterType.ValueType = ...,
        config: global___ClusterConfig | None = ...,
        last_heartbeat_timestamp: google.protobuf.timestamp_pb2.Timestamp | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["auth", b"auth", "config", b"config", "last_heartbeat_timestamp", b"last_heartbeat_timestamp"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["auth", b"auth", "cluster_id", b"cluster_id", "config", b"config", "last_heartbeat_timestamp", b"last_heartbeat_timestamp", "name", b"name", "type", b"type"]) -> None: ...

global___Cluster = Cluster

class FakeClusterConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class CrashingProgramPatterns(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        IMAGE_REGEX_FIELD_NUMBER: builtins.int
        CMD_REGEX_FIELD_NUMBER: builtins.int
        LOG_OUTPUT_FIELD_NUMBER: builtins.int
        image_regex: builtins.str
        cmd_regex: builtins.str
        log_output: builtins.str
        def __init__(
            self,
            *,
            image_regex: builtins.str = ...,
            cmd_regex: builtins.str = ...,
            log_output: builtins.str = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["cmd_regex", b"cmd_regex", "image_regex", b"image_regex", "log_output", b"log_output"]) -> None: ...

    CRASHING_PROGRAMS_FIELD_NUMBER: builtins.int
    @property
    def crashing_programs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___FakeClusterConfig.CrashingProgramPatterns]: ...
    def __init__(
        self,
        *,
        crashing_programs: collections.abc.Iterable[global___FakeClusterConfig.CrashingProgramPatterns] | None = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal["crashing_programs", b"crashing_programs"]) -> None: ...

global___FakeClusterConfig = FakeClusterConfig

class RetryPolicy(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    BASE_INTERVAL_FIELD_NUMBER: builtins.int
    MAX_INTERVAL_FIELD_NUMBER: builtins.int
    MAX_ATTEMPTS_FIELD_NUMBER: builtins.int
    @property
    def base_interval(self) -> google.protobuf.duration_pb2.Duration: ...
    @property
    def max_interval(self) -> google.protobuf.duration_pb2.Duration: ...
    max_attempts: builtins.int
    """<= 0 means no limit on retries"""
    def __init__(
        self,
        *,
        base_interval: google.protobuf.duration_pb2.Duration | None = ...,
        max_interval: google.protobuf.duration_pb2.Duration | None = ...,
        max_attempts: builtins.int = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["base_interval", b"base_interval", "max_interval", b"max_interval"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["base_interval", b"base_interval", "max_attempts", b"max_attempts", "max_interval", b"max_interval"]) -> None: ...

global___RetryPolicy = RetryPolicy

class ExtensionFetchCommand(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class EnvEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> prodvana.proto.prodvana.common_config.env_pb2.EnvValue: ...
        def __init__(
            self,
            *,
            key: builtins.str = ...,
            value: prodvana.proto.prodvana.common_config.env_pb2.EnvValue | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

    TASK_CONFIG_FIELD_NUMBER: builtins.int
    KUBERNETES_CONFIG_FIELD_NUMBER: builtins.int
    POLL_INTERVAL_FIELD_NUMBER: builtins.int
    STEADY_STATE_POLL_INTERVAL_FIELD_NUMBER: builtins.int
    TIMEOUT_FIELD_NUMBER: builtins.int
    RETRY_POLICY_FIELD_NUMBER: builtins.int
    ENV_FIELD_NUMBER: builtins.int
    FETCH_MODE_FIELD_NUMBER: builtins.int
    @property
    def task_config(self) -> prodvana.proto.prodvana.common_config.task_pb2.TaskConfig: ...
    @property
    def kubernetes_config(self) -> prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig: ...
    @property
    def poll_interval(self) -> google.protobuf.duration_pb2.Duration:
        """customize intervals instead of using Prodvana default
        only used for fetch
        how often to run command after it succeeds
        """
    @property
    def steady_state_poll_interval(self) -> google.protobuf.duration_pb2.Duration:
        """how often to fetch when in steady state (after the extension has converged)"""
    @property
    def timeout(self) -> google.protobuf.duration_pb2.Duration:
        """deprecated, not used"""
    @property
    def retry_policy(self) -> global___RetryPolicy:
        """retry policy for unexpected failures (this means exits other than 0 or 2 when fetch_mode = EXIT_CODE, or other than 0 for STRUCTURED_OUTPUT).
        if not set, regular, non-steady-state poll interval is used for fetches.
        """
    @property
    def env(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue]:
        """optional env variables to inject and override from exec_config"""
    fetch_mode: prodvana.proto.prodvana.runtimes.extensions.fetch_pb2.FetchMode.ValueType
    """how to interpret the output of the command"""
    def __init__(
        self,
        *,
        task_config: prodvana.proto.prodvana.common_config.task_pb2.TaskConfig | None = ...,
        kubernetes_config: prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig | None = ...,
        poll_interval: google.protobuf.duration_pb2.Duration | None = ...,
        steady_state_poll_interval: google.protobuf.duration_pb2.Duration | None = ...,
        timeout: google.protobuf.duration_pb2.Duration | None = ...,
        retry_policy: global___RetryPolicy | None = ...,
        env: collections.abc.Mapping[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue] | None = ...,
        fetch_mode: prodvana.proto.prodvana.runtimes.extensions.fetch_pb2.FetchMode.ValueType = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "poll_interval", b"poll_interval", "retry_policy", b"retry_policy", "steady_state_poll_interval", b"steady_state_poll_interval", "task_config", b"task_config", "timeout", b"timeout"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["env", b"env", "exec_config", b"exec_config", "fetch_mode", b"fetch_mode", "kubernetes_config", b"kubernetes_config", "poll_interval", b"poll_interval", "retry_policy", b"retry_policy", "steady_state_poll_interval", b"steady_state_poll_interval", "task_config", b"task_config", "timeout", b"timeout"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["exec_config", b"exec_config"]) -> typing_extensions.Literal["task_config", "kubernetes_config"] | None: ...

global___ExtensionFetchCommand = ExtensionFetchCommand

class ExtensionGetInfoCommand(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class EnvEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> prodvana.proto.prodvana.common_config.env_pb2.EnvValue: ...
        def __init__(
            self,
            *,
            key: builtins.str = ...,
            value: prodvana.proto.prodvana.common_config.env_pb2.EnvValue | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

    TASK_CONFIG_FIELD_NUMBER: builtins.int
    KUBERNETES_CONFIG_FIELD_NUMBER: builtins.int
    POLL_INTERVAL_FIELD_NUMBER: builtins.int
    RETRY_POLICY_FIELD_NUMBER: builtins.int
    ENV_FIELD_NUMBER: builtins.int
    TEST_ONLY_DO_NOT_REQUIRE_PVN_WRAPPER_FIELD_NUMBER: builtins.int
    @property
    def task_config(self) -> prodvana.proto.prodvana.common_config.task_pb2.TaskConfig: ...
    @property
    def kubernetes_config(self) -> prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig: ...
    @property
    def poll_interval(self) -> google.protobuf.duration_pb2.Duration:
        """customize intervals instead of using Prodvana default
        defaults to 5 minutes
        """
    @property
    def retry_policy(self) -> global___RetryPolicy:
        """retry policy for unexpected failures.
        defaults to fast retrying after 30s then backing off to 10 minutes
        """
    @property
    def env(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue]:
        """optional env variables to inject and override from exec_config"""
    test_only_do_not_require_pvn_wrapper: builtins.bool
    """exposed for internal testing. do not set"""
    def __init__(
        self,
        *,
        task_config: prodvana.proto.prodvana.common_config.task_pb2.TaskConfig | None = ...,
        kubernetes_config: prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig | None = ...,
        poll_interval: google.protobuf.duration_pb2.Duration | None = ...,
        retry_policy: global___RetryPolicy | None = ...,
        env: collections.abc.Mapping[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue] | None = ...,
        test_only_do_not_require_pvn_wrapper: builtins.bool = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "poll_interval", b"poll_interval", "retry_policy", b"retry_policy", "task_config", b"task_config"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["env", b"env", "exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "poll_interval", b"poll_interval", "retry_policy", b"retry_policy", "task_config", b"task_config", "test_only_do_not_require_pvn_wrapper", b"test_only_do_not_require_pvn_wrapper"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["exec_config", b"exec_config"]) -> typing_extensions.Literal["task_config", "kubernetes_config"] | None: ...

global___ExtensionGetInfoCommand = ExtensionGetInfoCommand

class ExtensionApplyCommand(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class EnvEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> prodvana.proto.prodvana.common_config.env_pb2.EnvValue: ...
        def __init__(
            self,
            *,
            key: builtins.str = ...,
            value: prodvana.proto.prodvana.common_config.env_pb2.EnvValue | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

    TASK_CONFIG_FIELD_NUMBER: builtins.int
    KUBERNETES_CONFIG_FIELD_NUMBER: builtins.int
    TIMEOUT_FIELD_NUMBER: builtins.int
    ENV_FIELD_NUMBER: builtins.int
    RETRY_POLICY_FIELD_NUMBER: builtins.int
    RETRYABLE_EXIT_CODES_FIELD_NUMBER: builtins.int
    MAX_CONCURRENCY_FIELD_NUMBER: builtins.int
    @property
    def task_config(self) -> prodvana.proto.prodvana.common_config.task_pb2.TaskConfig: ...
    @property
    def kubernetes_config(self) -> prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig: ...
    @property
    def timeout(self) -> google.protobuf.duration_pb2.Duration:
        """deprecated, not used"""
    @property
    def env(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue]:
        """optional env variables to inject and override from exec_config"""
    @property
    def retry_policy(self) -> global___RetryPolicy:
        """used in conjunction with retryable_exit_codes, defaults to the convergence grace period"""
    @property
    def retryable_exit_codes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """if set and the apply command returns these exit codes, retry the command without marking the result as failing."""
    max_concurrency: builtins.int
    """optional, if set, do not run more than this many apply commands concurrently"""
    def __init__(
        self,
        *,
        task_config: prodvana.proto.prodvana.common_config.task_pb2.TaskConfig | None = ...,
        kubernetes_config: prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig | None = ...,
        timeout: google.protobuf.duration_pb2.Duration | None = ...,
        env: collections.abc.Mapping[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue] | None = ...,
        retry_policy: global___RetryPolicy | None = ...,
        retryable_exit_codes: collections.abc.Iterable[builtins.int] | None = ...,
        max_concurrency: builtins.int = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "retry_policy", b"retry_policy", "task_config", b"task_config", "timeout", b"timeout"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["env", b"env", "exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "max_concurrency", b"max_concurrency", "retry_policy", b"retry_policy", "retryable_exit_codes", b"retryable_exit_codes", "task_config", b"task_config", "timeout", b"timeout"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["exec_config", b"exec_config"]) -> typing_extensions.Literal["task_config", "kubernetes_config"] | None: ...

global___ExtensionApplyCommand = ExtensionApplyCommand

class ExtensionClusterConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    APPLY_FIELD_NUMBER: builtins.int
    FETCH_FIELD_NUMBER: builtins.int
    DEBUG_FIELD_NUMBER: builtins.int
    GET_INFO_FIELD_NUMBER: builtins.int
    PARAMETERS_FIELD_NUMBER: builtins.int
    PROXY_RUNTIME_FIELD_NUMBER: builtins.int
    TYPE_FIELD_NUMBER: builtins.int
    REQUIRE_APPROVAL_BEFORE_APPLY_FIELD_NUMBER: builtins.int
    CONVERGENCE_GRACE_PERIOD_FIELD_NUMBER: builtins.int
    @property
    def apply(self) -> global___ExtensionApplyCommand: ...
    @property
    def fetch(self) -> global___ExtensionFetchCommand: ...
    @property
    def debug(self) -> global___ExtensionGetInfoCommand:
        """deprecated, set this as get_info instead"""
    @property
    def get_info(self) -> global___ExtensionGetInfoCommand: ...
    @property
    def parameters(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[prodvana.proto.prodvana.common_config.parameters_pb2.ParameterDefinition]: ...
    @property
    def proxy_runtime(self) -> prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig: ...
    type: global___ExtensionType.ValueType
    require_approval_before_apply: builtins.bool
    """Apply is potentially dangerous - require approval before each apply"""
    @property
    def convergence_grace_period(self) -> google.protobuf.duration_pb2.Duration:
        """How long after apply ran the first time should it be restarted if the service still has not converged.
        This duration is computed from the *start* of apply run.
        Defaults to 10m.
        next tag: 10
        """
    def __init__(
        self,
        *,
        apply: global___ExtensionApplyCommand | None = ...,
        fetch: global___ExtensionFetchCommand | None = ...,
        debug: global___ExtensionGetInfoCommand | None = ...,
        get_info: global___ExtensionGetInfoCommand | None = ...,
        parameters: collections.abc.Iterable[prodvana.proto.prodvana.common_config.parameters_pb2.ParameterDefinition] | None = ...,
        proxy_runtime: prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig | None = ...,
        type: global___ExtensionType.ValueType = ...,
        require_approval_before_apply: builtins.bool = ...,
        convergence_grace_period: google.protobuf.duration_pb2.Duration | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["apply", b"apply", "convergence_grace_period", b"convergence_grace_period", "debug", b"debug", "fetch", b"fetch", "get_info", b"get_info", "proxy_runtime", b"proxy_runtime"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["apply", b"apply", "convergence_grace_period", b"convergence_grace_period", "debug", b"debug", "fetch", b"fetch", "get_info", b"get_info", "parameters", b"parameters", "proxy_runtime", b"proxy_runtime", "require_approval_before_apply", b"require_approval_before_apply", "type", b"type"]) -> None: ...

global___ExtensionClusterConfig = ExtensionClusterConfig

class CompiledExtensionCommand(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class CompiledExtensionCommandExec(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        TASK_CONFIG_FIELD_NUMBER: builtins.int
        KUBERNETES_CONFIG_FIELD_NUMBER: builtins.int
        @property
        def task_config(self) -> prodvana.proto.prodvana.common_config.task_pb2.TaskConfig: ...
        @property
        def kubernetes_config(self) -> prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig: ...
        def __init__(
            self,
            *,
            task_config: prodvana.proto.prodvana.common_config.task_pb2.TaskConfig | None = ...,
            kubernetes_config: prodvana.proto.prodvana.common_config.kubernetes_config_pb2.KubernetesConfig | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "task_config", b"task_config"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["exec_config", b"exec_config", "kubernetes_config", b"kubernetes_config", "task_config", b"task_config"]) -> None: ...
        def WhichOneof(self, oneof_group: typing_extensions.Literal["exec_config", b"exec_config"]) -> typing_extensions.Literal["task_config", "kubernetes_config"] | None: ...

    class EnvEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> prodvana.proto.prodvana.common_config.env_pb2.EnvValue: ...
        def __init__(
            self,
            *,
            key: builtins.str = ...,
            value: prodvana.proto.prodvana.common_config.env_pb2.EnvValue | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

    NAME_PREFIX_FIELD_NUMBER: builtins.int
    COMMAND_FIELD_NUMBER: builtins.int
    RUNTIME_EXECUTION_FIELD_NUMBER: builtins.int
    ENV_FIELD_NUMBER: builtins.int
    name_prefix: builtins.str
    @property
    def command(self) -> global___CompiledExtensionCommand.CompiledExtensionCommandExec:
        """weird nesting for compatibility reasons, from before fetch and apply definitions were split"""
    @property
    def runtime_execution(self) -> prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig: ...
    @property
    def env(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue]: ...
    def __init__(
        self,
        *,
        name_prefix: builtins.str = ...,
        command: global___CompiledExtensionCommand.CompiledExtensionCommandExec | None = ...,
        runtime_execution: prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig | None = ...,
        env: collections.abc.Mapping[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["command", b"command", "runtime_execution", b"runtime_execution"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["command", b"command", "env", b"env", "name_prefix", b"name_prefix", "runtime_execution", b"runtime_execution"]) -> None: ...

global___CompiledExtensionCommand = CompiledExtensionCommand

class IacRunnerCommand(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    CMD_FIELD_NUMBER: builtins.int
    cmd: builtins.str
    def __init__(
        self,
        *,
        cmd: builtins.str = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal["cmd", b"cmd"]) -> None: ...

global___IacRunnerCommand = IacRunnerCommand

class TerraformRunnerConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class EnvEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.str
        @property
        def value(self) -> prodvana.proto.prodvana.common_config.env_pb2.EnvValue: ...
        def __init__(
            self,
            *,
            key: builtins.str = ...,
            value: prodvana.proto.prodvana.common_config.env_pb2.EnvValue | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

    PROXY_RUNTIME_FIELD_NUMBER: builtins.int
    ENV_FIELD_NUMBER: builtins.int
    VOLUMES_FIELD_NUMBER: builtins.int
    PRE_RUN_FIELD_NUMBER: builtins.int
    POLL_INTERVAL_FIELD_NUMBER: builtins.int
    STEADY_STATE_POLL_INTERVAL_FIELD_NUMBER: builtins.int
    REQUIRE_APPROVAL_BEFORE_APPLY_FIELD_NUMBER: builtins.int
    CONVERGENCE_GRACE_PERIOD_FIELD_NUMBER: builtins.int
    FETCH_RETRY_POLICY_FIELD_NUMBER: builtins.int
    APPLY_RETRY_POLICY_FIELD_NUMBER: builtins.int
    DISABLE_DRIFT_DETECTION_FIELD_NUMBER: builtins.int
    TASK_RESOURCES_FIELD_NUMBER: builtins.int
    SERVICE_ACCOUNT_FIELD_NUMBER: builtins.int
    @property
    def proxy_runtime(self) -> prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig: ...
    @property
    def env(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue]:
        """optional env variables to pass to terraform commands, can be useful for passing secrets"""
    @property
    def volumes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[prodvana.proto.prodvana.volumes.volumes_pb2.Volume]:
        """optional volumes to mount into terraform containers"""
    @property
    def pre_run(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___IacRunnerCommand]:
        """commands that must run before terraform can run, e.g. gcloud auth login"""
    @property
    def poll_interval(self) -> google.protobuf.duration_pb2.Duration:
        """Poll interval for terraform plan when not converged, defaults to 5 minutes. Polling takes a lock on terraform state file, so increase this if you run terraform plan locally often."""
    @property
    def steady_state_poll_interval(self) -> google.protobuf.duration_pb2.Duration:
        """Poll interval for terraform plan in steady state (after it has converged), defaults to 1 hour. During steady state, polling is used for drift detection.
        This is the min duration of time for which drift not being detected is OK.
        """
    require_approval_before_apply: builtins.bool
    """Require approval before every apply operation - this is on top of any release channel-level approvals."""
    @property
    def convergence_grace_period(self) -> google.protobuf.duration_pb2.Duration: ...
    @property
    def fetch_retry_policy(self) -> global___RetryPolicy:
        """override default retry policy. Default is min = 1m, max = 15m."""
    @property
    def apply_retry_policy(self) -> global___RetryPolicy:
        """override apply retry policy. Default is min = 30s, max = 5m."""
    disable_drift_detection: builtins.bool
    """Skip drift detection. This is useful for faster convergence on updates, but can lead to drift going undetected.
    When enabled, steady state polling is turned off.
    NOTE: Only supported in Pulumi today.
    """
    @property
    def task_resources(self) -> prodvana.proto.prodvana.common_config.program_pb2.ResourceRequirements:
        """Resource constraints for the  runner's Fetch and Apply commands."""
    service_account: builtins.str
    """optionally override what service account is used for terraform"""
    def __init__(
        self,
        *,
        proxy_runtime: prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig | None = ...,
        env: collections.abc.Mapping[builtins.str, prodvana.proto.prodvana.common_config.env_pb2.EnvValue] | None = ...,
        volumes: collections.abc.Iterable[prodvana.proto.prodvana.volumes.volumes_pb2.Volume] | None = ...,
        pre_run: collections.abc.Iterable[global___IacRunnerCommand] | None = ...,
        poll_interval: google.protobuf.duration_pb2.Duration | None = ...,
        steady_state_poll_interval: google.protobuf.duration_pb2.Duration | None = ...,
        require_approval_before_apply: builtins.bool = ...,
        convergence_grace_period: google.protobuf.duration_pb2.Duration | None = ...,
        fetch_retry_policy: global___RetryPolicy | None = ...,
        apply_retry_policy: global___RetryPolicy | None = ...,
        disable_drift_detection: builtins.bool = ...,
        task_resources: prodvana.proto.prodvana.common_config.program_pb2.ResourceRequirements | None = ...,
        service_account: builtins.str = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["apply_retry_policy", b"apply_retry_policy", "convergence_grace_period", b"convergence_grace_period", "fetch_retry_policy", b"fetch_retry_policy", "poll_interval", b"poll_interval", "proxy_runtime", b"proxy_runtime", "steady_state_poll_interval", b"steady_state_poll_interval", "task_resources", b"task_resources"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["apply_retry_policy", b"apply_retry_policy", "convergence_grace_period", b"convergence_grace_period", "disable_drift_detection", b"disable_drift_detection", "env", b"env", "fetch_retry_policy", b"fetch_retry_policy", "poll_interval", b"poll_interval", "pre_run", b"pre_run", "proxy_runtime", b"proxy_runtime", "require_approval_before_apply", b"require_approval_before_apply", "service_account", b"service_account", "steady_state_poll_interval", b"steady_state_poll_interval", "task_resources", b"task_resources", "volumes", b"volumes"]) -> None: ...

global___TerraformRunnerConfig = TerraformRunnerConfig

class GKEClusterMetadata(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    PROJECT_NAME_FIELD_NUMBER: builtins.int
    CLUSTER_LOCATION_FIELD_NUMBER: builtins.int
    CLUSTER_NAME_FIELD_NUMBER: builtins.int
    project_name: builtins.str
    cluster_location: builtins.str
    cluster_name: builtins.str
    def __init__(
        self,
        *,
        project_name: builtins.str = ...,
        cluster_location: builtins.str = ...,
        cluster_name: builtins.str = ...,
    ) -> None: ...
    def ClearField(self, field_name: typing_extensions.Literal["cluster_location", b"cluster_location", "cluster_name", b"cluster_name", "project_name", b"project_name"]) -> None: ...

global___GKEClusterMetadata = GKEClusterMetadata

class ClusterMetadata(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    GKE_FIELD_NUMBER: builtins.int
    @property
    def gke(self) -> global___GKEClusterMetadata: ...
    def __init__(
        self,
        *,
        gke: global___GKEClusterMetadata | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["cluster_metadata", b"cluster_metadata", "gke", b"gke"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["cluster_metadata", b"cluster_metadata", "gke", b"gke"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["cluster_metadata", b"cluster_metadata"]) -> typing_extensions.Literal["gke"] | None: ...

global___ClusterMetadata = ClusterMetadata

class AwsEcsConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class AccessKey(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        AWS_ACCESS_KEY_ID_FIELD_NUMBER: builtins.int
        AWS_SECRET_ACCESS_KEY_FIELD_NUMBER: builtins.int
        aws_access_key_id: builtins.str
        @property
        def aws_secret_access_key(self) -> prodvana.proto.prodvana.common_config.env_pb2.SecretReferenceValue: ...
        def __init__(
            self,
            *,
            aws_access_key_id: builtins.str = ...,
            aws_secret_access_key: prodvana.proto.prodvana.common_config.env_pb2.SecretReferenceValue | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal["aws_secret_access_key", b"aws_secret_access_key"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal["aws_access_key_id", b"aws_access_key_id", "aws_secret_access_key", b"aws_secret_access_key"]) -> None: ...

    class InheritRole(google.protobuf.message.Message):
        """the ProxyRuntime has been configured with an IAM role that has the necessary permissions"""

        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        K8S_SERVICE_ACCOUNT_FIELD_NUMBER: builtins.int
        k8s_service_account: builtins.str
        """optional, if the proxy runtime is an EKS cluster you can specify the K8S Service Account to
        use. If not passed, the default service account for the namespace will be used.
        """
        def __init__(
            self,
            *,
            k8s_service_account: builtins.str = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["k8s_service_account", b"k8s_service_account"]) -> None: ...

    PROXY_RUNTIME_FIELD_NUMBER: builtins.int
    ACCESS_KEY_FIELD_NUMBER: builtins.int
    INHERIT_ROLE_FROM_RUNTIME_ENV_FIELD_NUMBER: builtins.int
    REGION_FIELD_NUMBER: builtins.int
    ECS_CLUSTER_FIELD_NUMBER: builtins.int
    @property
    def proxy_runtime(self) -> prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig: ...
    @property
    def access_key(self) -> global___AwsEcsConfig.AccessKey: ...
    @property
    def inherit_role_from_runtime_env(self) -> global___AwsEcsConfig.InheritRole:
        """the ProxyRuntime has been configured with an IAM role that has the necessary permissions
        TODO(naphat) assumeRole support
        """
    region: builtins.str
    ecs_cluster: builtins.str
    def __init__(
        self,
        *,
        proxy_runtime: prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig | None = ...,
        access_key: global___AwsEcsConfig.AccessKey | None = ...,
        inherit_role_from_runtime_env: global___AwsEcsConfig.InheritRole | None = ...,
        region: builtins.str = ...,
        ecs_cluster: builtins.str = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["access_key", b"access_key", "credentials", b"credentials", "inherit_role_from_runtime_env", b"inherit_role_from_runtime_env", "proxy_runtime", b"proxy_runtime"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["access_key", b"access_key", "credentials", b"credentials", "ecs_cluster", b"ecs_cluster", "inherit_role_from_runtime_env", b"inherit_role_from_runtime_env", "proxy_runtime", b"proxy_runtime", "region", b"region"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["credentials", b"credentials"]) -> typing_extensions.Literal["access_key", "inherit_role_from_runtime_env"] | None: ...

global___AwsEcsConfig = AwsEcsConfig

class GoogleCloudRunConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    PROXY_RUNTIME_FIELD_NUMBER: builtins.int
    SERVICE_ACCOUNT_JSON_FIELD_NUMBER: builtins.int
    PROJECT_FIELD_NUMBER: builtins.int
    REGION_FIELD_NUMBER: builtins.int
    @property
    def proxy_runtime(self) -> prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig: ...
    @property
    def service_account_json(self) -> prodvana.proto.prodvana.common_config.env_pb2.SecretReferenceValue:
        """TODO(naphat) support for job service account name"""
    project: builtins.str
    region: builtins.str
    """next tag: 5"""
    def __init__(
        self,
        *,
        proxy_runtime: prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig | None = ...,
        service_account_json: prodvana.proto.prodvana.common_config.env_pb2.SecretReferenceValue | None = ...,
        project: builtins.str = ...,
        region: builtins.str = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["credentials", b"credentials", "proxy_runtime", b"proxy_runtime", "service_account_json", b"service_account_json"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["credentials", b"credentials", "project", b"project", "proxy_runtime", b"proxy_runtime", "region", b"region", "service_account_json", b"service_account_json"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["credentials", b"credentials"]) -> typing_extensions.Literal["service_account_json"] | None: ...

global___GoogleCloudRunConfig = GoogleCloudRunConfig

class FlyConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    PROXY_RUNTIME_FIELD_NUMBER: builtins.int
    FLY_API_TOKEN_FIELD_NUMBER: builtins.int
    @property
    def proxy_runtime(self) -> prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig: ...
    @property
    def fly_api_token(self) -> prodvana.proto.prodvana.common_config.env_pb2.SecretReferenceValue: ...
    def __init__(
        self,
        *,
        proxy_runtime: prodvana.proto.prodvana.runtimes.runtimes_config_pb2.RuntimeExecutionConfig | None = ...,
        fly_api_token: prodvana.proto.prodvana.common_config.env_pb2.SecretReferenceValue | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["credentials", b"credentials", "fly_api_token", b"fly_api_token", "proxy_runtime", b"proxy_runtime"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["credentials", b"credentials", "fly_api_token", b"fly_api_token", "proxy_runtime", b"proxy_runtime"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["credentials", b"credentials"]) -> typing_extensions.Literal["fly_api_token"] | None: ...

global___FlyConfig = FlyConfig

class ClusterConfig(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    class _CloudProvider:
        ValueType = typing.NewType("ValueType", builtins.int)
        V: typing_extensions.TypeAlias = ValueType

    class _CloudProviderEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClusterConfig._CloudProvider.ValueType], builtins.type):  # noqa: F821
        DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
        UNKNOWN: ClusterConfig._CloudProvider.ValueType  # 0
        EKS: ClusterConfig._CloudProvider.ValueType  # 1
        GKE: ClusterConfig._CloudProvider.ValueType  # 2
        AKS: ClusterConfig._CloudProvider.ValueType  # 3
        ONPREM: ClusterConfig._CloudProvider.ValueType  # 4
        OTHER_CLOUD: ClusterConfig._CloudProvider.ValueType  # 5

    class CloudProvider(_CloudProvider, metaclass=_CloudProviderEnumTypeWrapper): ...
    UNKNOWN: ClusterConfig.CloudProvider.ValueType  # 0
    EKS: ClusterConfig.CloudProvider.ValueType  # 1
    GKE: ClusterConfig.CloudProvider.ValueType  # 2
    AKS: ClusterConfig.CloudProvider.ValueType  # 3
    ONPREM: ClusterConfig.CloudProvider.ValueType  # 4
    OTHER_CLOUD: ClusterConfig.CloudProvider.ValueType  # 5

    class Kubecost(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        ENABLED_FIELD_NUMBER: builtins.int
        KUBECOST_NAMESPACE_FIELD_NUMBER: builtins.int
        MANAGED_FIELD_NUMBER: builtins.int
        enabled: builtins.bool
        kubecost_namespace: builtins.str
        managed: builtins.bool
        """deprecated"""
        def __init__(
            self,
            *,
            enabled: builtins.bool = ...,
            kubecost_namespace: builtins.str = ...,
            managed: builtins.bool = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["enabled", b"enabled", "kubecost_namespace", b"kubecost_namespace", "managed", b"managed"]) -> None: ...

    class Datadog(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        ENABLED_FIELD_NUMBER: builtins.int
        DATADOG_NAMESPACE_FIELD_NUMBER: builtins.int
        API_KEY_FIELD_NUMBER: builtins.int
        SITE_FIELD_NUMBER: builtins.int
        MANAGED_FIELD_NUMBER: builtins.int
        enabled: builtins.bool
        datadog_namespace: builtins.str
        api_key: builtins.str
        site: builtins.str
        managed: builtins.bool
        """deprecated"""
        def __init__(
            self,
            *,
            enabled: builtins.bool = ...,
            datadog_namespace: builtins.str = ...,
            api_key: builtins.str = ...,
            site: builtins.str = ...,
            managed: builtins.bool = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["api_key", b"api_key", "datadog_namespace", b"datadog_namespace", "enabled", b"enabled", "managed", b"managed", "site", b"site"]) -> None: ...

    class ALBIngress(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        ENABLED_FIELD_NUMBER: builtins.int
        INGRESS_CLASS_FIELD_NUMBER: builtins.int
        DEFAULT_BALANCER_ATTRIBUTES_FIELD_NUMBER: builtins.int
        enabled: builtins.bool
        ingress_class: builtins.str
        @property
        def default_balancer_attributes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
            """Attributes from https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#load-balancer-attributes
            that are added to all Ingresses/LBs created in this runtime.
            """
        def __init__(
            self,
            *,
            enabled: builtins.bool = ...,
            ingress_class: builtins.str = ...,
            default_balancer_attributes: collections.abc.Iterable[builtins.str] | None = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["default_balancer_attributes", b"default_balancer_attributes", "enabled", b"enabled", "ingress_class", b"ingress_class"]) -> None: ...

    class ArgoRollouts(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        class AnalysisTemplate(google.protobuf.message.Message):
            """deprecated"""

            DESCRIPTOR: google.protobuf.descriptor.Descriptor

            class _ArgValue:
                ValueType = typing.NewType("ValueType", builtins.int)
                V: typing_extensions.TypeAlias = ValueType

            class _ArgValueEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ClusterConfig.ArgoRollouts.AnalysisTemplate._ArgValue.ValueType], builtins.type):  # noqa: F821
                DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
                UNKNOWN: ClusterConfig.ArgoRollouts.AnalysisTemplate._ArgValue.ValueType  # 0
                SERVICE: ClusterConfig.ArgoRollouts.AnalysisTemplate._ArgValue.ValueType  # 1
                RELEASE_CHANNEL: ClusterConfig.ArgoRollouts.AnalysisTemplate._ArgValue.ValueType  # 2

            class ArgValue(_ArgValue, metaclass=_ArgValueEnumTypeWrapper): ...
            UNKNOWN: ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType  # 0
            SERVICE: ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType  # 1
            RELEASE_CHANNEL: ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType  # 2

            class ArgMappingEntry(google.protobuf.message.Message):
                DESCRIPTOR: google.protobuf.descriptor.Descriptor

                KEY_FIELD_NUMBER: builtins.int
                VALUE_FIELD_NUMBER: builtins.int
                key: builtins.str
                value: global___ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType
                def __init__(
                    self,
                    *,
                    key: builtins.str = ...,
                    value: global___ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType = ...,
                ) -> None: ...
                def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ...

            NAME_FIELD_NUMBER: builtins.int
            ARG_MAPPING_FIELD_NUMBER: builtins.int
            name: builtins.str
            @property
            def arg_mapping(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, global___ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType]:
                """template argument name to prodvana value to inject"""
            def __init__(
                self,
                *,
                name: builtins.str = ...,
                arg_mapping: collections.abc.Mapping[builtins.str, global___ClusterConfig.ArgoRollouts.AnalysisTemplate.ArgValue.ValueType] | None = ...,
            ) -> None: ...
            def ClearField(self, field_name: typing_extensions.Literal["arg_mapping", b"arg_mapping", "name", b"name"]) -> None: ...

        ENABLED_FIELD_NUMBER: builtins.int
        TEMPLATES_FIELD_NUMBER: builtins.int
        enabled: builtins.bool
        @property
        def templates(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ClusterConfig.ArgoRollouts.AnalysisTemplate]:
            """deprecated"""
        def __init__(
            self,
            *,
            enabled: builtins.bool = ...,
            templates: collections.abc.Iterable[global___ClusterConfig.ArgoRollouts.AnalysisTemplate] | None = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["enabled", b"enabled", "templates", b"templates"]) -> None: ...

    class GKEIngress(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        ENABLED_FIELD_NUMBER: builtins.int
        CONTAINER_NATIVE_FIELD_NUMBER: builtins.int
        enabled: builtins.bool
        container_native: builtins.bool
        """Enables container native load balancing, allowing GCP LBs to target k8s pods directly.
        See: https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing
        """
        def __init__(
            self,
            *,
            enabled: builtins.bool = ...,
            container_native: builtins.bool = ...,
        ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal["container_native", b"container_native", "enabled", b"enabled"]) -> None: ...

    NAME_FIELD_NUMBER: builtins.int
    KUBECOST_FIELD_NUMBER: builtins.int
    DATADOG_FIELD_NUMBER: builtins.int
    ALB_INGRESS_FIELD_NUMBER: builtins.int
    ARGO_ROLLOUTS_FIELD_NUMBER: builtins.int
    GKE_INGRESS_FIELD_NUMBER: builtins.int
    SELF_MANAGED_GKE_INGRESS_FIELD_NUMBER: builtins.int
    CLOUD_PROVIDER_FIELD_NUMBER: builtins.int
    DETECTED_CLUSTER_METADATA_FIELD_NUMBER: builtins.int
    USER_SUPPLIED_CLUSTER_METADATA_FIELD_NUMBER: builtins.int
    FAKE_FIELD_NUMBER: builtins.int
    EXTENSION_FIELD_NUMBER: builtins.int
    CUSTOM_FIELD_NUMBER: builtins.int
    TERRAFORM_RUNNER_FIELD_NUMBER: builtins.int
    PULUMI_RUNNER_FIELD_NUMBER: builtins.int
    AWS_ECS_FIELD_NUMBER: builtins.int
    GOOGLE_CLOUD_RUN_FIELD_NUMBER: builtins.int
    FLY_FIELD_NUMBER: builtins.int
    LABELS_FIELD_NUMBER: builtins.int
    AUTO_ROLLBACK_FIELD_NUMBER: builtins.int
    name: builtins.str
    @property
    def kubecost(self) -> global___ClusterConfig.Kubecost: ...
    @property
    def datadog(self) -> global___ClusterConfig.Datadog: ...
    @property
    def alb_ingress(self) -> global___ClusterConfig.ALBIngress: ...
    @property
    def argo_rollouts(self) -> global___ClusterConfig.ArgoRollouts: ...
    @property
    def gke_ingress(self) -> global___ClusterConfig.GKEIngress: ...
    @property
    def self_managed_gke_ingress(self) -> global___ClusterConfig.GKEIngress:
        """Self-Managed GKE Ingress - exposes configuration options for GKE Ingress
        but does not create an ingress object for you
        """
    cloud_provider: global___ClusterConfig.CloudProvider.ValueType
    @property
    def detected_cluster_metadata(self) -> global___ClusterMetadata: ...
    @property
    def user_supplied_cluster_metadata(self) -> global___ClusterMetadata: ...
    @property
    def fake(self) -> global___FakeClusterConfig:
        """only used for fake runtimes"""
    @property
    def extension(self) -> global___ExtensionClusterConfig:
        """deprecated, use custom which means the same thing"""
    @property
    def custom(self) -> global___ExtensionClusterConfig: ...
    @property
    def terraform_runner(self) -> global___TerraformRunnerConfig:
        """terraform runner is a runtime that runs terraform via k8s jobs"""
    @property
    def pulumi_runner(self) -> global___TerraformRunnerConfig:
        """pulumi runner is a runtime that runs pulumi via k8s jobs"""
    @property
    def aws_ecs(self) -> global___AwsEcsConfig: ...
    @property
    def google_cloud_run(self) -> global___GoogleCloudRunConfig: ...
    @property
    def fly(self) -> global___FlyConfig: ...
    @property
    def labels(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[prodvana.proto.prodvana.labels.labels_pb2.LabelDefinition]: ...
    @property
    def auto_rollback(self) -> prodvana.proto.prodvana.common_config.rollback_pb2.AutoRollbackConfig: ...
    def __init__(
        self,
        *,
        name: builtins.str = ...,
        kubecost: global___ClusterConfig.Kubecost | None = ...,
        datadog: global___ClusterConfig.Datadog | None = ...,
        alb_ingress: global___ClusterConfig.ALBIngress | None = ...,
        argo_rollouts: global___ClusterConfig.ArgoRollouts | None = ...,
        gke_ingress: global___ClusterConfig.GKEIngress | None = ...,
        self_managed_gke_ingress: global___ClusterConfig.GKEIngress | None = ...,
        cloud_provider: global___ClusterConfig.CloudProvider.ValueType = ...,
        detected_cluster_metadata: global___ClusterMetadata | None = ...,
        user_supplied_cluster_metadata: global___ClusterMetadata | None = ...,
        fake: global___FakeClusterConfig | None = ...,
        extension: global___ExtensionClusterConfig | None = ...,
        custom: global___ExtensionClusterConfig | None = ...,
        terraform_runner: global___TerraformRunnerConfig | None = ...,
        pulumi_runner: global___TerraformRunnerConfig | None = ...,
        aws_ecs: global___AwsEcsConfig | None = ...,
        google_cloud_run: global___GoogleCloudRunConfig | None = ...,
        fly: global___FlyConfig | None = ...,
        labels: collections.abc.Iterable[prodvana.proto.prodvana.labels.labels_pb2.LabelDefinition] | None = ...,
        auto_rollback: prodvana.proto.prodvana.common_config.rollback_pb2.AutoRollbackConfig | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal["alb_ingress", b"alb_ingress", "argo_rollouts", b"argo_rollouts", "auto_rollback", b"auto_rollback", "aws_ecs", b"aws_ecs", "cluster_oneof", b"cluster_oneof", "custom", b"custom", "datadog", b"datadog", "detected_cluster_metadata", b"detected_cluster_metadata", "extension", b"extension", "fake", b"fake", "fly", b"fly", "gke_ingress", b"gke_ingress", "google_cloud_run", b"google_cloud_run", "kubecost", b"kubecost", "pulumi_runner", b"pulumi_runner", "self_managed_gke_ingress", b"self_managed_gke_ingress", "terraform_runner", b"terraform_runner", "user_supplied_cluster_metadata", b"user_supplied_cluster_metadata"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal["alb_ingress", b"alb_ingress", "argo_rollouts", b"argo_rollouts", "auto_rollback", b"auto_rollback", "aws_ecs", b"aws_ecs", "cloud_provider", b"cloud_provider", "cluster_oneof", b"cluster_oneof", "custom", b"custom", "datadog", b"datadog", "detected_cluster_metadata", b"detected_cluster_metadata", "extension", b"extension", "fake", b"fake", "fly", b"fly", "gke_ingress", b"gke_ingress", "google_cloud_run", b"google_cloud_run", "kubecost", b"kubecost", "labels", b"labels", "name", b"name", "pulumi_runner", b"pulumi_runner", "self_managed_gke_ingress", b"self_managed_gke_ingress", "terraform_runner", b"terraform_runner", "user_supplied_cluster_metadata", b"user_supplied_cluster_metadata"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal["cluster_oneof", b"cluster_oneof"]) -> typing_extensions.Literal["fake", "extension", "custom", "terraform_runner", "pulumi_runner", "aws_ecs", "google_cloud_run", "fly"] | None: ...

global___ClusterConfig = ClusterConfig
