Bridge what Dokploy v0.30 added, and let the docs through
build / build (push) Failing after 11m22s
release / plugin (push) Failing after 31m35s
release / sdks (push) Has been skipped

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`.
This commit is contained in:
max-voitcov
2026-08-26 00:46:32 +03:00
parent ad3e908c98
commit 73386ba0ff
137 changed files with 19660 additions and 5183 deletions
+83 -69
View File
@@ -23,16 +23,16 @@ class MountArgs:
service_id: pulumi.Input[_builtins.str],
service_type: pulumi.Input[_builtins.str],
type: pulumi.Input[_builtins.str],
content: Optional[pulumi.Input[_builtins.str]] = None,
file_path: Optional[pulumi.Input[_builtins.str]] = None,
host_path: Optional[pulumi.Input[_builtins.str]] = None,
volume_name: Optional[pulumi.Input[_builtins.str]] = None):
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`.
: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`.
@@ -80,7 +80,7 @@ class MountArgs:
@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`.
The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
"""
return pulumi.get(self, "service_type")
@@ -102,64 +102,64 @@ class MountArgs:
@_builtins.property
@pulumi.getter
def content(self) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
def content(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "content", value)
@_builtins.property
@pulumi.getter(name="filePath")
def file_path(self) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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: Optional[pulumi.Input[_builtins.str]] = None,
file_path: Optional[pulumi.Input[_builtins.str]] = None,
host_path: Optional[pulumi.Input[_builtins.str]] = None,
mount_path: Optional[pulumi.Input[_builtins.str]] = None,
service_id: Optional[pulumi.Input[_builtins.str]] = None,
service_type: Optional[pulumi.Input[_builtins.str]] = None,
type: Optional[pulumi.Input[_builtins.str]] = None,
volume_name: Optional[pulumi.Input[_builtins.str]] = 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):
"""
Input properties used for looking up and filtering Mount resources.
@@ -168,7 +168,7 @@ class _MountState:
: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`.
: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`.
"""
@@ -191,98 +191,98 @@ class _MountState:
@_builtins.property
@pulumi.getter
def content(self) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
def content(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "content", value)
@_builtins.property
@pulumi.getter(name="filePath")
def file_path(self) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
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) -> Optional[pulumi.Input[_builtins.str]]:
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`.
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: Optional[pulumi.Input[_builtins.str]]):
def service_type(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "service_type", value)
@_builtins.property
@pulumi.getter
def type(self) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
def type(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "type", value)
@_builtins.property
@pulumi.getter(name="volumeName")
def volume_name(self) -> Optional[pulumi.Input[_builtins.str]]:
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: Optional[pulumi.Input[_builtins.str]]):
def volume_name(self, value: pulumi.Input[Optional[_builtins.str]]):
pulumi.set(self, "volume_name", value)
@@ -292,17 +292,24 @@ class Mount(pulumi.CustomResource):
def __init__(__self__,
resource_name: str,
opts: Optional[pulumi.ResourceOptions] = None,
content: Optional[pulumi.Input[_builtins.str]] = None,
file_path: Optional[pulumi.Input[_builtins.str]] = None,
host_path: Optional[pulumi.Input[_builtins.str]] = None,
mount_path: Optional[pulumi.Input[_builtins.str]] = None,
service_id: Optional[pulumi.Input[_builtins.str]] = None,
service_type: Optional[pulumi.Input[_builtins.str]] = None,
type: Optional[pulumi.Input[_builtins.str]] = None,
volume_name: Optional[pulumi.Input[_builtins.str]] = 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):
"""
Create a Mount resource with the given unique name, props, and options.
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.
@@ -311,7 +318,7 @@ class Mount(pulumi.CustomResource):
: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`.
: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`.
"""
@@ -322,7 +329,14 @@ class Mount(pulumi.CustomResource):
args: MountArgs,
opts: Optional[pulumi.ResourceOptions] = None):
"""
Create a Mount resource with the given unique name, props, and options.
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.
@@ -339,14 +353,14 @@ class Mount(pulumi.CustomResource):
def _internal_init(__self__,
resource_name: str,
opts: Optional[pulumi.ResourceOptions] = None,
content: Optional[pulumi.Input[_builtins.str]] = None,
file_path: Optional[pulumi.Input[_builtins.str]] = None,
host_path: Optional[pulumi.Input[_builtins.str]] = None,
mount_path: Optional[pulumi.Input[_builtins.str]] = None,
service_id: Optional[pulumi.Input[_builtins.str]] = None,
service_type: Optional[pulumi.Input[_builtins.str]] = None,
type: Optional[pulumi.Input[_builtins.str]] = None,
volume_name: Optional[pulumi.Input[_builtins.str]] = 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):
@@ -382,14 +396,14 @@ class Mount(pulumi.CustomResource):
def get(resource_name: str,
id: pulumi.Input[str],
opts: Optional[pulumi.ResourceOptions] = None,
content: Optional[pulumi.Input[_builtins.str]] = None,
file_path: Optional[pulumi.Input[_builtins.str]] = None,
host_path: Optional[pulumi.Input[_builtins.str]] = None,
mount_path: Optional[pulumi.Input[_builtins.str]] = None,
service_id: Optional[pulumi.Input[_builtins.str]] = None,
service_type: Optional[pulumi.Input[_builtins.str]] = None,
type: Optional[pulumi.Input[_builtins.str]] = None,
volume_name: Optional[pulumi.Input[_builtins.str]] = None) -> 'Mount':
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.
@@ -402,7 +416,7 @@ class Mount(pulumi.CustomResource):
: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`.
: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`.
"""
@@ -464,7 +478,7 @@ class Mount(pulumi.CustomResource):
@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`.
The kind of service this mount attaches to. Valid values: `application`, `postgres`, `mysql`, `mariadb`, `mongo`, `redis`, `compose`, `libsql`.
"""
return pulumi.get(self, "service_type")