import * as pulumi from "@pulumi/pulumi";
import * as inputs from "./types/input";
import * as outputs from "./types/output";
/**
 * The `scaleway.kubernetes.Pool` resource allows you to create and manage Scaleway Kubernetes cluster pools.
 *
 * Refer to the Kubernetes [documentation](https://www.scaleway.com/en/docs/compute/kubernetes/) and [API documentation](https://www.scaleway.com/en/developers/api/kubernetes/) for more information.
 *
 * ## Placement Group
 *
 * If you are working with cluster type `multicloud` please set the `zone` where your placement group is e.g:
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as scaleway from "@pulumiverse/scaleway";
 *
 * const placementGroup = new scaleway.instance.PlacementGroup("placement_group", {
 *     name: "pool-placement-group",
 *     policyType: "max_availability",
 *     policyMode: "optional",
 *     zone: "nl-ams-1",
 * });
 * const cluster = new scaleway.kubernetes.Cluster("cluster", {
 *     name: "placement_group",
 *     cni: "kilo",
 *     version: "1.35.3",
 *     tags: [
 *         "terraform-test",
 *         "scaleway_k8s_cluster",
 *         "placement_group",
 *     ],
 *     region: "fr-par",
 *     type: "multicloud",
 * });
 * const pool = new scaleway.kubernetes.Pool("pool", {
 *     name: "placement_group",
 *     clusterId: cluster.id,
 *     version: cluster.version,
 *     nodeType: "gp1_xs",
 *     placementGroupId: placementGroup.id,
 *     size: 1,
 *     region: cluster.region,
 *     zone: placementGroup.zone,
 * });
 * ```
 *
 * ## Changing the node-type of a pool
 *
 * As your needs evolve, you can migrate your workflow from one pool to another.
 * Pools have a unique name, and they also have an immutable node type.
 * Just changing the pool node type will recreate a new pool which could lead to service disruption.
 * To migrate your application with as little downtime as possible we recommend using the following workflow:
 *
 * ### General workflow to upgrade a pool
 *
 * - Create a new pool with a different name and the type you target.
 * - Use [`kubectl drain`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#drain) on nodes composing your old pool to drain the remaining workflows of this pool.
 *   Normally it should transfer your workflows to the new pool. Check out the official documentation about [how to safely drain your nodes](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/).
 * - Delete the old pool from your terraform configuration.
 *
 * ### Using a composite name to force creation of a new pool when a variable updates
 *
 * If you want to have a new pool created when a variable changes, you can use a name derived from node type such as:
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as scaleway from "@pulumiverse/scaleway";
 *
 * const kubernetesClusterWorkers1 = new scaleway.kubernetes.Pool("kubernetes_cluster_workers_1", {
 *     clusterId: kubernetesCluster.id,
 *     name: `${kubernetesClusterId}_${nodeType}_1`,
 *     nodeType: nodeType,
 *     autoscaling: true,
 *     autohealing: true,
 *     size: 5,
 *     minSize: 5,
 *     maxSize: 10,
 *     waitForPoolReady: true,
 * });
 * ```
 *
 * Thanks to [@deimosfr](https://github.com/deimosfr) for the contribution.
 *
 * ## Import
 *
 * Kubernetes pools can be imported using the `{region}/{id}`, e.g.
 *
 * ```sh
 * $ pulumi import scaleway:index/kubernetesNodePool:KubernetesNodePool mypool fr-par/11111111-1111-1111-1111-111111111111
 * ```
 *
 * @deprecated scaleway.index/kubernetesnodepool.KubernetesNodePool has been deprecated in favor of scaleway.kubernetes/pool.Pool
 */
