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

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['DeploymentArgs', 'Deployment']

@pulumi.input_type
class DeploymentArgs:
    def __init__(__self__, *,
                 node_amount: pulumi.Input[_builtins.int],
                 node_type: pulumi.Input[_builtins.str],
                 version: pulumi.Input[_builtins.str],
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 password: Optional[pulumi.Input[_builtins.str]] = None,
                 private_network: Optional[pulumi.Input['DeploymentPrivateNetworkArgs']] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 user_name: Optional[pulumi.Input[_builtins.str]] = None,
                 volume: Optional[pulumi.Input['DeploymentVolumeArgs']] = None):
        """
        The set of arguments for constructing a Deployment resource.
        :param pulumi.Input[_builtins.int] node_amount: Number of nodes in the cluster. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] node_type: Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] version: OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] name: Name of the OpenSearch deployment. If not specified, a random name will be generated.
        :param pulumi.Input[_builtins.str] password: Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        :param pulumi.Input['DeploymentPrivateNetworkArgs'] private_network: Private network configuration
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the deployment is associated with.
               
               > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).
               
               > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the deployment should be created.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: List of tags to apply to the deployment.
        :param pulumi.Input[_builtins.str] user_name: Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        :param pulumi.Input['DeploymentVolumeArgs'] volume: Volume configuration for the cluster.
        """
        pulumi.set(__self__, "node_amount", node_amount)
        pulumi.set(__self__, "node_type", node_type)
        pulumi.set(__self__, "version", version)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if private_network is not None:
            pulumi.set(__self__, "private_network", private_network)
        if project_id is not None:
            pulumi.set(__self__, "project_id", project_id)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if user_name is not None:
            pulumi.set(__self__, "user_name", user_name)
        if volume is not None:
            pulumi.set(__self__, "volume", volume)

    @_builtins.property
    @pulumi.getter(name="nodeAmount")
    def node_amount(self) -> pulumi.Input[_builtins.int]:
        """
        Number of nodes in the cluster. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "node_amount")

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

    @_builtins.property
    @pulumi.getter(name="nodeType")
    def node_type(self) -> pulumi.Input[_builtins.str]:
        """
        Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "node_type")

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

    @_builtins.property
    @pulumi.getter
    def version(self) -> pulumi.Input[_builtins.str]:
        """
        OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "version")

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

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Name of the OpenSearch deployment. If not specified, a random name will be generated.
        """
        return pulumi.get(self, "name")

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

    @_builtins.property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "password")

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

    @_builtins.property
    @pulumi.getter(name="privateNetwork")
    def private_network(self) -> Optional[pulumi.Input['DeploymentPrivateNetworkArgs']]:
        """
        Private network configuration
        """
        return pulumi.get(self, "private_network")

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

    @_builtins.property
    @pulumi.getter(name="projectId")
    def project_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `project_id`) The ID of the project the deployment is associated with.

        > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).

        > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        """
        return pulumi.get(self, "project_id")

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

    @_builtins.property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `region`) The region in which the deployment should be created.
        """
        return pulumi.get(self, "region")

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

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of tags to apply to the deployment.
        """
        return pulumi.get(self, "tags")

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

    @_builtins.property
    @pulumi.getter(name="userName")
    def user_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "user_name")

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

    @_builtins.property
    @pulumi.getter
    def volume(self) -> Optional[pulumi.Input['DeploymentVolumeArgs']]:
        """
        Volume configuration for the cluster.
        """
        return pulumi.get(self, "volume")

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


@pulumi.input_type
class _DeploymentState:
    def __init__(__self__, *,
                 created_at: Optional[pulumi.Input[_builtins.str]] = None,
                 endpoints: Optional[pulumi.Input[Sequence[pulumi.Input['DeploymentEndpointArgs']]]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 node_amount: Optional[pulumi.Input[_builtins.int]] = None,
                 node_type: Optional[pulumi.Input[_builtins.str]] = None,
                 password: Optional[pulumi.Input[_builtins.str]] = None,
                 private_network: Optional[pulumi.Input['DeploymentPrivateNetworkArgs']] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 public_dashboard_url: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 status: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 updated_at: Optional[pulumi.Input[_builtins.str]] = None,
                 user_name: Optional[pulumi.Input[_builtins.str]] = None,
                 version: Optional[pulumi.Input[_builtins.str]] = None,
                 volume: Optional[pulumi.Input['DeploymentVolumeArgs']] = None):
        """
        Input properties used for looking up and filtering Deployment resources.
        :param pulumi.Input[_builtins.str] created_at: Date and time of deployment creation (RFC 3339 format).
        :param pulumi.Input[Sequence[pulumi.Input['DeploymentEndpointArgs']]] endpoints: List of endpoints for accessing the deployment.
        :param pulumi.Input[_builtins.str] name: Name of the OpenSearch deployment. If not specified, a random name will be generated.
        :param pulumi.Input[_builtins.int] node_amount: Number of nodes in the cluster. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] node_type: Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] password: Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        :param pulumi.Input['DeploymentPrivateNetworkArgs'] private_network: Private network configuration
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the deployment is associated with.
               
               > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).
               
               > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        :param pulumi.Input[_builtins.str] public_dashboard_url: URL of OpenSearch Dashboards when served on a **public** endpoint. With a private network for the API, the API endpoint is private but the dashboard may still be reachable at this public URL.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the deployment should be created.
        :param pulumi.Input[_builtins.str] status: The status of the deployment (e.g., "ready", "creating", "upgrading").
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: List of tags to apply to the deployment.
        :param pulumi.Input[_builtins.str] updated_at: Date and time of deployment last update (RFC 3339 format).
        :param pulumi.Input[_builtins.str] user_name: Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] version: OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        :param pulumi.Input['DeploymentVolumeArgs'] volume: Volume configuration for the cluster.
        """
        if created_at is not None:
            pulumi.set(__self__, "created_at", created_at)
        if endpoints is not None:
            pulumi.set(__self__, "endpoints", endpoints)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if node_amount is not None:
            pulumi.set(__self__, "node_amount", node_amount)
        if node_type is not None:
            pulumi.set(__self__, "node_type", node_type)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if private_network is not None:
            pulumi.set(__self__, "private_network", private_network)
        if project_id is not None:
            pulumi.set(__self__, "project_id", project_id)
        if public_dashboard_url is not None:
            pulumi.set(__self__, "public_dashboard_url", public_dashboard_url)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if updated_at is not None:
            pulumi.set(__self__, "updated_at", updated_at)
        if user_name is not None:
            pulumi.set(__self__, "user_name", user_name)
        if version is not None:
            pulumi.set(__self__, "version", version)
        if volume is not None:
            pulumi.set(__self__, "volume", volume)

    @_builtins.property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Date and time of deployment creation (RFC 3339 format).
        """
        return pulumi.get(self, "created_at")

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

    @_builtins.property
    @pulumi.getter
    def endpoints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['DeploymentEndpointArgs']]]]:
        """
        List of endpoints for accessing the deployment.
        """
        return pulumi.get(self, "endpoints")

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

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Name of the OpenSearch deployment. If not specified, a random name will be generated.
        """
        return pulumi.get(self, "name")

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

    @_builtins.property
    @pulumi.getter(name="nodeAmount")
    def node_amount(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Number of nodes in the cluster. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "node_amount")

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

    @_builtins.property
    @pulumi.getter(name="nodeType")
    def node_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "node_type")

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

    @_builtins.property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "password")

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

    @_builtins.property
    @pulumi.getter(name="privateNetwork")
    def private_network(self) -> Optional[pulumi.Input['DeploymentPrivateNetworkArgs']]:
        """
        Private network configuration
        """
        return pulumi.get(self, "private_network")

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

    @_builtins.property
    @pulumi.getter(name="projectId")
    def project_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `project_id`) The ID of the project the deployment is associated with.

        > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).

        > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        """
        return pulumi.get(self, "project_id")

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

    @_builtins.property
    @pulumi.getter(name="publicDashboardUrl")
    def public_dashboard_url(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        URL of OpenSearch Dashboards when served on a **public** endpoint. With a private network for the API, the API endpoint is private but the dashboard may still be reachable at this public URL.
        """
        return pulumi.get(self, "public_dashboard_url")

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

    @_builtins.property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `region`) The region in which the deployment should be created.
        """
        return pulumi.get(self, "region")

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

    @_builtins.property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The status of the deployment (e.g., "ready", "creating", "upgrading").
        """
        return pulumi.get(self, "status")

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

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        List of tags to apply to the deployment.
        """
        return pulumi.get(self, "tags")

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

    @_builtins.property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Date and time of deployment last update (RFC 3339 format).
        """
        return pulumi.get(self, "updated_at")

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

    @_builtins.property
    @pulumi.getter(name="userName")
    def user_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "user_name")

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

    @_builtins.property
    @pulumi.getter
    def version(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "version")

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

    @_builtins.property
    @pulumi.getter
    def volume(self) -> Optional[pulumi.Input['DeploymentVolumeArgs']]:
        """
        Volume configuration for the cluster.
        """
        return pulumi.get(self, "volume")

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


@pulumi.type_token("scaleway:opensearch/deployment:Deployment")
class Deployment(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 node_amount: Optional[pulumi.Input[_builtins.int]] = None,
                 node_type: Optional[pulumi.Input[_builtins.str]] = None,
                 password: Optional[pulumi.Input[_builtins.str]] = None,
                 private_network: Optional[pulumi.Input[Union['DeploymentPrivateNetworkArgs', 'DeploymentPrivateNetworkArgsDict']]] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 user_name: Optional[pulumi.Input[_builtins.str]] = None,
                 version: Optional[pulumi.Input[_builtins.str]] = None,
                 volume: Optional[pulumi.Input[Union['DeploymentVolumeArgs', 'DeploymentVolumeArgsDict']]] = None,
                 __props__=None):
        """
        ## Import

        OpenSearch deployments can be imported using the `{region}/{id}`, e.g.

        bash

        ```sh
        $ pulumi import scaleway:opensearch/deployment:Deployment main fr-par/11111111-1111-1111-1111-111111111111
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] name: Name of the OpenSearch deployment. If not specified, a random name will be generated.
        :param pulumi.Input[_builtins.int] node_amount: Number of nodes in the cluster. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] node_type: Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] password: Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        :param pulumi.Input[Union['DeploymentPrivateNetworkArgs', 'DeploymentPrivateNetworkArgsDict']] private_network: Private network configuration
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the deployment is associated with.
               
               > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).
               
               > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the deployment should be created.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: List of tags to apply to the deployment.
        :param pulumi.Input[_builtins.str] user_name: Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] version: OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        :param pulumi.Input[Union['DeploymentVolumeArgs', 'DeploymentVolumeArgsDict']] volume: Volume configuration for the cluster.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: DeploymentArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        ## Import

        OpenSearch deployments can be imported using the `{region}/{id}`, e.g.

        bash

        ```sh
        $ pulumi import scaleway:opensearch/deployment:Deployment main fr-par/11111111-1111-1111-1111-111111111111
        ```

        :param str resource_name: The name of the resource.
        :param DeploymentArgs 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(DeploymentArgs, 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,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 node_amount: Optional[pulumi.Input[_builtins.int]] = None,
                 node_type: Optional[pulumi.Input[_builtins.str]] = None,
                 password: Optional[pulumi.Input[_builtins.str]] = None,
                 private_network: Optional[pulumi.Input[Union['DeploymentPrivateNetworkArgs', 'DeploymentPrivateNetworkArgsDict']]] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 user_name: Optional[pulumi.Input[_builtins.str]] = None,
                 version: Optional[pulumi.Input[_builtins.str]] = None,
                 volume: Optional[pulumi.Input[Union['DeploymentVolumeArgs', 'DeploymentVolumeArgsDict']]] = 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__ = DeploymentArgs.__new__(DeploymentArgs)

            __props__.__dict__["name"] = name
            if node_amount is None and not opts.urn:
                raise TypeError("Missing required property 'node_amount'")
            __props__.__dict__["node_amount"] = node_amount
            if node_type is None and not opts.urn:
                raise TypeError("Missing required property 'node_type'")
            __props__.__dict__["node_type"] = node_type
            __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password)
            __props__.__dict__["private_network"] = private_network
            __props__.__dict__["project_id"] = project_id
            __props__.__dict__["region"] = region
            __props__.__dict__["tags"] = tags
            __props__.__dict__["user_name"] = user_name
            if version is None and not opts.urn:
                raise TypeError("Missing required property 'version'")
            __props__.__dict__["version"] = version
            __props__.__dict__["volume"] = volume
            __props__.__dict__["created_at"] = None
            __props__.__dict__["endpoints"] = None
            __props__.__dict__["public_dashboard_url"] = None
            __props__.__dict__["status"] = None
            __props__.__dict__["updated_at"] = None
        secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["password"])
        opts = pulumi.ResourceOptions.merge(opts, secret_opts)
        super(Deployment, __self__).__init__(
            'scaleway:opensearch/deployment:Deployment',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            created_at: Optional[pulumi.Input[_builtins.str]] = None,
            endpoints: Optional[pulumi.Input[Sequence[pulumi.Input[Union['DeploymentEndpointArgs', 'DeploymentEndpointArgsDict']]]]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            node_amount: Optional[pulumi.Input[_builtins.int]] = None,
            node_type: Optional[pulumi.Input[_builtins.str]] = None,
            password: Optional[pulumi.Input[_builtins.str]] = None,
            private_network: Optional[pulumi.Input[Union['DeploymentPrivateNetworkArgs', 'DeploymentPrivateNetworkArgsDict']]] = None,
            project_id: Optional[pulumi.Input[_builtins.str]] = None,
            public_dashboard_url: Optional[pulumi.Input[_builtins.str]] = None,
            region: Optional[pulumi.Input[_builtins.str]] = None,
            status: Optional[pulumi.Input[_builtins.str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            updated_at: Optional[pulumi.Input[_builtins.str]] = None,
            user_name: Optional[pulumi.Input[_builtins.str]] = None,
            version: Optional[pulumi.Input[_builtins.str]] = None,
            volume: Optional[pulumi.Input[Union['DeploymentVolumeArgs', 'DeploymentVolumeArgsDict']]] = None) -> 'Deployment':
        """
        Get an existing Deployment 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[_builtins.str] created_at: Date and time of deployment creation (RFC 3339 format).
        :param pulumi.Input[Sequence[pulumi.Input[Union['DeploymentEndpointArgs', 'DeploymentEndpointArgsDict']]]] endpoints: List of endpoints for accessing the deployment.
        :param pulumi.Input[_builtins.str] name: Name of the OpenSearch deployment. If not specified, a random name will be generated.
        :param pulumi.Input[_builtins.int] node_amount: Number of nodes in the cluster. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] node_type: Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] password: Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        :param pulumi.Input[Union['DeploymentPrivateNetworkArgs', 'DeploymentPrivateNetworkArgsDict']] private_network: Private network configuration
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the deployment is associated with.
               
               > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).
               
               > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        :param pulumi.Input[_builtins.str] public_dashboard_url: URL of OpenSearch Dashboards when served on a **public** endpoint. With a private network for the API, the API endpoint is private but the dashboard may still be reachable at this public URL.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the deployment should be created.
        :param pulumi.Input[_builtins.str] status: The status of the deployment (e.g., "ready", "creating", "upgrading").
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: List of tags to apply to the deployment.
        :param pulumi.Input[_builtins.str] updated_at: Date and time of deployment last update (RFC 3339 format).
        :param pulumi.Input[_builtins.str] user_name: Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        :param pulumi.Input[_builtins.str] version: OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        :param pulumi.Input[Union['DeploymentVolumeArgs', 'DeploymentVolumeArgsDict']] volume: Volume configuration for the cluster.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _DeploymentState.__new__(_DeploymentState)

        __props__.__dict__["created_at"] = created_at
        __props__.__dict__["endpoints"] = endpoints
        __props__.__dict__["name"] = name
        __props__.__dict__["node_amount"] = node_amount
        __props__.__dict__["node_type"] = node_type
        __props__.__dict__["password"] = password
        __props__.__dict__["private_network"] = private_network
        __props__.__dict__["project_id"] = project_id
        __props__.__dict__["public_dashboard_url"] = public_dashboard_url
        __props__.__dict__["region"] = region
        __props__.__dict__["status"] = status
        __props__.__dict__["tags"] = tags
        __props__.__dict__["updated_at"] = updated_at
        __props__.__dict__["user_name"] = user_name
        __props__.__dict__["version"] = version
        __props__.__dict__["volume"] = volume
        return Deployment(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> pulumi.Output[_builtins.str]:
        """
        Date and time of deployment creation (RFC 3339 format).
        """
        return pulumi.get(self, "created_at")

    @_builtins.property
    @pulumi.getter
    def endpoints(self) -> pulumi.Output[Sequence['outputs.DeploymentEndpoint']]:
        """
        List of endpoints for accessing the deployment.
        """
        return pulumi.get(self, "endpoints")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        Name of the OpenSearch deployment. If not specified, a random name will be generated.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter(name="nodeAmount")
    def node_amount(self) -> pulumi.Output[_builtins.int]:
        """
        Number of nodes in the cluster. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "node_amount")

    @_builtins.property
    @pulumi.getter(name="nodeType")
    def node_type(self) -> pulumi.Output[_builtins.str]:
        """
        Type of node to use (e.g., "SEARCHDB-SHARED-2C-8G", "SEARCHDB-DEDICATED-2C-8G"). Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "node_type")

    @_builtins.property
    @pulumi.getter
    def password(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Password for the OpenSearch user. Must be at least 12 characters long. If not specified, you will need to reset the password through the API or console. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "password")

    @_builtins.property
    @pulumi.getter(name="privateNetwork")
    def private_network(self) -> pulumi.Output[Optional['outputs.DeploymentPrivateNetwork']]:
        """
        Private network configuration
        """
        return pulumi.get(self, "private_network")

    @_builtins.property
    @pulumi.getter(name="projectId")
    def project_id(self) -> pulumi.Output[_builtins.str]:
        """
        `project_id`) The ID of the project the deployment is associated with.

        > **Important:** A public endpoint is automatically created by default. Private network endpoints can be added using a separate endpoint resource (coming soon).

        > **Important:** The password must be at least 12 characters long. If not provided, you will need to reset it through the Scaleway console or API.
        """
        return pulumi.get(self, "project_id")

    @_builtins.property
    @pulumi.getter(name="publicDashboardUrl")
    def public_dashboard_url(self) -> pulumi.Output[_builtins.str]:
        """
        URL of OpenSearch Dashboards when served on a **public** endpoint. With a private network for the API, the API endpoint is private but the dashboard may still be reachable at this public URL.
        """
        return pulumi.get(self, "public_dashboard_url")

    @_builtins.property
    @pulumi.getter
    def region(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        `region`) The region in which the deployment should be created.
        """
        return pulumi.get(self, "region")

    @_builtins.property
    @pulumi.getter
    def status(self) -> pulumi.Output[_builtins.str]:
        """
        The status of the deployment (e.g., "ready", "creating", "upgrading").
        """
        return pulumi.get(self, "status")

    @_builtins.property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        List of tags to apply to the deployment.
        """
        return pulumi.get(self, "tags")

    @_builtins.property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> pulumi.Output[_builtins.str]:
        """
        Date and time of deployment last update (RFC 3339 format).
        """
        return pulumi.get(self, "updated_at")

    @_builtins.property
    @pulumi.getter(name="userName")
    def user_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Username for the deployment. If not specified, the default username will be used. Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "user_name")

    @_builtins.property
    @pulumi.getter
    def version(self) -> pulumi.Output[_builtins.str]:
        """
        OpenSearch version to use (e.g., "2.0"). Changing this forces recreation of the deployment.
        """
        return pulumi.get(self, "version")

    @_builtins.property
    @pulumi.getter
    def volume(self) -> pulumi.Output[Optional['outputs.DeploymentVolume']]:
        """
        Volume configuration for the cluster.
        """
        return pulumi.get(self, "volume")

