Files
pulumi-dokploy/sdk/python/pulumi_dokploy/mount.py
T
max-voitcov 73386ba0ff
build / build (push) Failing after 11m22s
release / plugin (push) Failing after 31m35s
release / sdks (push) Has been skipped
Bridge what Dokploy v0.30 added, and let the docs through
Six new resources from terraform-provider-dokploy v0.2.0 -- Network,
DnsProvider, VaultProvider, Schedule, VolumeBackup and Libsql -- plus the new
properties on Domain (`enabled`), Compose (`serviceNetworks`, `createEnvFile`,
`icon`) and Application. Verified with `pulumi up` against a live v0.30.2
instance: create, preview-clean, and destroy.

The upstream provider also now refuses a volume Mount with no `volumeName`,
which Dokploy would otherwise turn into an anonymous Docker volume recreated
on every deploy. That surfaces here at preview time, before anything exists.

Two things made that fix nearly invisible to Pulumi users, so this commit
fixes the second one: the bridge resolves the upstream `docs/` through the Go
module cache, where a locally `replace`d dependency never lands, so tfgen was
emitting every resource with no description at all. UpstreamRepoPath now
points at the checkout and all 445 inputs carry documentation -- with names
rendered per language, so Python readers see `volume_name` where TypeScript
readers see `volumeName`.
2026-08-26 00:46:32 +03:00

501 lines
23 KiB
Python
Generated