export declare class KubernetesNodePool extends pulumi.CustomResource {
    /**
     * Get an existing KubernetesNodePool resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: KubernetesNodePoolState, opts?: pulumi.CustomResourceOptions): KubernetesNodePool;
    /**
     * Returns true if the given object is an instance of KubernetesNodePool.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is KubernetesNodePool;
    /**
     * Enables the autohealing feature for this pool.
     */
    readonly autohealing: pulumi.Output<boolean | undefined>;
    /**
     * Enables the autoscaling feature for this pool.
     *
     * > **Important:** When enabled, an update of the `size` will not be taken into account.
     */
    readonly autoscaling: pulumi.Output<boolean | undefined>;
    /**
     * The ID of the Kubernetes cluster on which this pool will be created.
     */
    readonly clusterId: pulumi.Output<string>;
    /**
     * The container runtime of the pool.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    readonly containerRuntime: pulumi.Output<string | undefined>;
    /**
     * The creation date of the pool.
     */
    readonly createdAt: pulumi.Output<string>;
    /**
     * The size of the pool at the time the terraform state was updated.
     */
    readonly currentSize: pulumi.Output<number>;
    /**
     * The Kubelet arguments to be used by this pool
     */
    readonly kubeletArgs: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The list of Kubernetes labels applied and reconciled on the nodes.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The maximum size of the pool, used by the autoscaling feature.
     */
    readonly maxSize: pulumi.Output<number>;
    /**
     * The minimum size of the pool, used by the autoscaling feature.
     */
    readonly minSize: pulumi.Output<number>;
    /**
     * The name for the pool. If not provided it will be generated.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     *
     * > Note: In order to use the `createBeforeDestroy` option of the `lifecycle` field, `name` has to be generated, otherwise Terraform will try to create the new pool with the same name and the API does not allow that.
     */
    readonly name: pulumi.Output<string>;
    /**
     * The commercial type of the pool instances. Instances with insufficient memory are not eligible (DEV1-S, PLAY2-PICO, STARDUST). `external` is a special node type used to provision from other Cloud providers.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    readonly nodeType: pulumi.Output<string>;
    /**
     * (List of) The nodes in the default pool.
     */
    readonly nodes: pulumi.Output<outputs.KubernetesNodePoolNode[]>;
    /**
     * The [placement group](https://www.scaleway.com/en/developers/api/instance/#path-placement-groups-create-a-placement-group) the nodes of the pool will be attached to.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    readonly placementGroupId: pulumi.Output<string | undefined>;
    /**
     * Defines if the public IP should be removed from Nodes. To use this feature, your Cluster must have an attached Private Network set up with a Public Gateway.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    readonly publicIpDisabled: pulumi.Output<boolean | undefined>;
    /**
     * `region`) The region in which the pool should be created.
     */
    readonly region: pulumi.Output<string | undefined>;
    /**
     * The size of the system volume of the nodes in gigabyte
     *
     * > Note: The minimal volume size of a node is 20GB.
     */
    readonly rootVolumeSizeInGb: pulumi.Output<number>;
    /**
     * System volume type of the nodes composing the pool
     */
    readonly rootVolumeType: pulumi.Output<string>;
    /**
     * The ID of the security group
     */
    readonly securityGroupId: pulumi.Output<string>;
    /**
     * The size of the pool.
     *
     * > **Important:** This field will only be used at creation if autoscaling is enabled.
     */
    readonly size: pulumi.Output<number>;
    /**
     * The list of Kubernetes taints applied at node creation but not reconciled afterward.
     */
    readonly startupTaints: pulumi.Output<outputs.KubernetesNodePoolStartupTaint[] | undefined>;
    /**
     * The status of the node.
     */
    readonly status: pulumi.Output<string>;
    /**
     * The tags associated with the pool.
     *
     * > Note: As mentioned in [this document](https://github.com/scaleway/scaleway-cloud-controller-manager/blob/master/docs/tags.md#taints), taints of a pool's nodes are applied using tags. (e.g.: `"taint=taintName=taintValue:Effect"`)
     */
    readonly tags: pulumi.Output<string[] | undefined>;
    /**
     * The list of Kubernetes taints applied and reconciled on the nodes.
     */
    readonly taints: pulumi.Output<outputs.KubernetesNodePoolTaint[] | undefined>;
    /**
     * The last update date of the pool.
     */
    readonly updatedAt: pulumi.Output<string>;
    /**
     * The Pool upgrade policy
     */
    readonly upgradePolicy: pulumi.Output<outputs.KubernetesNodePoolUpgradePolicy>;
    /**
     * The version of the pool. If not explicitly set, the version of the pool will be equal to the version of the cluster.
     * For the field to be properly taken into account, the `upgradePools` field of the cluster must be set to `false` in order to decouple the version of the pool from the cluster.
     *
     * > **Important:** This field is only taken into account when updating/upgrading the resource. At creation, the pool's version is always the cluster's version.
     */
    readonly version: pulumi.Output<string>;
    /**
     * Whether to wait for the pool to be ready.
     */
    readonly waitForPoolReady: pulumi.Output<boolean | undefined>;
    /**
     * `zone`) The zone in which the pool should be created.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    readonly zone: pulumi.Output<string | undefined>;
    /**
     * Create a KubernetesNodePool resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    /** @deprecated scaleway.index/kubernetesnodepool.KubernetesNodePool has been deprecated in favor of scaleway.kubernetes/pool.Pool */
    constructor(name: string, args: KubernetesNodePoolArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering KubernetesNodePool resources.
 */
export interface KubernetesNodePoolState {
    /**
     * Enables the autohealing feature for this pool.
     */
    autohealing?: pulumi.Input<boolean | undefined>;
    /**
     * Enables the autoscaling feature for this pool.
     *
     * > **Important:** When enabled, an update of the `size` will not be taken into account.
     */
    autoscaling?: pulumi.Input<boolean | undefined>;
    /**
     * The ID of the Kubernetes cluster on which this pool will be created.
     */
    clusterId?: pulumi.Input<string | undefined>;
    /**
     * The container runtime of the pool.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    containerRuntime?: pulumi.Input<string | undefined>;
    /**
     * The creation date of the pool.
     */
    createdAt?: pulumi.Input<string | undefined>;
    /**
     * The size of the pool at the time the terraform state was updated.
     */
    currentSize?: pulumi.Input<number | undefined>;
    /**
     * The Kubelet arguments to be used by this pool
     */
    kubeletArgs?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * The list of Kubernetes labels applied and reconciled on the nodes.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * The maximum size of the pool, used by the autoscaling feature.
     */
    maxSize?: pulumi.Input<number | undefined>;
    /**
     * The minimum size of the pool, used by the autoscaling feature.
     */
    minSize?: pulumi.Input<number | undefined>;
    /**
     * The name for the pool. If not provided it will be generated.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     *
     * > Note: In order to use the `createBeforeDestroy` option of the `lifecycle` field, `name` has to be generated, otherwise Terraform will try to create the new pool with the same name and the API does not allow that.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The commercial type of the pool instances. Instances with insufficient memory are not eligible (DEV1-S, PLAY2-PICO, STARDUST). `external` is a special node type used to provision from other Cloud providers.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    nodeType?: pulumi.Input<string | undefined>;
    /**
     * (List of) The nodes in the default pool.
     */
    nodes?: pulumi.Input<pulumi.Input<inputs.KubernetesNodePoolNode>[] | undefined>;
    /**
     * The [placement group](https://www.scaleway.com/en/developers/api/instance/#path-placement-groups-create-a-placement-group) the nodes of the pool will be attached to.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    placementGroupId?: pulumi.Input<string | undefined>;
    /**
     * Defines if the public IP should be removed from Nodes. To use this feature, your Cluster must have an attached Private Network set up with a Public Gateway.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    publicIpDisabled?: pulumi.Input<boolean | undefined>;
    /**
     * `region`) The region in which the pool should be created.
     */
    region?: pulumi.Input<string | undefined>;
    /**
     * The size of the system volume of the nodes in gigabyte
     *
     * > Note: The minimal volume size of a node is 20GB.
     */
    rootVolumeSizeInGb?: pulumi.Input<number | undefined>;
    /**
     * System volume type of the nodes composing the pool
     */
    rootVolumeType?: pulumi.Input<string | undefined>;
    /**
     * The ID of the security group
     */
    securityGroupId?: pulumi.Input<string | undefined>;
    /**
     * The size of the pool.
     *
     * > **Important:** This field will only be used at creation if autoscaling is enabled.
     */
    size?: pulumi.Input<number | undefined>;
    /**
     * The list of Kubernetes taints applied at node creation but not reconciled afterward.
     */
    startupTaints?: pulumi.Input<pulumi.Input<inputs.KubernetesNodePoolStartupTaint>[] | undefined>;
    /**
     * The status of the node.
     */
    status?: pulumi.Input<string | undefined>;
    /**
     * The tags associated with the pool.
     *
     * > Note: As mentioned in [this document](https://github.com/scaleway/scaleway-cloud-controller-manager/blob/master/docs/tags.md#taints), taints of a pool's nodes are applied using tags. (e.g.: `"taint=taintName=taintValue:Effect"`)
     */
    tags?: pulumi.Input<pulumi.Input<string>[] | undefined>;
    /**
     * The list of Kubernetes taints applied and reconciled on the nodes.
     */
    taints?: pulumi.Input<pulumi.Input<inputs.KubernetesNodePoolTaint>[] | undefined>;
    /**
     * The last update date of the pool.
     */
    updatedAt?: pulumi.Input<string | undefined>;
    /**
     * The Pool upgrade policy
     */
    upgradePolicy?: pulumi.Input<inputs.KubernetesNodePoolUpgradePolicy | undefined>;
    /**
     * The version of the pool. If not explicitly set, the version of the pool will be equal to the version of the cluster.
     * For the field to be properly taken into account, the `upgradePools` field of the cluster must be set to `false` in order to decouple the version of the pool from the cluster.
     *
     * > **Important:** This field is only taken into account when updating/upgrading the resource. At creation, the pool's version is always the cluster's version.
     */
    version?: pulumi.Input<string | undefined>;
    /**
     * Whether to wait for the pool to be ready.
     */
    waitForPoolReady?: pulumi.Input<boolean | undefined>;
    /**
     * `zone`) The zone in which the pool should be created.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    zone?: pulumi.Input<string | undefined>;
}
/**
 * The set of arguments for constructing a KubernetesNodePool resource.
 */
export interface KubernetesNodePoolArgs {
    /**
     * Enables the autohealing feature for this pool.
     */
    autohealing?: pulumi.Input<boolean | undefined>;
    /**
     * Enables the autoscaling feature for this pool.
     *
     * > **Important:** When enabled, an update of the `size` will not be taken into account.
     */
    autoscaling?: pulumi.Input<boolean | undefined>;
    /**
     * The ID of the Kubernetes cluster on which this pool will be created.
     */
    clusterId: pulumi.Input<string>;
    /**
     * The container runtime of the pool.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    containerRuntime?: pulumi.Input<string | undefined>;
    /**
     * The Kubelet arguments to be used by this pool
     */
    kubeletArgs?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * The list of Kubernetes labels applied and reconciled on the nodes.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * The maximum size of the pool, used by the autoscaling feature.
     */
    maxSize?: pulumi.Input<number | undefined>;
    /**
     * The minimum size of the pool, used by the autoscaling feature.
     */
    minSize?: pulumi.Input<number | undefined>;
    /**
     * The name for the pool. If not provided it will be generated.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     *
     * > Note: In order to use the `createBeforeDestroy` option of the `lifecycle` field, `name` has to be generated, otherwise Terraform will try to create the new pool with the same name and the API does not allow that.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The commercial type of the pool instances. Instances with insufficient memory are not eligible (DEV1-S, PLAY2-PICO, STARDUST). `external` is a special node type used to provision from other Cloud providers.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    nodeType: pulumi.Input<string>;
    /**
     * The [placement group](https://www.scaleway.com/en/developers/api/instance/#path-placement-groups-create-a-placement-group) the nodes of the pool will be attached to.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    placementGroupId?: pulumi.Input<string | undefined>;
    /**
     * Defines if the public IP should be removed from Nodes. To use this feature, your Cluster must have an attached Private Network set up with a Public Gateway.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    publicIpDisabled?: pulumi.Input<boolean | undefined>;
    /**
     * `region`) The region in which the pool should be created.
     */
    region?: pulumi.Input<string | undefined>;
    /**
     * The size of the system volume of the nodes in gigabyte
     *
     * > Note: The minimal volume size of a node is 20GB.
     */
    rootVolumeSizeInGb?: pulumi.Input<number | undefined>;
    /**
     * System volume type of the nodes composing the pool
     */
    rootVolumeType?: pulumi.Input<string | undefined>;
    /**
     * The ID of the security group
     */
    securityGroupId?: pulumi.Input<string | undefined>;
    /**
     * The size of the pool.
     *
     * > **Important:** This field will only be used at creation if autoscaling is enabled.
     */
    size: pulumi.Input<number>;
    /**
     * The list of Kubernetes taints applied at node creation but not reconciled afterward.
     */
    startupTaints?: pulumi.Input<pulumi.Input<inputs.KubernetesNodePoolStartupTaint>[] | undefined>;
    /**
     * The tags associated with the pool.
     *
     * > Note: As mentioned in [this document](https://github.com/scaleway/scaleway-cloud-controller-manager/blob/master/docs/tags.md#taints), taints of a pool's nodes are applied using tags. (e.g.: `"taint=taintName=taintValue:Effect"`)
     */
    tags?: pulumi.Input<pulumi.Input<string>[] | undefined>;
    /**
     * The list of Kubernetes taints applied and reconciled on the nodes.
     */
    taints?: pulumi.Input<pulumi.Input<inputs.KubernetesNodePoolTaint>[] | undefined>;
    /**
     * The Pool upgrade policy
     */
    upgradePolicy?: pulumi.Input<inputs.KubernetesNodePoolUpgradePolicy | undefined>;
    /**
     * The version of the pool. If not explicitly set, the version of the pool will be equal to the version of the cluster.
     * For the field to be properly taken into account, the `upgradePools` field of the cluster must be set to `false` in order to decouple the version of the pool from the cluster.
     *
     * > **Important:** This field is only taken into account when updating/upgrading the resource. At creation, the pool's version is always the cluster's version.
     */
    version?: pulumi.Input<string | undefined>;
    /**
     * Whether to wait for the pool to be ready.
     */
    waitForPoolReady?: pulumi.Input<boolean | undefined>;
    /**
     * `zone`) The zone in which the pool should be created.
     *
     * > **Important:** Updates to this field will recreate a new resource.
     */
    zone?: pulumi.Input<string | undefined>;
}
//# sourceMappingURL=kubernetesNodePool.d.ts.map