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

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

__all__ = ['OceanImportArgs', 'OceanImport']

@pulumi.input_type
class OceanImportArgs:
    def __init__(__self__, *,
                 cluster_name: pulumi.Input[str],
                 location: pulumi.Input[str],
                 autoscaler: Optional[pulumi.Input['OceanImportAutoscalerArgs']] = None,
                 backend_services: Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportBackendServiceArgs']]]] = None,
                 blacklists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 controller_cluster_id: Optional[pulumi.Input[str]] = None,
                 desired_capacity: Optional[pulumi.Input[int]] = None,
                 max_size: Optional[pulumi.Input[int]] = None,
                 min_size: Optional[pulumi.Input[int]] = None,
                 root_volume_type: Optional[pulumi.Input[str]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportScheduledTaskArgs']]]] = None,
                 shielded_instance_config: Optional[pulumi.Input['OceanImportShieldedInstanceConfigArgs']] = None,
                 strategies: Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportStrategyArgs']]]] = None,
                 update_policy: Optional[pulumi.Input['OceanImportUpdatePolicyArgs']] = None,
                 use_as_template_only: Optional[pulumi.Input[bool]] = None,
                 whitelists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        The set of arguments for constructing a OceanImport resource.
        :param pulumi.Input[str] cluster_name: The GKE cluster name.
        :param pulumi.Input[str] location: The zone the master cluster is located in.
        :param pulumi.Input['OceanImportAutoscalerArgs'] autoscaler: The Ocean Kubernetes Autoscaler object.
        :param pulumi.Input[Sequence[pulumi.Input['OceanImportBackendServiceArgs']]] backend_services: Describes the backend service configurations.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] blacklists: Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        :param pulumi.Input[str] controller_cluster_id: A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        :param pulumi.Input[int] desired_capacity: The number of instances to launch and maintain in the cluster.
        :param pulumi.Input[int] max_size: The upper limit of instances the cluster can scale up to.
        :param pulumi.Input[int] min_size: The lower limit of instances the cluster can scale down to.
        :param pulumi.Input[str] root_volume_type: The root volume disk type.
        :param pulumi.Input[Sequence[pulumi.Input['OceanImportScheduledTaskArgs']]] scheduled_tasks: Set scheduling object.
        :param pulumi.Input['OceanImportShieldedInstanceConfigArgs'] shielded_instance_config: The Ocean shielded instance configuration object.
        :param pulumi.Input[bool] use_as_template_only: launch specification defined on the Ocean object will function only as a template for virtual node groups.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] whitelists: Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        pulumi.set(__self__, "cluster_name", cluster_name)
        pulumi.set(__self__, "location", location)
        if autoscaler is not None:
            pulumi.set(__self__, "autoscaler", autoscaler)
        if backend_services is not None:
            pulumi.set(__self__, "backend_services", backend_services)
        if blacklists is not None:
            pulumi.set(__self__, "blacklists", blacklists)
        if controller_cluster_id is not None:
            pulumi.set(__self__, "controller_cluster_id", controller_cluster_id)
        if desired_capacity is not None:
            pulumi.set(__self__, "desired_capacity", desired_capacity)
        if max_size is not None:
            pulumi.set(__self__, "max_size", max_size)
        if min_size is not None:
            pulumi.set(__self__, "min_size", min_size)
        if root_volume_type is not None:
            pulumi.set(__self__, "root_volume_type", root_volume_type)
        if scheduled_tasks is not None:
            pulumi.set(__self__, "scheduled_tasks", scheduled_tasks)
        if shielded_instance_config is not None:
            pulumi.set(__self__, "shielded_instance_config", shielded_instance_config)
        if strategies is not None:
            pulumi.set(__self__, "strategies", strategies)
        if update_policy is not None:
            pulumi.set(__self__, "update_policy", update_policy)
        if use_as_template_only is not None:
            pulumi.set(__self__, "use_as_template_only", use_as_template_only)
        if whitelists is not None:
            pulumi.set(__self__, "whitelists", whitelists)

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> pulumi.Input[str]:
        """
        The GKE cluster name.
        """
        return pulumi.get(self, "cluster_name")

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

    @property
    @pulumi.getter
    def location(self) -> pulumi.Input[str]:
        """
        The zone the master cluster is located in.
        """
        return pulumi.get(self, "location")

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

    @property
    @pulumi.getter
    def autoscaler(self) -> Optional[pulumi.Input['OceanImportAutoscalerArgs']]:
        """
        The Ocean Kubernetes Autoscaler object.
        """
        return pulumi.get(self, "autoscaler")

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

    @property
    @pulumi.getter(name="backendServices")
    def backend_services(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportBackendServiceArgs']]]]:
        """
        Describes the backend service configurations.
        """
        return pulumi.get(self, "backend_services")

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

    @property
    @pulumi.getter
    def blacklists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        """
        return pulumi.get(self, "blacklists")

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

    @property
    @pulumi.getter(name="controllerClusterId")
    def controller_cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        """
        return pulumi.get(self, "controller_cluster_id")

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

    @property
    @pulumi.getter(name="desiredCapacity")
    def desired_capacity(self) -> Optional[pulumi.Input[int]]:
        """
        The number of instances to launch and maintain in the cluster.
        """
        return pulumi.get(self, "desired_capacity")

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

    @property
    @pulumi.getter(name="maxSize")
    def max_size(self) -> Optional[pulumi.Input[int]]:
        """
        The upper limit of instances the cluster can scale up to.
        """
        return pulumi.get(self, "max_size")

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

    @property
    @pulumi.getter(name="minSize")
    def min_size(self) -> Optional[pulumi.Input[int]]:
        """
        The lower limit of instances the cluster can scale down to.
        """
        return pulumi.get(self, "min_size")

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

    @property
    @pulumi.getter(name="rootVolumeType")
    def root_volume_type(self) -> Optional[pulumi.Input[str]]:
        """
        The root volume disk type.
        """
        return pulumi.get(self, "root_volume_type")

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

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportScheduledTaskArgs']]]]:
        """
        Set scheduling object.
        """
        return pulumi.get(self, "scheduled_tasks")

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

    @property
    @pulumi.getter(name="shieldedInstanceConfig")
    def shielded_instance_config(self) -> Optional[pulumi.Input['OceanImportShieldedInstanceConfigArgs']]:
        """
        The Ocean shielded instance configuration object.
        """
        return pulumi.get(self, "shielded_instance_config")

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

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

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

    @property
    @pulumi.getter(name="updatePolicy")
    def update_policy(self) -> Optional[pulumi.Input['OceanImportUpdatePolicyArgs']]:
        return pulumi.get(self, "update_policy")

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

    @property
    @pulumi.getter(name="useAsTemplateOnly")
    def use_as_template_only(self) -> Optional[pulumi.Input[bool]]:
        """
        launch specification defined on the Ocean object will function only as a template for virtual node groups.
        """
        return pulumi.get(self, "use_as_template_only")

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

    @property
    @pulumi.getter
    def whitelists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        return pulumi.get(self, "whitelists")

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


@pulumi.input_type
class _OceanImportState:
    def __init__(__self__, *,
                 autoscaler: Optional[pulumi.Input['OceanImportAutoscalerArgs']] = None,
                 backend_services: Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportBackendServiceArgs']]]] = None,
                 blacklists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cluster_controller_id: Optional[pulumi.Input[str]] = None,
                 cluster_name: Optional[pulumi.Input[str]] = None,
                 controller_cluster_id: Optional[pulumi.Input[str]] = None,
                 desired_capacity: Optional[pulumi.Input[int]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 max_size: Optional[pulumi.Input[int]] = None,
                 min_size: Optional[pulumi.Input[int]] = None,
                 root_volume_type: Optional[pulumi.Input[str]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportScheduledTaskArgs']]]] = None,
                 shielded_instance_config: Optional[pulumi.Input['OceanImportShieldedInstanceConfigArgs']] = None,
                 strategies: Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportStrategyArgs']]]] = None,
                 update_policy: Optional[pulumi.Input['OceanImportUpdatePolicyArgs']] = None,
                 use_as_template_only: Optional[pulumi.Input[bool]] = None,
                 whitelists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        Input properties used for looking up and filtering OceanImport resources.
        :param pulumi.Input['OceanImportAutoscalerArgs'] autoscaler: The Ocean Kubernetes Autoscaler object.
        :param pulumi.Input[Sequence[pulumi.Input['OceanImportBackendServiceArgs']]] backend_services: Describes the backend service configurations.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] blacklists: Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        :param pulumi.Input[str] cluster_name: The GKE cluster name.
        :param pulumi.Input[str] controller_cluster_id: A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        :param pulumi.Input[int] desired_capacity: The number of instances to launch and maintain in the cluster.
        :param pulumi.Input[str] location: The zone the master cluster is located in.
        :param pulumi.Input[int] max_size: The upper limit of instances the cluster can scale up to.
        :param pulumi.Input[int] min_size: The lower limit of instances the cluster can scale down to.
        :param pulumi.Input[str] root_volume_type: The root volume disk type.
        :param pulumi.Input[Sequence[pulumi.Input['OceanImportScheduledTaskArgs']]] scheduled_tasks: Set scheduling object.
        :param pulumi.Input['OceanImportShieldedInstanceConfigArgs'] shielded_instance_config: The Ocean shielded instance configuration object.
        :param pulumi.Input[bool] use_as_template_only: launch specification defined on the Ocean object will function only as a template for virtual node groups.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] whitelists: Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        if autoscaler is not None:
            pulumi.set(__self__, "autoscaler", autoscaler)
        if backend_services is not None:
            pulumi.set(__self__, "backend_services", backend_services)
        if blacklists is not None:
            pulumi.set(__self__, "blacklists", blacklists)
        if cluster_controller_id is not None:
            pulumi.set(__self__, "cluster_controller_id", cluster_controller_id)
        if cluster_name is not None:
            pulumi.set(__self__, "cluster_name", cluster_name)
        if controller_cluster_id is not None:
            pulumi.set(__self__, "controller_cluster_id", controller_cluster_id)
        if desired_capacity is not None:
            pulumi.set(__self__, "desired_capacity", desired_capacity)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if max_size is not None:
            pulumi.set(__self__, "max_size", max_size)
        if min_size is not None:
            pulumi.set(__self__, "min_size", min_size)
        if root_volume_type is not None:
            pulumi.set(__self__, "root_volume_type", root_volume_type)
        if scheduled_tasks is not None:
            pulumi.set(__self__, "scheduled_tasks", scheduled_tasks)
        if shielded_instance_config is not None:
            pulumi.set(__self__, "shielded_instance_config", shielded_instance_config)
        if strategies is not None:
            pulumi.set(__self__, "strategies", strategies)
        if update_policy is not None:
            pulumi.set(__self__, "update_policy", update_policy)
        if use_as_template_only is not None:
            pulumi.set(__self__, "use_as_template_only", use_as_template_only)
        if whitelists is not None:
            pulumi.set(__self__, "whitelists", whitelists)

    @property
    @pulumi.getter
    def autoscaler(self) -> Optional[pulumi.Input['OceanImportAutoscalerArgs']]:
        """
        The Ocean Kubernetes Autoscaler object.
        """
        return pulumi.get(self, "autoscaler")

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

    @property
    @pulumi.getter(name="backendServices")
    def backend_services(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportBackendServiceArgs']]]]:
        """
        Describes the backend service configurations.
        """
        return pulumi.get(self, "backend_services")

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

    @property
    @pulumi.getter
    def blacklists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        """
        return pulumi.get(self, "blacklists")

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

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

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

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> Optional[pulumi.Input[str]]:
        """
        The GKE cluster name.
        """
        return pulumi.get(self, "cluster_name")

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

    @property
    @pulumi.getter(name="controllerClusterId")
    def controller_cluster_id(self) -> Optional[pulumi.Input[str]]:
        """
        A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        """
        return pulumi.get(self, "controller_cluster_id")

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

    @property
    @pulumi.getter(name="desiredCapacity")
    def desired_capacity(self) -> Optional[pulumi.Input[int]]:
        """
        The number of instances to launch and maintain in the cluster.
        """
        return pulumi.get(self, "desired_capacity")

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

    @property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[str]]:
        """
        The zone the master cluster is located in.
        """
        return pulumi.get(self, "location")

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

    @property
    @pulumi.getter(name="maxSize")
    def max_size(self) -> Optional[pulumi.Input[int]]:
        """
        The upper limit of instances the cluster can scale up to.
        """
        return pulumi.get(self, "max_size")

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

    @property
    @pulumi.getter(name="minSize")
    def min_size(self) -> Optional[pulumi.Input[int]]:
        """
        The lower limit of instances the cluster can scale down to.
        """
        return pulumi.get(self, "min_size")

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

    @property
    @pulumi.getter(name="rootVolumeType")
    def root_volume_type(self) -> Optional[pulumi.Input[str]]:
        """
        The root volume disk type.
        """
        return pulumi.get(self, "root_volume_type")

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

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['OceanImportScheduledTaskArgs']]]]:
        """
        Set scheduling object.
        """
        return pulumi.get(self, "scheduled_tasks")

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

    @property
    @pulumi.getter(name="shieldedInstanceConfig")
    def shielded_instance_config(self) -> Optional[pulumi.Input['OceanImportShieldedInstanceConfigArgs']]:
        """
        The Ocean shielded instance configuration object.
        """
        return pulumi.get(self, "shielded_instance_config")

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

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

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

    @property
    @pulumi.getter(name="updatePolicy")
    def update_policy(self) -> Optional[pulumi.Input['OceanImportUpdatePolicyArgs']]:
        return pulumi.get(self, "update_policy")

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

    @property
    @pulumi.getter(name="useAsTemplateOnly")
    def use_as_template_only(self) -> Optional[pulumi.Input[bool]]:
        """
        launch specification defined on the Ocean object will function only as a template for virtual node groups.
        """
        return pulumi.get(self, "use_as_template_only")

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

    @property
    @pulumi.getter
    def whitelists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        return pulumi.get(self, "whitelists")

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


class OceanImport(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 autoscaler: Optional[pulumi.Input[pulumi.InputType['OceanImportAutoscalerArgs']]] = None,
                 backend_services: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportBackendServiceArgs']]]]] = None,
                 blacklists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cluster_name: Optional[pulumi.Input[str]] = None,
                 controller_cluster_id: Optional[pulumi.Input[str]] = None,
                 desired_capacity: Optional[pulumi.Input[int]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 max_size: Optional[pulumi.Input[int]] = None,
                 min_size: Optional[pulumi.Input[int]] = None,
                 root_volume_type: Optional[pulumi.Input[str]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportScheduledTaskArgs']]]]] = None,
                 shielded_instance_config: Optional[pulumi.Input[pulumi.InputType['OceanImportShieldedInstanceConfigArgs']]] = None,
                 strategies: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportStrategyArgs']]]]] = None,
                 update_policy: Optional[pulumi.Input[pulumi.InputType['OceanImportUpdatePolicyArgs']]] = None,
                 use_as_template_only: Optional[pulumi.Input[bool]] = None,
                 whitelists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 __props__=None):
        """
        Manages a Spotinst Ocean GKE resource.

        ## Prerequisites

        Installation of the Ocean controller is required by this resource. You can accomplish this by using the spotinst/ocean-controller module as follows:

        ```python
        import pulumi
        ```

        > You must configure the same `cluster_identifier` both for the Ocean controller and for the `gke.OceanImport` resource.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        example = spotinst.gke.OceanImport("example",
            backend_services=[spotinst.gke.OceanImportBackendServiceArgs(
                location_type="regional",
                named_ports=[spotinst.gke.OceanImportBackendServiceNamedPortArgs(
                    name="http",
                    ports=[
                        "80",
                        "8080",
                    ],
                )],
                scheme="INTERNAL",
                service_name="example-backend-service",
            )],
            cluster_name="example-cluster-name",
            controller_cluster_id="example-controller-123124",
            desired_capacity=0,
            location="us-central1-a",
            max_size=2,
            min_size=0,
            root_volume_type="pd-ssd",
            shielded_instance_config=spotinst.gke.OceanImportShieldedInstanceConfigArgs(
                enable_integrity_monitoring=True,
                enable_secure_boot=True,
            ),
            use_as_template_only=False,
            whitelists=[
                "n1-standard-1",
                "n1-standard-2",
            ])
        ```

        ```python
        import pulumi

        pulumi.export("oceanId", spotinst_ocean_gke_import["example"]["id"])
        ```
        ## Strategy

        * `strategy` - (Optional) Strategy object.
            * `draining_timeout` - (Optional) The draining timeout (in seconds) before terminating the instance. If no draining timeout is defined, the default draining timeout will be used.
            * `provisioning_model` - (Optional) Define the provisioning model of the launched instances. Valid values: `SPOT`, `PREEMPTIBLE`.
            * `preemptible_percentage`- (Optional) Defines the desired preemptible percentage for the cluster.

        ```python
        import pulumi
        ```

        <a id="update-policy"></a>
        ## Update Policy

        * `update_policy` - (Optional)
            * `should_roll` - (Required) Enables the roll.
            * `conditioned_roll` - (Optional, Default: false) Spot will perform a cluster Roll in accordance with a relevant modification of the cluster’s settings. When set to true , only specific changes in the cluster’s configuration will trigger a cluster roll (such as AMI, Key Pair, user data, instance types, load balancers, etc).
          
            * `roll_config` - (Required) Holds the roll configuration.
                * `batch_size_percentage` - (Required) Sets the percentage of the instances to deploy in each batch.
                * `launch_spec_ids` - (Optional) List of Virtual Node Group identifiers to be rolled.
                * `batch_min_healthy_percentage` - (Optional) Default: 50. Indicates the threshold of minimum healthy instances in single batch. If the amount of healthy instances in single batch is under the threshold, the cluster roll will fail. If exists, the parameter value will be in range of 1-100. In case of null as value, the default value in the backend will be 50%. Value of param should represent the number in percentage (%) of the batch.
                * `respect_pdb` - (Optional) Default: False. During the roll, if the parameter is set to True we honor PDB during the instance replacement.

        ```python
        import pulumi
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['OceanImportAutoscalerArgs']] autoscaler: The Ocean Kubernetes Autoscaler object.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportBackendServiceArgs']]]] backend_services: Describes the backend service configurations.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] blacklists: Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        :param pulumi.Input[str] cluster_name: The GKE cluster name.
        :param pulumi.Input[str] controller_cluster_id: A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        :param pulumi.Input[int] desired_capacity: The number of instances to launch and maintain in the cluster.
        :param pulumi.Input[str] location: The zone the master cluster is located in.
        :param pulumi.Input[int] max_size: The upper limit of instances the cluster can scale up to.
        :param pulumi.Input[int] min_size: The lower limit of instances the cluster can scale down to.
        :param pulumi.Input[str] root_volume_type: The root volume disk type.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportScheduledTaskArgs']]]] scheduled_tasks: Set scheduling object.
        :param pulumi.Input[pulumi.InputType['OceanImportShieldedInstanceConfigArgs']] shielded_instance_config: The Ocean shielded instance configuration object.
        :param pulumi.Input[bool] use_as_template_only: launch specification defined on the Ocean object will function only as a template for virtual node groups.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] whitelists: Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: OceanImportArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Manages a Spotinst Ocean GKE resource.

        ## Prerequisites

        Installation of the Ocean controller is required by this resource. You can accomplish this by using the spotinst/ocean-controller module as follows:

        ```python
        import pulumi
        ```

        > You must configure the same `cluster_identifier` both for the Ocean controller and for the `gke.OceanImport` resource.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_spotinst as spotinst

        example = spotinst.gke.OceanImport("example",
            backend_services=[spotinst.gke.OceanImportBackendServiceArgs(
                location_type="regional",
                named_ports=[spotinst.gke.OceanImportBackendServiceNamedPortArgs(
                    name="http",
                    ports=[
                        "80",
                        "8080",
                    ],
                )],
                scheme="INTERNAL",
                service_name="example-backend-service",
            )],
            cluster_name="example-cluster-name",
            controller_cluster_id="example-controller-123124",
            desired_capacity=0,
            location="us-central1-a",
            max_size=2,
            min_size=0,
            root_volume_type="pd-ssd",
            shielded_instance_config=spotinst.gke.OceanImportShieldedInstanceConfigArgs(
                enable_integrity_monitoring=True,
                enable_secure_boot=True,
            ),
            use_as_template_only=False,
            whitelists=[
                "n1-standard-1",
                "n1-standard-2",
            ])
        ```

        ```python
        import pulumi

        pulumi.export("oceanId", spotinst_ocean_gke_import["example"]["id"])
        ```
        ## Strategy

        * `strategy` - (Optional) Strategy object.
            * `draining_timeout` - (Optional) The draining timeout (in seconds) before terminating the instance. If no draining timeout is defined, the default draining timeout will be used.
            * `provisioning_model` - (Optional) Define the provisioning model of the launched instances. Valid values: `SPOT`, `PREEMPTIBLE`.
            * `preemptible_percentage`- (Optional) Defines the desired preemptible percentage for the cluster.

        ```python
        import pulumi
        ```

        <a id="update-policy"></a>
        ## Update Policy

        * `update_policy` - (Optional)
            * `should_roll` - (Required) Enables the roll.
            * `conditioned_roll` - (Optional, Default: false) Spot will perform a cluster Roll in accordance with a relevant modification of the cluster’s settings. When set to true , only specific changes in the cluster’s configuration will trigger a cluster roll (such as AMI, Key Pair, user data, instance types, load balancers, etc).
          
            * `roll_config` - (Required) Holds the roll configuration.
                * `batch_size_percentage` - (Required) Sets the percentage of the instances to deploy in each batch.
                * `launch_spec_ids` - (Optional) List of Virtual Node Group identifiers to be rolled.
                * `batch_min_healthy_percentage` - (Optional) Default: 50. Indicates the threshold of minimum healthy instances in single batch. If the amount of healthy instances in single batch is under the threshold, the cluster roll will fail. If exists, the parameter value will be in range of 1-100. In case of null as value, the default value in the backend will be 50%. Value of param should represent the number in percentage (%) of the batch.
                * `respect_pdb` - (Optional) Default: False. During the roll, if the parameter is set to True we honor PDB during the instance replacement.

        ```python
        import pulumi
        ```

        :param str resource_name: The name of the resource.
        :param OceanImportArgs 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(OceanImportArgs, 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,
                 autoscaler: Optional[pulumi.Input[pulumi.InputType['OceanImportAutoscalerArgs']]] = None,
                 backend_services: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportBackendServiceArgs']]]]] = None,
                 blacklists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 cluster_name: Optional[pulumi.Input[str]] = None,
                 controller_cluster_id: Optional[pulumi.Input[str]] = None,
                 desired_capacity: Optional[pulumi.Input[int]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 max_size: Optional[pulumi.Input[int]] = None,
                 min_size: Optional[pulumi.Input[int]] = None,
                 root_volume_type: Optional[pulumi.Input[str]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportScheduledTaskArgs']]]]] = None,
                 shielded_instance_config: Optional[pulumi.Input[pulumi.InputType['OceanImportShieldedInstanceConfigArgs']]] = None,
                 strategies: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportStrategyArgs']]]]] = None,
                 update_policy: Optional[pulumi.Input[pulumi.InputType['OceanImportUpdatePolicyArgs']]] = None,
                 use_as_template_only: Optional[pulumi.Input[bool]] = None,
                 whitelists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = OceanImportArgs.__new__(OceanImportArgs)

            __props__.__dict__["autoscaler"] = autoscaler
            __props__.__dict__["backend_services"] = backend_services
            __props__.__dict__["blacklists"] = blacklists
            if cluster_name is None and not opts.urn:
                raise TypeError("Missing required property 'cluster_name'")
            __props__.__dict__["cluster_name"] = cluster_name
            __props__.__dict__["controller_cluster_id"] = controller_cluster_id
            __props__.__dict__["desired_capacity"] = desired_capacity
            if location is None and not opts.urn:
                raise TypeError("Missing required property 'location'")
            __props__.__dict__["location"] = location
            __props__.__dict__["max_size"] = max_size
            __props__.__dict__["min_size"] = min_size
            __props__.__dict__["root_volume_type"] = root_volume_type
            __props__.__dict__["scheduled_tasks"] = scheduled_tasks
            __props__.__dict__["shielded_instance_config"] = shielded_instance_config
            __props__.__dict__["strategies"] = strategies
            __props__.__dict__["update_policy"] = update_policy
            __props__.__dict__["use_as_template_only"] = use_as_template_only
            __props__.__dict__["whitelists"] = whitelists
            __props__.__dict__["cluster_controller_id"] = None
        super(OceanImport, __self__).__init__(
            'spotinst:gke/oceanImport:OceanImport',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            autoscaler: Optional[pulumi.Input[pulumi.InputType['OceanImportAutoscalerArgs']]] = None,
            backend_services: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportBackendServiceArgs']]]]] = None,
            blacklists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            cluster_controller_id: Optional[pulumi.Input[str]] = None,
            cluster_name: Optional[pulumi.Input[str]] = None,
            controller_cluster_id: Optional[pulumi.Input[str]] = None,
            desired_capacity: Optional[pulumi.Input[int]] = None,
            location: Optional[pulumi.Input[str]] = None,
            max_size: Optional[pulumi.Input[int]] = None,
            min_size: Optional[pulumi.Input[int]] = None,
            root_volume_type: Optional[pulumi.Input[str]] = None,
            scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportScheduledTaskArgs']]]]] = None,
            shielded_instance_config: Optional[pulumi.Input[pulumi.InputType['OceanImportShieldedInstanceConfigArgs']]] = None,
            strategies: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportStrategyArgs']]]]] = None,
            update_policy: Optional[pulumi.Input[pulumi.InputType['OceanImportUpdatePolicyArgs']]] = None,
            use_as_template_only: Optional[pulumi.Input[bool]] = None,
            whitelists: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None) -> 'OceanImport':
        """
        Get an existing OceanImport resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[pulumi.InputType['OceanImportAutoscalerArgs']] autoscaler: The Ocean Kubernetes Autoscaler object.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportBackendServiceArgs']]]] backend_services: Describes the backend service configurations.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] blacklists: Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        :param pulumi.Input[str] cluster_name: The GKE cluster name.
        :param pulumi.Input[str] controller_cluster_id: A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        :param pulumi.Input[int] desired_capacity: The number of instances to launch and maintain in the cluster.
        :param pulumi.Input[str] location: The zone the master cluster is located in.
        :param pulumi.Input[int] max_size: The upper limit of instances the cluster can scale up to.
        :param pulumi.Input[int] min_size: The lower limit of instances the cluster can scale down to.
        :param pulumi.Input[str] root_volume_type: The root volume disk type.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['OceanImportScheduledTaskArgs']]]] scheduled_tasks: Set scheduling object.
        :param pulumi.Input[pulumi.InputType['OceanImportShieldedInstanceConfigArgs']] shielded_instance_config: The Ocean shielded instance configuration object.
        :param pulumi.Input[bool] use_as_template_only: launch specification defined on the Ocean object will function only as a template for virtual node groups.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] whitelists: Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _OceanImportState.__new__(_OceanImportState)

        __props__.__dict__["autoscaler"] = autoscaler
        __props__.__dict__["backend_services"] = backend_services
        __props__.__dict__["blacklists"] = blacklists
        __props__.__dict__["cluster_controller_id"] = cluster_controller_id
        __props__.__dict__["cluster_name"] = cluster_name
        __props__.__dict__["controller_cluster_id"] = controller_cluster_id
        __props__.__dict__["desired_capacity"] = desired_capacity
        __props__.__dict__["location"] = location
        __props__.__dict__["max_size"] = max_size
        __props__.__dict__["min_size"] = min_size
        __props__.__dict__["root_volume_type"] = root_volume_type
        __props__.__dict__["scheduled_tasks"] = scheduled_tasks
        __props__.__dict__["shielded_instance_config"] = shielded_instance_config
        __props__.__dict__["strategies"] = strategies
        __props__.__dict__["update_policy"] = update_policy
        __props__.__dict__["use_as_template_only"] = use_as_template_only
        __props__.__dict__["whitelists"] = whitelists
        return OceanImport(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def autoscaler(self) -> pulumi.Output['outputs.OceanImportAutoscaler']:
        """
        The Ocean Kubernetes Autoscaler object.
        """
        return pulumi.get(self, "autoscaler")

    @property
    @pulumi.getter(name="backendServices")
    def backend_services(self) -> pulumi.Output[Optional[Sequence['outputs.OceanImportBackendService']]]:
        """
        Describes the backend service configurations.
        """
        return pulumi.get(self, "backend_services")

    @property
    @pulumi.getter
    def blacklists(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        Instance types to avoid launching in the Ocean cluster. Cannot be configured if whitelist list is configured.
        """
        return pulumi.get(self, "blacklists")

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

    @property
    @pulumi.getter(name="clusterName")
    def cluster_name(self) -> pulumi.Output[str]:
        """
        The GKE cluster name.
        """
        return pulumi.get(self, "cluster_name")

    @property
    @pulumi.getter(name="controllerClusterId")
    def controller_cluster_id(self) -> pulumi.Output[str]:
        """
        A unique identifier used for connecting the Ocean SaaS platform and the Kubernetes cluster. Typically, the cluster name is used as its identifier.
        """
        return pulumi.get(self, "controller_cluster_id")

    @property
    @pulumi.getter(name="desiredCapacity")
    def desired_capacity(self) -> pulumi.Output[int]:
        """
        The number of instances to launch and maintain in the cluster.
        """
        return pulumi.get(self, "desired_capacity")

    @property
    @pulumi.getter
    def location(self) -> pulumi.Output[str]:
        """
        The zone the master cluster is located in.
        """
        return pulumi.get(self, "location")

    @property
    @pulumi.getter(name="maxSize")
    def max_size(self) -> pulumi.Output[int]:
        """
        The upper limit of instances the cluster can scale up to.
        """
        return pulumi.get(self, "max_size")

    @property
    @pulumi.getter(name="minSize")
    def min_size(self) -> pulumi.Output[int]:
        """
        The lower limit of instances the cluster can scale down to.
        """
        return pulumi.get(self, "min_size")

    @property
    @pulumi.getter(name="rootVolumeType")
    def root_volume_type(self) -> pulumi.Output[Optional[str]]:
        """
        The root volume disk type.
        """
        return pulumi.get(self, "root_volume_type")

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> pulumi.Output[Optional[Sequence['outputs.OceanImportScheduledTask']]]:
        """
        Set scheduling object.
        """
        return pulumi.get(self, "scheduled_tasks")

    @property
    @pulumi.getter(name="shieldedInstanceConfig")
    def shielded_instance_config(self) -> pulumi.Output['outputs.OceanImportShieldedInstanceConfig']:
        """
        The Ocean shielded instance configuration object.
        """
        return pulumi.get(self, "shielded_instance_config")

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

    @property
    @pulumi.getter(name="updatePolicy")
    def update_policy(self) -> pulumi.Output[Optional['outputs.OceanImportUpdatePolicy']]:
        return pulumi.get(self, "update_policy")

    @property
    @pulumi.getter(name="useAsTemplateOnly")
    def use_as_template_only(self) -> pulumi.Output[Optional[bool]]:
        """
        launch specification defined on the Ocean object will function only as a template for virtual node groups.
        """
        return pulumi.get(self, "use_as_template_only")

    @property
    @pulumi.getter
    def whitelists(self) -> pulumi.Output[Optional[Sequence[str]]]:
        """
        Instance types allowed in the Ocean cluster. Cannot be configured if blacklist list is configured.
        """
        return pulumi.get(self, "whitelists")