# 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
__all__ = ['MountArgs', 'Mount']
@pulumi.input_type
class MountArgs:
def __init__(__self__, *,
mount_path: pulumi.Input[_builtins.str],
service_id: pulumi.Input[_builtins.str],
service_type: pulumi.Input[_builtins.str],
type: pulumi.Input[_builtins.str],
content: pulumi.Input[Optional[_builtins.str]] = None,
file_path: pulumi.Input[Optional[_builtins.str]] = None,
host_path: pulumi.Input[Optional[_builtins.str]] = None,
volume_name: pulumi.Input[Optional[_builtins.str]] = None):
"""
The set of arguments for constructing a Mount resource.
:param pulumi.Input[_builtins.str] mount_path: Path inside the container where the mount appears.
:param pulumi.Input[_builtins.str] service_id: ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
:param pulumi.Input[_builtins.str] service_type: The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
:param pulumi.Input[_builtins.str] type: The kind of mount to create. Valid values: `bind`, `volume`, `file`.
:param pulumi.Input[_builtins.str] content: Contents of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] file_path: Path of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] host_path: Path on the host, when `type` is `bind`.
:param pulumi.Input[_builtins.str] volume_name: Name of the Docker volume, when `type` is `volume`.
"""
pulumi.set(__self__, "mount_path", mount_path)
pulumi.set(__self__, "service_id", service_id)
pulumi.set(__self__, "service_type", service_type)
pulumi.set(__self__, "type", type)
if content is not None:
pulumi.set(__self__, "content", content)
if file_path is not None:
pulumi.set(__self__, "file_path", file_path)
if host_path is not None:
pulumi.set(__self__, "host_path", host_path)
if volume_name is not None:
pulumi.set(__self__, "volume_name", volume_name)
@_builtins.property
@pulumi.getter(name="mountPath")
def mount_path(self) -> pulumi.Input[_builtins.str]:
"""
Path inside the container where the mount appears.
"""
return pulumi.get(self, "mount_path")
@mount_path.setter
def mount_path(self, value: pulumi.Input[_builtins.str]):
pulumi.set(self, "mount_path", value)
@_builtins.property
@pulumi.getter(name="serviceId")
def service_id(self) -> pulumi.Input[_builtins.str]:
"""
ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
"""
return pulumi.get(self, "service_id")
@service_id.setter
def service_id(self, value: pulumi.Input[_builtins.str]):
pulumi.set(self, "service_id", value)
@_builtins.property
@pulumi.getter(name="serviceType")
def service_type(self) -> pulumi.Input[_builtins.str]:
"""
The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
"""
return pulumi.get(self, "service_type")
@service_type.setter
def service_type(self, value: pulumi.Input[_builtins.str]):
pulumi.set(self, "service_type", value)
@_builtins.property
@pulumi.getter
def type(self) -> pulumi.Input[_builtins.str]:
"""
The kind of mount to create. Valid values: `bind`, `volume`, `file`.
"""
return pulumi.get(self, "type")
@type.setter
def type(self, value: pulumi.Input[_builtins.str]):
pulumi.set(self, "type", value)
@_builtins.property
@pulumi.getter
def content(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Contents of the generated file, when `type` is `file`.
"""
return pulumi.get(self, "content")
@content.setter
def content(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "content", value)
@_builtins.property
@pulumi.getter(name="filePath")
def file_path(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Path of the generated file, when `type` is `file`.
"""
return pulumi.get(self, "file_path")
@file_path.setter
def file_path(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "file_path", value)
@_builtins.property
@pulumi.getter(name="hostPath")
def host_path(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Path on the host, when `type` is `bind`.
"""
return pulumi.get(self, "host_path")
@host_path.setter
def host_path(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "host_path", value)
@_builtins.property
@pulumi.getter(name="volumeName")
def volume_name(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Name of the Docker volume, when `type` is `volume`.
"""
return pulumi.get(self, "volume_name")
@volume_name.setter
def volume_name(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "volume_name", value)
@pulumi.input_type
class _MountState:
def __init__(__self__, *,
content: pulumi.Input[Optional[_builtins.str]] = None,
file_path: pulumi.Input[Optional[_builtins.str]] = None,
host_path: pulumi.Input[Optional[_builtins.str]] = None,
mount_path: pulumi.Input[Optional[_builtins.str]] = None,
service_id: pulumi.Input[Optional[_builtins.str]] = None,
service_type: pulumi.Input[Optional[_builtins.str]] = None,
type: pulumi.Input[Optional[_builtins.str]] = None,
volume_name: pulumi.Input[Optional[_builtins.str]] = None):
"""
Input properties used for looking up and filtering Mount resources.
:param pulumi.Input[_builtins.str] content: Contents of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] file_path: Path of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] host_path: Path on the host, when `type` is `bind`.
:param pulumi.Input[_builtins.str] mount_path: Path inside the container where the mount appears.
:param pulumi.Input[_builtins.str] service_id: ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
:param pulumi.Input[_builtins.str] service_type: The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
:param pulumi.Input[_builtins.str] type: The kind of mount to create. Valid values: `bind`, `volume`, `file`.
:param pulumi.Input[_builtins.str] volume_name: Name of the Docker volume, when `type` is `volume`.
"""
if content is not None:
pulumi.set(__self__, "content", content)
if file_path is not None:
pulumi.set(__self__, "file_path", file_path)
if host_path is not None:
pulumi.set(__self__, "host_path", host_path)
if mount_path is not None:
pulumi.set(__self__, "mount_path", mount_path)
if service_id is not None:
pulumi.set(__self__, "service_id", service_id)
if service_type is not None:
pulumi.set(__self__, "service_type", service_type)
if type is not None:
pulumi.set(__self__, "type", type)
if volume_name is not None:
pulumi.set(__self__, "volume_name", volume_name)
@_builtins.property
@pulumi.getter
def content(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Contents of the generated file, when `type` is `file`.
"""
return pulumi.get(self, "content")
@content.setter
def content(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "content", value)
@_builtins.property
@pulumi.getter(name="filePath")
def file_path(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Path of the generated file, when `type` is `file`.
"""
return pulumi.get(self, "file_path")
@file_path.setter
def file_path(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "file_path", value)
@_builtins.property
@pulumi.getter(name="hostPath")
def host_path(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Path on the host, when `type` is `bind`.
"""
return pulumi.get(self, "host_path")
@host_path.setter
def host_path(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "host_path", value)
@_builtins.property
@pulumi.getter(name="mountPath")
def mount_path(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Path inside the container where the mount appears.
"""
return pulumi.get(self, "mount_path")
@mount_path.setter
def mount_path(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "mount_path", value)
@_builtins.property
@pulumi.getter(name="serviceId")
def service_id(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
"""
return pulumi.get(self, "service_id")
@service_id.setter
def service_id(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "service_id", value)
@_builtins.property
@pulumi.getter(name="serviceType")
def service_type(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
"""
return pulumi.get(self, "service_type")
@service_type.setter
def service_type(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "service_type", value)
@_builtins.property
@pulumi.getter
def type(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
The kind of mount to create. Valid values: `bind`, `volume`, `file`.
"""
return pulumi.get(self, "type")
@type.setter
def type(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "type", value)
@_builtins.property
@pulumi.getter(name="volumeName")
def volume_name(self) -> pulumi.Input[Optional[_builtins.str]]:
"""
Name of the Docker volume, when `type` is `volume`.
"""
return pulumi.get(self, "volume_name")
@volume_name.setter
def volume_name(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "volume_name", value)
@pulumi.type_token("dokploy:index/mount:Mount")
class Mount(pulumi.CustomResource):
@overload
def __init__(__self__,
resource_name: str,
opts: Optional[pulumi.ResourceOptions] = None,
content: pulumi.Input[Optional[_builtins.str]] = None,
file_path: pulumi.Input[Optional[_builtins.str]] = None,
host_path: pulumi.Input[Optional[_builtins.str]] = None,
mount_path: pulumi.Input[Optional[_builtins.str]] = None,
service_id: pulumi.Input[Optional[_builtins.str]] = None,
service_type: pulumi.Input[Optional[_builtins.str]] = None,
type: pulumi.Input[Optional[_builtins.str]] = None,
volume_name: pulumi.Input[Optional[_builtins.str]] = None,
__props__=None):
"""
A volume, bind mount, or config file attached to a Dokploy service.
* `type = "volume"` — a named Docker volume; set `volume_name`.
* `type = "bind"` — a path on the host; set `host_path`.
* `type = "file"` — a file rendered from `content`; set `file_path`.
> **A `volume` mount must set `volume_name`.** Dokploy hands an unset name to Docker as an empty source, which creates a fresh anonymous volume on every deploy and orphans the previous one — the data never survives a redeploy. The provider rejects that combination at plan time.
:param str resource_name: The name of the resource.
:param pulumi.ResourceOptions opts: Options for the resource.
:param pulumi.Input[_builtins.str] content: Contents of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] file_path: Path of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] host_path: Path on the host, when `type` is `bind`.
:param pulumi.Input[_builtins.str] mount_path: Path inside the container where the mount appears.
:param pulumi.Input[_builtins.str] service_id: ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
:param pulumi.Input[_builtins.str] service_type: The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
:param pulumi.Input[_builtins.str] type: The kind of mount to create. Valid values: `bind`, `volume`, `file`.
:param pulumi.Input[_builtins.str] volume_name: Name of the Docker volume, when `type` is `volume`.
"""
...
@overload
def __init__(__self__,
resource_name: str,
args: MountArgs,
opts: Optional[pulumi.ResourceOptions] = None):
"""
A volume, bind mount, or config file attached to a Dokploy service.
* `type = "volume"` — a named Docker volume; set `volume_name`.
* `type = "bind"` — a path on the host; set `host_path`.
* `type = "file"` — a file rendered from `content`; set `file_path`.
> **A `volume` mount must set `volume_name`.** Dokploy hands an unset name to Docker as an empty source, which creates a fresh anonymous volume on every deploy and orphans the previous one — the data never survives a redeploy. The provider rejects that combination at plan time.
:param str resource_name: The name of the resource.
:param MountArgs 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(MountArgs, 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,
content: pulumi.Input[Optional[_builtins.str]] = None,
file_path: pulumi.Input[Optional[_builtins.str]] = None,
host_path: pulumi.Input[Optional[_builtins.str]] = None,
mount_path: pulumi.Input[Optional[_builtins.str]] = None,
service_id: pulumi.Input[Optional[_builtins.str]] = None,
service_type: pulumi.Input[Optional[_builtins.str]] = None,
type: pulumi.Input[Optional[_builtins.str]] = None,
volume_name: pulumi.Input[Optional[_builtins.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__ = MountArgs.__new__(MountArgs)
__props__.__dict__["content"] = content
__props__.__dict__["file_path"] = file_path
__props__.__dict__["host_path"] = host_path
if mount_path is None and not opts.urn:
raise TypeError("Missing required property 'mount_path'")
__props__.__dict__["mount_path"] = mount_path
if service_id is None and not opts.urn:
raise TypeError("Missing required property 'service_id'")
__props__.__dict__["service_id"] = service_id
if service_type is None and not opts.urn:
raise TypeError("Missing required property 'service_type'")
__props__.__dict__["service_type"] = service_type
if type is None and not opts.urn:
raise TypeError("Missing required property 'type'")
__props__.__dict__["type"] = type
__props__.__dict__["volume_name"] = volume_name
super(Mount, __self__).__init__(
'dokploy:index/mount:Mount',
resource_name,
__props__,
opts)
@staticmethod
def get(resource_name: str,
id: pulumi.Input[str],
opts: Optional[pulumi.ResourceOptions] = None,
content: pulumi.Input[Optional[_builtins.str]] = None,
file_path: pulumi.Input[Optional[_builtins.str]] = None,
host_path: pulumi.Input[Optional[_builtins.str]] = None,
mount_path: pulumi.Input[Optional[_builtins.str]] = None,
service_id: pulumi.Input[Optional[_builtins.str]] = None,
service_type: pulumi.Input[Optional[_builtins.str]] = None,
type: pulumi.Input[Optional[_builtins.str]] = None,
volume_name: pulumi.Input[Optional[_builtins.str]] = None) -> 'Mount':
"""
Get an existing Mount 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] content: Contents of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] file_path: Path of the generated file, when `type` is `file`.
:param pulumi.Input[_builtins.str] host_path: Path on the host, when `type` is `bind`.
:param pulumi.Input[_builtins.str] mount_path: Path inside the container where the mount appears.
:param pulumi.Input[_builtins.str] service_id: ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
:param pulumi.Input[_builtins.str] service_type: The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
:param pulumi.Input[_builtins.str] type: The kind of mount to create. Valid values: `bind`, `volume`, `file`.
:param pulumi.Input[_builtins.str] volume_name: Name of the Docker volume, when `type` is `volume`.
"""
opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))
__props__ = _MountState.__new__(_MountState)
__props__.__dict__["content"] = content
__props__.__dict__["file_path"] = file_path
__props__.__dict__["host_path"] = host_path
__props__.__dict__["mount_path"] = mount_path
__props__.__dict__["service_id"] = service_id
__props__.__dict__["service_type"] = service_type
__props__.__dict__["type"] = type
__props__.__dict__["volume_name"] = volume_name
return Mount(resource_name, opts=opts, __props__=__props__)
@_builtins.property
@pulumi.getter
def content(self) -> pulumi.Output[Optional[_builtins.str]]:
"""
Contents of the generated file, when `type` is `file`.
"""
return pulumi.get(self, "content")
@_builtins.property
@pulumi.getter(name="filePath")
def file_path(self) -> pulumi.Output[Optional[_builtins.str]]:
"""
Path of the generated file, when `type` is `file`.
"""
return pulumi.get(self, "file_path")
@_builtins.property
@pulumi.getter(name="hostPath")
def host_path(self) -> pulumi.Output[Optional[_builtins.str]]:
"""
Path on the host, when `type` is `bind`.
"""
return pulumi.get(self, "host_path")
@_builtins.property
@pulumi.getter(name="mountPath")
def mount_path(self) -> pulumi.Output[_builtins.str]:
"""
Path inside the container where the mount appears.
"""
return pulumi.get(self, "mount_path")
@_builtins.property
@pulumi.getter(name="serviceId")
def service_id(self) -> pulumi.Output[_builtins.str]:
"""
ID of the service this mount attaches to. Must match `service_type` — an application ID, a compose ID, a postgres ID, and so on.
"""
return pulumi.get(self, "service_id")
@_builtins.property
@pulumi.getter(name="serviceType")
def service_type(self) -> pulumi.Output[_builtins.str]:
"""
The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
"""
return pulumi.get(self, "service_type")
@_builtins.property
@pulumi.getter
def type(self) -> pulumi.Output[_builtins.str]:
"""
The kind of mount to create. Valid values: `bind`, `volume`, `file`.
"""
return pulumi.get(self, "type")
@_builtins.property
@pulumi.getter(name="volumeName")
def volume_name(self) -> pulumi.Output[Optional[_builtins.str]]:
"""
Name of the Docker volume, when `type` is `volume`.
"""
return pulumi.get(self, "volume_name")